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 std::ffi::c_int,
13 *const u32,
14 std::ffi::c_int,
15 u32,
16 *const std::ffi::c_void,
17 *const u32,
18 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 std::ffi::c_int,
35 std::ffi::c_int,
36 *const std::ffi::c_void,
37 *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 std::ffi::c_int,
52 *const std::ffi::c_void,
53 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}