shadow_rs/host/syscall/handler/
futex.rs

1use linux_api::errno::Errno;
2use shadow_shim_helper_rs::syscall_types::ForeignPtr;
3
4use crate::cshadow as c;
5use crate::host::syscall::handler::{SyscallContext, SyscallHandler};
6use crate::host::syscall::type_formatting::SyscallNonDeterministicArg;
7use crate::host::syscall::types::SyscallError;
8
9impl SyscallHandler {
10    log_syscall!(
11        futex,
12        /* rv */ std::ffi::c_int,
13        /* uaddr */ *const u32,
14        /* op */ std::ffi::c_int,
15        /* val */ u32,
16        /* utime */ *const std::ffi::c_void,
17        /* uaddr2 */ *const u32,
18        /* val3 */ SyscallNonDeterministicArg<u32>,
19    );
20    pub fn futex(
21        ctx: &mut SyscallContext,
22        _uaddr: ForeignPtr<u32>,
23        _op: std::ffi::c_int,
24        _val: u32,
25        _utime: ForeignPtr<linux_api::time::kernel_timespec>,
26        _uaddr2: ForeignPtr<u32>,
27        _val3: u32,
28    ) -> Result<std::ffi::c_int, SyscallError> {
29        Self::legacy_syscall(c::syscallhandler_futex, ctx)
30    }
31
32    log_syscall!(
33        get_robust_list,
34        /* rv */ std::ffi::c_int,
35        /* pid */ std::ffi::c_int,
36        /* head_ptr */ *const std::ffi::c_void,
37        /* len_ptr */ *const libc::size_t,
38    );
39    pub fn get_robust_list(
40        _ctx: &mut SyscallContext,
41        _pid: std::ffi::c_int,
42        _head_ptr: ForeignPtr<ForeignPtr<linux_api::futex::robust_list_head>>,
43        _len_ptr: ForeignPtr<libc::size_t>,
44    ) -> Result<(), Errno> {
45        warn_once_then_debug!("get_robust_list was called but we don't yet support it");
46        Err(Errno::ENOSYS)
47    }
48
49    log_syscall!(
50        set_robust_list,
51        /* rv */ std::ffi::c_int,
52        /* head */ *const std::ffi::c_void,
53        /* len */ libc::size_t,
54    );
55    pub fn set_robust_list(
56        _ctx: &mut SyscallContext,
57        _head: ForeignPtr<linux_api::futex::robust_list_head>,
58        _len: libc::size_t,
59    ) -> Result<(), Errno> {
60        warn_once_then_debug!("set_robust_list was called but we don't yet support it");
61        Err(Errno::ENOSYS)
62    }
63}