nixvm 0.0.0

A portable VM-style sandbox that runs a real Linux userland by emulating Linux syscalls directly (no guest kernel, no device emulation).
Documentation
//! x86-64 guest syscall table.
//!
//! On x86-64 the syscall number is in `rax`, args in `rdi, rsi, rdx, r10, r8,
//! r9`, return in `rax`.

use super::Sysno;

/// Map a raw x86-64 syscall number to the normalized [`Sysno`].
#[must_use]
#[allow(clippy::too_many_lines)] // one arm per syscall number; a flat table is clearest.
pub fn decode(nr: u64) -> Sysno {
    match nr {
        0 => Sysno::Read,
        1 => Sysno::Write,
        257 => Sysno::Openat,
        3 => Sysno::Close,
        12 => Sysno::Brk,
        9 => Sysno::Mmap,
        11 => Sysno::Munmap,
        10 => Sysno::Mprotect,
        25 => Sysno::Mremap,
        28 => Sysno::Madvise,
        149 => Sysno::Mlock,
        150 => Sysno::Munlock,
        151 => Sysno::Mlockall,
        152 => Sysno::Munlockall,
        325 => Sysno::Mlock2,
        26 => Sysno::Msync,
        27 => Sysno::Mincore,
        231 => Sysno::ExitGroup,
        60 => Sysno::Exit,
        218 => Sysno::SetTidAddress,
        16 => Sysno::Ioctl,
        20 => Sysno::Writev,
        63 => Sysno::Uname,
        39 => Sysno::Getpid,
        110 => Sysno::Getppid,
        186 => Sysno::Gettid,
        102 => Sysno::Getuid,
        107 => Sysno::Geteuid,
        104 => Sysno::Getgid,
        108 => Sysno::Getegid,
        228 => Sysno::ClockGettime,
        96 => Sysno::Gettimeofday,
        229 => Sysno::ClockGetres,
        230 => Sysno::ClockNanosleep,
        35 => Sysno::Nanosleep,
        227 => Sysno::ClockSettime,
        164 => Sysno::Settimeofday,
        159 => Sysno::Adjtimex,
        305 => Sysno::ClockAdjtime,
        201 => Sysno::Time,
        8 => Sysno::Lseek,
        5 => Sysno::Fstat,
        262 => Sysno::Newfstatat,
        217 => Sysno::Getdents64,
        79 => Sysno::Getcwd,
        80 => Sysno::Chdir,
        318 => Sysno::Getrandom,
        13 => Sysno::RtSigaction,
        14 => Sysno::RtSigprocmask,
        15 => Sysno::RtSigreturn,
        127 => Sysno::RtSigpending,
        128 => Sysno::RtSigtimedwait,
        130 => Sysno::RtSigsuspend,
        131 => Sysno::Sigaltstack,
        62 => Sysno::Kill,
        200 => Sysno::Tkill,
        234 => Sysno::Tgkill,
        202 => Sysno::Futex,
        72 => Sysno::Fcntl,
        293 => Sysno::Pipe2,
        32 => Sysno::Dup,
        33 => Sysno::Dup2,
        292 => Sysno::Dup3,
        56 => Sysno::Clone,
        59 => Sysno::Execve,
        61 => Sysno::Wait4,
        273 => Sysno::SetRobustList,
        137 => Sysno::Statfs,
        138 => Sysno::Fstatfs,
        267 => Sysno::Readlinkat,
        266 => Sysno::Symlinkat,
        258 => Sysno::Mkdirat,
        263 => Sysno::Unlinkat,
        264 => Sysno::Renameat,
        316 => Sysno::Renameat2,
        269 => Sysno::Faccessat,
        439 => Sysno::Faccessat2,
        21 => Sysno::Access,
        268 => Sysno::Fchmodat,
        91 => Sysno::Fchmod,
        260 => Sysno::Fchownat,
        93 => Sysno::Fchown,
        280 => Sysno::Utimensat,
        95 => Sysno::Umask,
        191 => Sysno::Getxattr,
        192 => Sysno::Lgetxattr,
        193 => Sysno::Fgetxattr,
        41 => Sysno::Socket,
        42 => Sysno::Connect,
        288 => Sysno::Accept4,
        44 => Sysno::Sendto,
        45 => Sysno::Recvfrom,
        48 => Sysno::Shutdown,
        49 => Sysno::Bind,
        50 => Sysno::Listen,
        51 => Sysno::Getsockname,
        52 => Sysno::Getpeername,
        53 => Sysno::Socketpair,
        54 => Sysno::Setsockopt,
        55 => Sysno::Getsockopt,
        24 => Sysno::SchedYield,
        204 => Sysno::SchedGetaffinity,
        203 => Sysno::SchedSetaffinity,
        145 => Sysno::SchedGetscheduler,
        144 => Sysno::SchedSetscheduler,
        143 => Sysno::SchedGetparam,
        146 => Sysno::SchedGetPriorityMax,
        147 => Sysno::SchedGetPriorityMin,
        98 => Sysno::Getrusage,
        99 => Sysno::Sysinfo,
        302 => Sysno::Prlimit64,
        97 => Sysno::Getrlimit,
        160 => Sysno::Setrlimit,
        100 => Sysno::Times,
        140 => Sysno::Getpriority,
        141 => Sysno::Setpriority,
        309 => Sysno::Getcpu,
        157 => Sysno::Prctl,
        135 => Sysno::Personality,
        170 => Sysno::Sethostname,
        171 => Sysno::Setdomainname,
        125 => Sysno::Capget,
        126 => Sysno::Capset,
        324 => Sysno::Membarrier,
        7 => Sysno::Poll,
        271 => Sysno::Ppoll,
        23 => Sysno::Select,
        270 => Sysno::Pselect6,
        213 => Sysno::EpollCreate,
        291 => Sysno::EpollCreate1,
        233 => Sysno::EpollCtl,
        232 => Sysno::EpollWait,
        281 => Sysno::EpollPwait,
        284 => Sysno::Eventfd,
        290 => Sysno::Eventfd2,
        283 => Sysno::TimerfdCreate,
        286 => Sysno::TimerfdSettime,
        287 => Sysno::TimerfdGettime,
        441 => Sysno::EpollPwait2,
        // x86-64-only: sets FS/GS base for TLS. The kernel may not implement
        // it yet; unhandled Sysno variants fall through to the
        // unsupported-syscall ledger, which is fine for this harness.
        158 => Sysno::ArchPrctl,
        other => Sysno::Unknown(other),
    }
}