(uctx: &mut UserContext)
| 20 | }; |
| 21 | |
| 22 | pub fn handle_syscall(uctx: &mut UserContext) { |
| 23 | let Some(sysno) = Sysno::new(uctx.sysno()) else { |
| 24 | warn!("Invalid syscall number: {}", uctx.sysno()); |
| 25 | uctx.set_retval(-LinuxError::ENOSYS.code() as _); |
| 26 | return; |
| 27 | }; |
| 28 | |
| 29 | trace!("Syscall {sysno:?}"); |
| 30 | |
| 31 | let result = match sysno { |
| 32 | // fs ctl |
| 33 | Sysno::ioctl => sys_ioctl(uctx.arg0() as _, uctx.arg1() as _, uctx.arg2() as _), |
| 34 | Sysno::chdir => sys_chdir(uctx.arg0() as _), |
| 35 | Sysno::fchdir => sys_fchdir(uctx.arg0() as _), |
| 36 | Sysno::chroot => sys_chroot(uctx.arg0() as _), |
| 37 | #[cfg(target_arch = "x86_64")] |
| 38 | Sysno::mkdir => sys_mkdir(uctx.arg0() as _, uctx.arg1() as _), |
| 39 | Sysno::mkdirat => sys_mkdirat(uctx.arg0() as _, uctx.arg1() as _, uctx.arg2() as _), |
| 40 | Sysno::getdents64 => sys_getdents64(uctx.arg0() as _, uctx.arg1() as _, uctx.arg2() as _), |
| 41 | #[cfg(target_arch = "x86_64")] |
| 42 | Sysno::link => sys_link(uctx.arg0() as _, uctx.arg1() as _), |
| 43 | Sysno::linkat => sys_linkat( |
| 44 | uctx.arg0() as _, |
| 45 | uctx.arg1() as _, |
| 46 | uctx.arg2() as _, |
| 47 | uctx.arg3() as _, |
| 48 | uctx.arg4() as _, |
| 49 | ), |
| 50 | #[cfg(target_arch = "x86_64")] |
| 51 | Sysno::rmdir => sys_rmdir(uctx.arg0() as _), |
| 52 | #[cfg(target_arch = "x86_64")] |
| 53 | Sysno::unlink => sys_unlink(uctx.arg0() as _), |
| 54 | Sysno::unlinkat => sys_unlinkat(uctx.arg0() as _, uctx.arg1() as _, uctx.arg2() as _), |
| 55 | Sysno::getcwd => sys_getcwd(uctx.arg0() as _, uctx.arg1() as _), |
| 56 | #[cfg(target_arch = "x86_64")] |
| 57 | Sysno::symlink => sys_symlink(uctx.arg0() as _, uctx.arg1() as _), |
| 58 | Sysno::symlinkat => sys_symlinkat(uctx.arg0() as _, uctx.arg1() as _, uctx.arg2() as _), |
| 59 | #[cfg(target_arch = "x86_64")] |
| 60 | Sysno::rename => sys_rename(uctx.arg0() as _, uctx.arg1() as _), |
| 61 | Sysno::renameat => sys_renameat( |
| 62 | uctx.arg0() as _, |
| 63 | uctx.arg1() as _, |
| 64 | uctx.arg2() as _, |
| 65 | uctx.arg3() as _, |
| 66 | ), |
| 67 | Sysno::renameat2 => sys_renameat2( |
| 68 | uctx.arg0() as _, |
| 69 | uctx.arg1() as _, |
| 70 | uctx.arg2() as _, |
| 71 | uctx.arg3() as _, |
| 72 | uctx.arg4() as _, |
| 73 | ), |
| 74 | Sysno::sync => sys_sync(), |
| 75 | Sysno::syncfs => sys_syncfs(uctx.arg0() as _), |
| 76 | |
| 77 | // file ops |
| 78 | #[cfg(target_arch = "x86_64")] |
| 79 | Sysno::chown => sys_chown(uctx.arg0() as _, uctx.arg1() as _, uctx.arg2() as _), |
no test coverage detected