1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
use crate::nr::SyscallNo; extern "C" { fn internal_syscall0(nr: i64) -> i64; fn internal_syscall1(nr: i64, arg1: u64) -> i64; fn internal_syscall2(nr: i64, arg1: u64, arg2: u64) -> i64; fn internal_syscall3(nr: i64, arg1: u64, arg2: u64, arg3: u64) -> i64; fn internal_syscall4( nr: i64, arg1: u64, arg2: u64, arg3: u64, arg4: u64, ) -> i64; fn internal_syscall5( nr: i64, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64, ) -> i64; fn internal_syscall6( nr: i64, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64, arg6: u64, ) -> i64; } #[inline(always)] pub(crate) fn syscall_ret(ret: i64) -> Result<i64, i64> { if ret as u64 >= -4096i64 as u64 { Err(-ret) } else { Ok(ret) } } #[inline(always)] #[doc(hidden)] pub unsafe fn syscall0(nr: SyscallNo) -> Result<i64, i64> { syscall_ret(internal_syscall0(nr as i64)) } #[inline(always)] #[doc(hidden)] pub unsafe fn syscall1(nr: SyscallNo, a1: u64) -> Result<i64, i64> { syscall_ret(internal_syscall1(nr as i64, a1)) } #[inline(always)] #[doc(hidden)] pub unsafe fn syscall2(nr: SyscallNo, a1: u64, a2: u64) -> Result<i64, i64> { syscall_ret(internal_syscall2(nr as i64, a1, a2)) } #[inline(always)] #[doc(hidden)] pub unsafe fn syscall3( nr: SyscallNo, a1: u64, a2: u64, a3: u64, ) -> Result<i64, i64> { syscall_ret(internal_syscall3(nr as i64, a1, a2, a3)) } #[inline(always)] #[doc(hidden)] pub unsafe fn syscall4( nr: SyscallNo, a1: u64, a2: u64, a3: u64, a4: u64, ) -> Result<i64, i64> { syscall_ret(internal_syscall4(nr as i64, a1, a2, a3, a4)) } #[inline(always)] #[doc(hidden)] pub unsafe fn syscall5( nr: SyscallNo, a1: u64, a2: u64, a3: u64, a4: u64, a5: u64, ) -> Result<i64, i64> { syscall_ret(internal_syscall5(nr as i64, a1, a2, a3, a4, a5)) } #[inline(always)] #[doc(hidden)] pub unsafe fn syscall6( nr: SyscallNo, a1: u64, a2: u64, a3: u64, a4: u64, a5: u64, a6: u64, ) -> Result<i64, i64> { syscall_ret(internal_syscall6(nr as i64, a1, a2, a3, a4, a5, a6)) }