diff --git a/example-user/src/main.rs b/example-user/src/main.rs index 145f0af..e13e9fd 100644 --- a/example-user/src/main.rs +++ b/example-user/src/main.rs @@ -3,15 +3,19 @@ use core::ffi::c_char; +use libuwuc::println; + extern crate libuwuc; #[panic_handler] #[cfg(not(test))] fn handler(_arg: &core::panic::PanicInfo) -> ! { - loop {} + libuwuc::io::println!("panic!"); + libuwuc::start::exit(1); } #[no_mangle] extern "C" fn main(_argc: i32, _argv: *const *const c_char) -> i32 { + println!("Hello, world!"); 0 } diff --git a/src/basic_mem.rs b/src/basic_mem.rs new file mode 100644 index 0000000..3e73d2a --- /dev/null +++ b/src/basic_mem.rs @@ -0,0 +1,8 @@ +#[no_mangle] +pub(crate) unsafe extern "C" fn memset(ptr: *mut u8, constant: u8, len: usize) { + for i in 0..len { + unsafe { + *ptr.add(i) = constant; + } + } +} diff --git a/src/io/mod.rs b/src/io/mod.rs new file mode 100644 index 0000000..4b89862 --- /dev/null +++ b/src/io/mod.rs @@ -0,0 +1,35 @@ +use crate::sys::syscall; + +pub const STDIN: i32 = 0; +pub const STDOUT: i32 = 1; +pub const STDERR: i32 = 2; + +#[doc(hidden)] +pub struct Printer; + +impl core::fmt::Write for Printer { + fn write_str(&mut self, mut s: &str) -> core::fmt::Result { + unsafe { + while s.len() > 0 { + let result = + syscall::syscall!(syscall::SYS_WRITE, STDIN, s.as_ptr(), s.len()) as i64; + if result < 0 { + return Err(core::fmt::Error); + } + s = &s[(result as usize)..]; + } + } + Ok(()) + } +} + +#[macro_export] +macro_rules! println { + ($($tt:tt)*) => { + { + use ::core::fmt::Write; + ::core::writeln!($crate::io::Printer, $($tt)*).unwrap(); + } + }; +} +pub use println; diff --git a/src/lib.rs b/src/lib.rs index 04b717c..2390d0a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,12 @@ #![no_std] #![warn(unreachable_pub)] +mod basic_mem; +pub mod io; +pub mod start; +mod stubs; mod sys; + +pub mod syscall { + pub use crate::sys::syscall::*; +} diff --git a/src/start.rs b/src/start.rs new file mode 100644 index 0000000..a5ef808 --- /dev/null +++ b/src/start.rs @@ -0,0 +1,24 @@ +use core::ffi::{c_char, c_int}; + +/// The entrypoint of the program. +/// This is called by a bit of assembly handling architecture-specific _start. +pub(crate) unsafe extern "C" fn start( + argc: i32, + argv: *const *const c_char, + _envp: *const *const c_char, +) -> ! { + extern "C" { + fn main(argc: c_int, argv: *const *const c_char) -> c_int; + } + + let result = main(argc, argv); + + exit(result as u64); +} + +pub fn exit(code: u64) -> ! { + unsafe { + crate::sys::syscall::syscall!(crate::sys::syscall::SYS_EXIT, code); + core::hint::unreachable_unchecked() + } +} diff --git a/src/stubs.rs b/src/stubs.rs new file mode 100644 index 0000000..bb43812 --- /dev/null +++ b/src/stubs.rs @@ -0,0 +1,7 @@ +// libcore seems to require this symbol, even though it's unused. +#[no_mangle] +fn rust_eh_personality() { + unsafe { + crate::sys::helpers::trap!(); + } +} diff --git a/src/sys/x86_64/helpers.rs b/src/sys/x86_64/helpers.rs new file mode 100644 index 0000000..0ab2c9d --- /dev/null +++ b/src/sys/x86_64/helpers.rs @@ -0,0 +1,6 @@ +macro_rules! trap { + () => { + ::core::arch::asm!("ud2"); + }; +} +pub(crate) use trap; \ No newline at end of file diff --git a/src/sys/x86_64/mod.rs b/src/sys/x86_64/mod.rs index 9b1c790..4111f95 100644 --- a/src/sys/x86_64/mod.rs +++ b/src/sys/x86_64/mod.rs @@ -1 +1,3 @@ -pub(crate) mod start; \ No newline at end of file +pub(crate) mod helpers; +pub(crate) mod start; +pub(crate) mod syscall; diff --git a/src/sys/x86_64/start.rs b/src/sys/x86_64/start.rs index adab5ac..7c1ba43 100644 --- a/src/sys/x86_64/start.rs +++ b/src/sys/x86_64/start.rs @@ -1,8 +1,25 @@ - core::arch::global_asm!( ".global _start", "_start:", - "mov rdi, 42", - "mov rax, 60", - "syscall" + // Hello, World! + // We have been started. All of this assembly sucks and we want into rustland as quickly as possible. + // Have a bit of fun and then, run away to libuwuc::start::start. + // First, mark the top-most stack frame as 0 to prevent sadness for frame-pointer based unwinding. + "mov rbp, 0", + // We're off to a good start already. + // Pass the variables to the start function arguments. + "mov rdi, [rsp]", // &argc = rsp + "mov rsi, [rsp+8]", // &argv = rsp+8 + + "mov rdx, rdi", // &envp = rsp+8*argc+8 + "mov rax, 8", + "mul rdx", + "add rdx, 8", + "add rdx, rsp", + "mov rdx, [rdx]", // &envp = rsp+8*argc+8 + + // The stack will be 16-byte aligned at process entry already. + // So we're good to go! + "call {start}", + start = sym crate::start::start ); diff --git a/src/sys/x86_64/syscall/generate.py b/src/sys/x86_64/syscall/generate.py new file mode 100644 index 0000000..7ec4686 --- /dev/null +++ b/src/sys/x86_64/syscall/generate.py @@ -0,0 +1,8 @@ +# curl -L https://filippo.io/linux-syscall-table/TABELLA_64.json > table.json +import json +with open ("table.json") as f: + data = f.read() +data=json.loads(data) +for entry in data: + value = data[entry] + print(f"pub const SYS_{value[1].upper()}: i64 = {value[0]};") \ No newline at end of file diff --git a/src/sys/x86_64/syscall/mod.rs b/src/sys/x86_64/syscall/mod.rs new file mode 100644 index 0000000..c9f53fc --- /dev/null +++ b/src/sys/x86_64/syscall/mod.rs @@ -0,0 +1,53 @@ +// Useful reference: https://filippo.io/linux-syscall-table/ + +#[allow(non_upper_case_globals)] +mod values; +pub use values::*; + +#[macro_export] +macro_rules! syscall { + ($number:expr) => {{ + let out: u64; + ::core::arch::asm!( + "syscall", + in("rdi") $number, + lateout("rax") out, + ); + out + }}; + ($number:expr, $arg1:expr) => {{ + let out: u64; + ::core::arch::asm!( + "syscall", + in("rax") $number, + in("rdi") $arg1, + lateout("rax") out, + ); + out + }}; + ($number:expr, $arg1:expr, $arg2:expr) => {{ + let out: u64; + ::core::arch::asm!( + "syscall", + in("rax") $number, + in("rdi") $arg1, + in("rsi") $arg2, + lateout("rax") out, + ); + out + }}; + ($number:expr, $arg1:expr, $arg2:expr, $arg3:expr) => {{ + let out: u64; + ::core::arch::asm!( + "syscall", + in("rax") $number, + in("rdi") $arg1, + in("rsi") $arg2, + in("rdx") $arg3, + lateout("rax") out, + ); + out + }}; +} + +pub use syscall; \ No newline at end of file diff --git a/src/sys/x86_64/syscall/values.rs b/src/sys/x86_64/syscall/values.rs new file mode 100644 index 0000000..78e0ebf --- /dev/null +++ b/src/sys/x86_64/syscall/values.rs @@ -0,0 +1,314 @@ +pub const SYS_READ: i64 = 0; +pub const SYS_WRITE: i64 = 1; +pub const SYS_OPEN: i64 = 2; +pub const SYS_CLOSE: i64 = 3; +pub const SYS_STAT: i64 = 4; +pub const SYS_FSTAT: i64 = 5; +pub const SYS_LSTAT: i64 = 6; +pub const SYS_POLL: i64 = 7; +pub const SYS_LSEEK: i64 = 8; +pub const SYS_MMAP: i64 = 9; +pub const SYS_MPROTECT: i64 = 10; +pub const SYS_MUNMAP: i64 = 11; +pub const SYS_BRK: i64 = 12; +pub const SYS_RT_SIGACTION: i64 = 13; +pub const SYS_RT_SIGPROCMASK: i64 = 14; +pub const SYS_RT_SIGRETURN: i64 = 15; +pub const SYS_IOCTL: i64 = 16; +pub const SYS_PREAD64: i64 = 17; +pub const SYS_PWRITE64: i64 = 18; +pub const SYS_READV: i64 = 19; +pub const SYS_WRITEV: i64 = 20; +pub const SYS_ACCESS: i64 = 21; +pub const SYS_PIPE: i64 = 22; +pub const SYS_SELECT: i64 = 23; +pub const SYS_SCHED_YIELD: i64 = 24; +pub const SYS_MREMAP: i64 = 25; +pub const SYS_MSYNC: i64 = 26; +pub const SYS_MINCORE: i64 = 27; +pub const SYS_MADVISE: i64 = 28; +pub const SYS_SHMGET: i64 = 29; +pub const SYS_SHMAT: i64 = 30; +pub const SYS_SHMCTL: i64 = 31; +pub const SYS_DUP: i64 = 32; +pub const SYS_DUP2: i64 = 33; +pub const SYS_PAUSE: i64 = 34; +pub const SYS_NANOSLEEP: i64 = 35; +pub const SYS_GETITIMER: i64 = 36; +pub const SYS_ALARM: i64 = 37; +pub const SYS_SETITIMER: i64 = 38; +pub const SYS_GETPID: i64 = 39; +pub const SYS_SENDFILE: i64 = 40; +pub const SYS_SOCKET: i64 = 41; +pub const SYS_CONNECT: i64 = 42; +pub const SYS_ACCEPT: i64 = 43; +pub const SYS_SENDTO: i64 = 44; +pub const SYS_RECVFROM: i64 = 45; +pub const SYS_SENDMSG: i64 = 46; +pub const SYS_RECVMSG: i64 = 47; +pub const SYS_SHUTDOWN: i64 = 48; +pub const SYS_BIND: i64 = 49; +pub const SYS_LISTEN: i64 = 50; +pub const SYS_GETSOCKNAME: i64 = 51; +pub const SYS_GETPEERNAME: i64 = 52; +pub const SYS_SOCKETPAIR: i64 = 53; +pub const SYS_SETSOCKOPT: i64 = 54; +pub const SYS_GETSOCKOPT: i64 = 55; +pub const SYS_CLONE: i64 = 56; +pub const SYS_FORK: i64 = 57; +pub const SYS_VFORK: i64 = 58; +pub const SYS_EXECVE: i64 = 59; +pub const SYS_EXIT: i64 = 60; +pub const SYS_WAIT4: i64 = 61; +pub const SYS_KILL: i64 = 62; +pub const SYS_UNAME: i64 = 63; +pub const SYS_SEMGET: i64 = 64; +pub const SYS_SEMOP: i64 = 65; +pub const SYS_SEMCTL: i64 = 66; +pub const SYS_SHMDT: i64 = 67; +pub const SYS_MSGGET: i64 = 68; +pub const SYS_MSGSND: i64 = 69; +pub const SYS_MSGRCV: i64 = 70; +pub const SYS_MSGCTL: i64 = 71; +pub const SYS_FCNTL: i64 = 72; +pub const SYS_FLOCK: i64 = 73; +pub const SYS_FSYNC: i64 = 74; +pub const SYS_FDATASYNC: i64 = 75; +pub const SYS_TRUNCATE: i64 = 76; +pub const SYS_FTRUNCATE: i64 = 77; +pub const SYS_GETDENTS: i64 = 78; +pub const SYS_GETCWD: i64 = 79; +pub const SYS_CHDIR: i64 = 80; +pub const SYS_FCHDIR: i64 = 81; +pub const SYS_RENAME: i64 = 82; +pub const SYS_MKDIR: i64 = 83; +pub const SYS_RMDIR: i64 = 84; +pub const SYS_CREAT: i64 = 85; +pub const SYS_LINK: i64 = 86; +pub const SYS_UNLINK: i64 = 87; +pub const SYS_SYMLINK: i64 = 88; +pub const SYS_READLINK: i64 = 89; +pub const SYS_CHMOD: i64 = 90; +pub const SYS_FCHMOD: i64 = 91; +pub const SYS_CHOWN: i64 = 92; +pub const SYS_FCHOWN: i64 = 93; +pub const SYS_LCHOWN: i64 = 94; +pub const SYS_UMASK: i64 = 95; +pub const SYS_GETTIMEOFDAY: i64 = 96; +pub const SYS_GETRLIMIT: i64 = 97; +pub const SYS_GETRUSAGE: i64 = 98; +pub const SYS_SYSINFO: i64 = 99; +pub const SYS_TIMES: i64 = 100; +pub const SYS_PTRACE: i64 = 101; +pub const SYS_GETUID: i64 = 102; +pub const SYS_SYSLOG: i64 = 103; +pub const SYS_GETGID: i64 = 104; +pub const SYS_SETUID: i64 = 105; +pub const SYS_SETGID: i64 = 106; +pub const SYS_GETEUID: i64 = 107; +pub const SYS_GETEGID: i64 = 108; +pub const SYS_SETPGID: i64 = 109; +pub const SYS_GETPPID: i64 = 110; +pub const SYS_GETPGRP: i64 = 111; +pub const SYS_SETSID: i64 = 112; +pub const SYS_SETREUID: i64 = 113; +pub const SYS_SETREGID: i64 = 114; +pub const SYS_GETGROUPS: i64 = 115; +pub const SYS_SETGROUPS: i64 = 116; +pub const SYS_SETRESUID: i64 = 117; +pub const SYS_GETRESUID: i64 = 118; +pub const SYS_SETRESGID: i64 = 119; +pub const SYS_GETRESGID: i64 = 120; +pub const SYS_GETPGID: i64 = 121; +pub const SYS_SETFSUID: i64 = 122; +pub const SYS_SETFSGID: i64 = 123; +pub const SYS_GETSID: i64 = 124; +pub const SYS_CAPGET: i64 = 125; +pub const SYS_CAPSET: i64 = 126; +pub const SYS_RT_SIGPENDING: i64 = 127; +pub const SYS_RT_SIGTIMEDWAIT: i64 = 128; +pub const SYS_RT_SIGQUEUEINFO: i64 = 129; +pub const SYS_RT_SIGSUSPEND: i64 = 130; +pub const SYS_SIGALTSTACK: i64 = 131; +pub const SYS_UTIME: i64 = 132; +pub const SYS_MKNOD: i64 = 133; +pub const SYS_USELIB: i64 = 134; +pub const SYS_PERSONALITY: i64 = 135; +pub const SYS_USTAT: i64 = 136; +pub const SYS_STATFS: i64 = 137; +pub const SYS_FSTATFS: i64 = 138; +pub const SYS_SYSFS: i64 = 139; +pub const SYS_GETPRIORITY: i64 = 140; +pub const SYS_SETPRIORITY: i64 = 141; +pub const SYS_SCHED_SETPARAM: i64 = 142; +pub const SYS_SCHED_GETPARAM: i64 = 143; +pub const SYS_SCHED_SETSCHEDULER: i64 = 144; +pub const SYS_SCHED_GETSCHEDULER: i64 = 145; +pub const SYS_SCHED_GET_PRIORITY_MAX: i64 = 146; +pub const SYS_SCHED_GET_PRIORITY_MIN: i64 = 147; +pub const SYS_SCHED_RR_GET_INTERVAL: i64 = 148; +pub const SYS_MLOCK: i64 = 149; +pub const SYS_MUNLOCK: i64 = 150; +pub const SYS_MLOCKALL: i64 = 151; +pub const SYS_MUNLOCKALL: i64 = 152; +pub const SYS_VHANGUP: i64 = 153; +pub const SYS_MODIFY_LDT: i64 = 154; +pub const SYS_PIVOT_ROOT: i64 = 155; +pub const SYS__SYSCTL: i64 = 156; +pub const SYS_PRCTL: i64 = 157; +pub const SYS_ARCH_PRCTL: i64 = 158; +pub const SYS_ADJTIMEX: i64 = 159; +pub const SYS_SETRLIMIT: i64 = 160; +pub const SYS_CHROOT: i64 = 161; +pub const SYS_SYNC: i64 = 162; +pub const SYS_ACCT: i64 = 163; +pub const SYS_SETTIMEOFDAY: i64 = 164; +pub const SYS_MOUNT: i64 = 165; +pub const SYS_UMOUNT2: i64 = 166; +pub const SYS_SWAPON: i64 = 167; +pub const SYS_SWAPOFF: i64 = 168; +pub const SYS_REBOOT: i64 = 169; +pub const SYS_SETHOSTNAME: i64 = 170; +pub const SYS_SETDOMAINNAME: i64 = 171; +pub const SYS_IOPL: i64 = 172; +pub const SYS_IOPERM: i64 = 173; +pub const SYS_CREATE_MODULE: i64 = 174; +pub const SYS_INIT_MODULE: i64 = 175; +pub const SYS_DELETE_MODULE: i64 = 176; +pub const SYS_GET_KERNEL_SYMS: i64 = 177; +pub const SYS_QUERY_MODULE: i64 = 178; +pub const SYS_QUOTACTL: i64 = 179; +pub const SYS_NFSSERVCTL: i64 = 180; +pub const SYS_GETPMSG: i64 = 181; +pub const SYS_PUTPMSG: i64 = 182; +pub const SYS_AFS_SYSCALL: i64 = 183; +pub const SYS_TUXCALL: i64 = 184; +pub const SYS_SECURITY: i64 = 185; +pub const SYS_GETTID: i64 = 186; +pub const SYS_READAHEAD: i64 = 187; +pub const SYS_SETXATTR: i64 = 188; +pub const SYS_LSETXATTR: i64 = 189; +pub const SYS_FSETXATTR: i64 = 190; +pub const SYS_GETXATTR: i64 = 191; +pub const SYS_LGETXATTR: i64 = 192; +pub const SYS_FGETXATTR: i64 = 193; +pub const SYS_LISTXATTR: i64 = 194; +pub const SYS_LLISTXATTR: i64 = 195; +pub const SYS_FLISTXATTR: i64 = 196; +pub const SYS_REMOVEXATTR: i64 = 197; +pub const SYS_LREMOVEXATTR: i64 = 198; +pub const SYS_FREMOVEXATTR: i64 = 199; +pub const SYS_TKILL: i64 = 200; +pub const SYS_TIME: i64 = 201; +pub const SYS_FUTEX: i64 = 202; +pub const SYS_SCHED_SETAFFINITY: i64 = 203; +pub const SYS_SCHED_GETAFFINITY: i64 = 204; +pub const SYS_SET_THREAD_AREA: i64 = 205; +pub const SYS_IO_SETUP: i64 = 206; +pub const SYS_IO_DESTROY: i64 = 207; +pub const SYS_IO_GETEVENTS: i64 = 208; +pub const SYS_IO_SUBMIT: i64 = 209; +pub const SYS_IO_CANCEL: i64 = 210; +pub const SYS_GET_THREAD_AREA: i64 = 211; +pub const SYS_LOOKUP_DCOOKIE: i64 = 212; +pub const SYS_EPOLL_CREATE: i64 = 213; +pub const SYS_EPOLL_CTL_OLD: i64 = 214; +pub const SYS_EPOLL_WAIT_OLD: i64 = 215; +pub const SYS_REMAP_FILE_PAGES: i64 = 216; +pub const SYS_GETDENTS64: i64 = 217; +pub const SYS_SET_TID_ADDRESS: i64 = 218; +pub const SYS_RESTART_SYSCALL: i64 = 219; +pub const SYS_SEMTIMEDOP: i64 = 220; +pub const SYS_FADVISE64: i64 = 221; +pub const SYS_TIMER_CREATE: i64 = 222; +pub const SYS_TIMER_SETTIME: i64 = 223; +pub const SYS_TIMER_GETTIME: i64 = 224; +pub const SYS_TIMER_GETOVERRUN: i64 = 225; +pub const SYS_TIMER_DELETE: i64 = 226; +pub const SYS_CLOCK_SETTIME: i64 = 227; +pub const SYS_CLOCK_GETTIME: i64 = 228; +pub const SYS_CLOCK_GETRES: i64 = 229; +pub const SYS_CLOCK_NANOSLEEP: i64 = 230; +pub const SYS_EXIT_GROUP: i64 = 231; +pub const SYS_EPOLL_WAIT: i64 = 232; +pub const SYS_EPOLL_CTL: i64 = 233; +pub const SYS_TGKILL: i64 = 234; +pub const SYS_UTIMES: i64 = 235; +pub const SYS_VSERVER: i64 = 236; +pub const SYS_MBIND: i64 = 237; +pub const SYS_SET_MEMPOLICY: i64 = 238; +pub const SYS_GET_MEMPOLICY: i64 = 239; +pub const SYS_MQ_OPEN: i64 = 240; +pub const SYS_MQ_UNLINK: i64 = 241; +pub const SYS_MQ_TIMEDSEND: i64 = 242; +pub const SYS_MQ_TIMEDRECEIVE: i64 = 243; +pub const SYS_MQ_NOTIFY: i64 = 244; +pub const SYS_MQ_GETSETATTR: i64 = 245; +pub const SYS_KEXEC_LOAD: i64 = 246; +pub const SYS_WAITID: i64 = 247; +pub const SYS_ADD_KEY: i64 = 248; +pub const SYS_REQUEST_KEY: i64 = 249; +pub const SYS_KEYCTL: i64 = 250; +pub const SYS_IOPRIO_SET: i64 = 251; +pub const SYS_IOPRIO_GET: i64 = 252; +pub const SYS_INOTIFY_INIT: i64 = 253; +pub const SYS_INOTIFY_ADD_WATCH: i64 = 254; +pub const SYS_INOTIFY_RM_WATCH: i64 = 255; +pub const SYS_MIGRATE_PAGES: i64 = 256; +pub const SYS_OPENAT: i64 = 257; +pub const SYS_MKDIRAT: i64 = 258; +pub const SYS_MKNODAT: i64 = 259; +pub const SYS_FCHOWNAT: i64 = 260; +pub const SYS_FUTIMESAT: i64 = 261; +pub const SYS_NEWFSTATAT: i64 = 262; +pub const SYS_UNLINKAT: i64 = 263; +pub const SYS_RENAMEAT: i64 = 264; +pub const SYS_LINKAT: i64 = 265; +pub const SYS_SYMLINKAT: i64 = 266; +pub const SYS_READLINKAT: i64 = 267; +pub const SYS_FCHMODAT: i64 = 268; +pub const SYS_FACCESSAT: i64 = 269; +pub const SYS_PSELECT6: i64 = 270; +pub const SYS_PPOLL: i64 = 271; +pub const SYS_UNSHARE: i64 = 272; +pub const SYS_SET_ROBUST_LIST: i64 = 273; +pub const SYS_GET_ROBUST_LIST: i64 = 274; +pub const SYS_SPLICE: i64 = 275; +pub const SYS_TEE: i64 = 276; +pub const SYS_SYNC_FILE_RANGE: i64 = 277; +pub const SYS_VMSPLICE: i64 = 278; +pub const SYS_MOVE_PAGES: i64 = 279; +pub const SYS_UTIMENSAT: i64 = 280; +pub const SYS_EPOLL_PWAIT: i64 = 281; +pub const SYS_SIGNALFD: i64 = 282; +pub const SYS_TIMERFD_CREATE: i64 = 283; +pub const SYS_EVENTFD: i64 = 284; +pub const SYS_FALLOCATE: i64 = 285; +pub const SYS_TIMERFD_SETTIME: i64 = 286; +pub const SYS_TIMERFD_GETTIME: i64 = 287; +pub const SYS_ACCEPT4: i64 = 288; +pub const SYS_SIGNALFD4: i64 = 289; +pub const SYS_EVENTFD2: i64 = 290; +pub const SYS_EPOLL_CREATE1: i64 = 291; +pub const SYS_DUP3: i64 = 292; +pub const SYS_PIPE2: i64 = 293; +pub const SYS_INOTIFY_INIT1: i64 = 294; +pub const SYS_PREADV: i64 = 295; +pub const SYS_PWRITEV: i64 = 296; +pub const SYS_RT_TGSIGQUEUEINFO: i64 = 297; +pub const SYS_PERF_EVENT_OPEN: i64 = 298; +pub const SYS_RECVMMSG: i64 = 299; +pub const SYS_FANOTIFY_INIT: i64 = 300; +pub const SYS_FANOTIFY_MARK: i64 = 301; +pub const SYS_PRLIMIT64: i64 = 302; +pub const SYS_NAME_TO_HANDLE_AT: i64 = 303; +pub const SYS_OPEN_BY_HANDLE_AT: i64 = 304; +pub const SYS_CLOCK_ADJTIME: i64 = 305; +pub const SYS_SYNCFS: i64 = 306; +pub const SYS_SENDMMSG: i64 = 307; +pub const SYS_SETNS: i64 = 308; +pub const SYS_GETCPU: i64 = 309; +pub const SYS_PROCESS_VM_READV: i64 = 310; +pub const SYS_PROCESS_VM_WRITEV: i64 = 311; +pub const SYS_KCMP: i64 = 312; +pub const SYS_FINIT_MODULE: i64 = 313;