Add fadvise64 syscall
This commit is contained in:
parent
9570f14d80
commit
c6011b9650
|
|
@ -241,7 +241,7 @@ provided by Linux on x86-64 architecture.
|
|||
| 218 | set_tid_address | ✅ |
|
||||
| 219 | restart_syscall | ❌ |
|
||||
| 220 | semtimedop | ✅ |
|
||||
| 221 | fadvise64 | ❌ |
|
||||
| 221 | fadvise64 | ✅ |
|
||||
| 222 | timer_create | ✅ |
|
||||
| 223 | timer_settime | ✅ |
|
||||
| 224 | timer_gettime | ✅ |
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ use super::{
|
|||
execve::{sys_execve, sys_execveat},
|
||||
exit::sys_exit,
|
||||
exit_group::sys_exit_group,
|
||||
fadvise64::sys_fadvise64,
|
||||
fallocate::sys_fallocate,
|
||||
fcntl::sys_fcntl,
|
||||
flock::sys_flock,
|
||||
|
|
@ -284,6 +285,7 @@ impl_syscall_nums_and_dispatch_fn! {
|
|||
SYS_CLONE = 220 => sys_clone(args[..5], &user_ctx);
|
||||
SYS_EXECVE = 221 => sys_execve(args[..3], &mut user_ctx);
|
||||
SYS_MMAP = 222 => sys_mmap(args[..6]);
|
||||
SYS_FADVISE64 = 223 => sys_fadvise64(args[..4]);
|
||||
SYS_MPROTECT = 226 => sys_mprotect(args[..3]);
|
||||
SYS_MSYNC = 227 => sys_msync(args[..3]);
|
||||
SYS_MADVISE = 233 => sys_madvise(args[..3]);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ use super::{
|
|||
execve::{sys_execve, sys_execveat},
|
||||
exit::sys_exit,
|
||||
exit_group::sys_exit_group,
|
||||
fadvise64::sys_fadvise64,
|
||||
fallocate::sys_fallocate,
|
||||
fcntl::sys_fcntl,
|
||||
flock::sys_flock,
|
||||
|
|
@ -321,6 +322,7 @@ impl_syscall_nums_and_dispatch_fn! {
|
|||
SYS_GETDENTS64 = 217 => sys_getdents64(args[..3]);
|
||||
SYS_SET_TID_ADDRESS = 218 => sys_set_tid_address(args[..1]);
|
||||
SYS_SEMTIMEDOP = 220 => sys_semtimedop(args[..4]);
|
||||
SYS_FADVISE64 = 221 => sys_fadvise64(args[..4]);
|
||||
SYS_TIMER_CREATE = 222 => sys_timer_create(args[..3]);
|
||||
SYS_TIMER_SETTIME = 223 => sys_timer_settime(args[..4]);
|
||||
SYS_TIMER_GETTIME = 224 => sys_timer_gettime(args[..2]);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use super::SyscallReturn;
|
||||
use crate::{fs::file_table::get_file_fast, prelude::*};
|
||||
|
||||
#[repr(i32)]
|
||||
#[derive(Debug, TryFromInt)]
|
||||
enum FadviseBehavior {
|
||||
Normal = 0,
|
||||
Random = 1,
|
||||
Sequential = 2,
|
||||
Willneed = 3,
|
||||
Dontneed = 4,
|
||||
Noreuse = 5,
|
||||
}
|
||||
|
||||
pub fn sys_fadvise64(
|
||||
fd: i32,
|
||||
offset: usize,
|
||||
len: usize,
|
||||
advice: i32,
|
||||
ctx: &Context,
|
||||
) -> Result<SyscallReturn> {
|
||||
let behavior = FadviseBehavior::try_from(advice)
|
||||
.map_err(|_| Error::with_message(Errno::EINVAL, "invalid fadvise behavior:"))?;
|
||||
|
||||
debug!(
|
||||
"fd={}, offset={}, len={}, behavior={:?}",
|
||||
fd, offset, len, behavior
|
||||
);
|
||||
|
||||
let mut file_table = ctx.thread_local.borrow_file_table_mut();
|
||||
let _file = get_file_fast!(&mut file_table, fd);
|
||||
|
||||
match behavior {
|
||||
FadviseBehavior::Normal => {
|
||||
warn!("POSIX_FADV_NORMAL is ignored");
|
||||
}
|
||||
FadviseBehavior::Random => {
|
||||
warn!("POSIX_FADV_RANDOM is ignored");
|
||||
}
|
||||
FadviseBehavior::Sequential => {
|
||||
warn!("POSIX_FADV_SEQUENTIAL is ignored");
|
||||
}
|
||||
FadviseBehavior::Willneed => {
|
||||
warn!("POSIX_FADV_WILLNEED is ignored");
|
||||
}
|
||||
FadviseBehavior::Dontneed => {
|
||||
warn!("POSIX_FADV_DONTNEED is ignored");
|
||||
}
|
||||
FadviseBehavior::Noreuse => {
|
||||
warn!("POSIX_FADV_NOREUSE is ignored");
|
||||
}
|
||||
}
|
||||
|
||||
Ok(SyscallReturn::Return(0))
|
||||
}
|
||||
|
|
@ -37,6 +37,7 @@ mod eventfd;
|
|||
mod execve;
|
||||
mod exit;
|
||||
mod exit_group;
|
||||
mod fadvise64;
|
||||
mod fallocate;
|
||||
mod fcntl;
|
||||
mod flock;
|
||||
|
|
|
|||
|
|
@ -249,10 +249,10 @@ fallocate03
|
|||
#posix_fadvise test cases
|
||||
# posix_fadvise01
|
||||
# posix_fadvise01_64
|
||||
# posix_fadvise02
|
||||
# posix_fadvise02_64
|
||||
# posix_fadvise03
|
||||
# posix_fadvise03_64
|
||||
posix_fadvise02
|
||||
posix_fadvise02_64
|
||||
posix_fadvise03
|
||||
posix_fadvise03_64
|
||||
# posix_fadvise04
|
||||
# posix_fadvise04_64
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue