ref: 2c911dc66fe609309ca666da961ca3e78c0379d0
parent: bf06a81847add78fee0693fe3db79f69c9ee2641
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Aug 6 00:27:52 EDT 2017
Add generated system calls.
--- a/lib/sys/sys+linux-x64.myr
+++ b/lib/sys/sys+linux-x64.myr
@@ -1,7 +1,15 @@
-use "systypes"
-
+/*
+ generated-ish source
+ stitched for linux arch:x64
+ edit with caution.
+ */
pkg sys =
- type scno = int64 /* syscall */
+ type size = int64 /* spans entire address space */
+ type usize = uint64 /* unsigned size */
+ type off = int64 /* file offsets */
+ type intptr = uint64 /* can hold any pointer losslessly */
+ type time = int64 /* milliseconds since epoch */
+ type scno = int64 /* syscall */
/* processes/threads */
type pid = int /* process id */
@@ -68,6 +76,29 @@
mask : sigset
;;
+ const Sipadsz = 128
+ type siginfo = struct
+ signo : int
+ errno : int
+ code : int
+
+ _pad : int[Sipadsz]
+ ;;
+
+ /* union { int, void* } */
+ type sigval = struct
+ _pad : void#
+ ;;
+
+ const Sigevmaxsz = 64
+ const Sigevpadsz = Sigevmaxsz / sizeof(int) - 4
+ type sigevent = struct
+ value : sigval
+ signo : int
+ notify : int
+ _pad : int[Sigevpadsz]
+ ;;
+
type timespec = struct
sec : uint64
nsec : uint64
@@ -84,22 +115,26 @@
_opaque : uint64[14] /* padding (darwin-specific data) */
;;
+ type sched_param = struct
+ priority : int
+ ;;
+
type statbuf = struct
- dev : uint64
- ino : uint64
- nlink : uint64
- mode : filemode
- uid : uint32
- gid : uint32
- __pad0 : uint32
- rdev : uint64
- size : uint64
- blksz : uint32
- blocks : uint64
- atime : timespec
- mtime : timespec
- ctime : timespec
- __pad1 : uint64[3]
+ dev : uint64
+ ino : uint64
+ nlink : uint64
+ mode : filemode
+ uid : uint32
+ gid : uint32
+ __pad0 : uint32
+ rdev : uint64
+ size : uint64
+ blksz : uint32
+ blocks : uint64
+ atime : timespec
+ mtime : timespec
+ ctime : timespec
+ __pad1 : uint64[3]
;;
type dirent64 = struct
@@ -138,7 +173,7 @@
scope : uint32
;;
- type sockaddr_un = struct
+ type sockaddr_un = struct
fam : sockfam
path : byte[108]
;;
@@ -165,6 +200,15 @@
len : uint64
;;
+ type semun = struct
+ __pad : void#
+ ;;
+
+ type msgbuf = struct
+ mtype : int64
+ buf : byte[...]
+ ;;
+
type msghdr = struct
name : sockaddr#
namelen : int32
@@ -175,6 +219,11 @@
flags : msgflags
;;
+ type mmsghdr = struct
+ hdr : msghdr
+ len : uint32
+ ;;
+
type cmsghdr = struct
len : uint64
level : sockproto
@@ -182,6 +231,17 @@
data : byte[...]
;;
+ type capuserheader = struct
+ version : uint32
+ pid : int
+ ;;
+
+ type capuserdata = struct
+ effective : uint32
+ permitted : uint32
+ inheritable : uint32
+ ;;
+
/* clone options */
const Clonesignal : cloneopt = 0xff
const Clonevm : cloneopt = 0x100
@@ -439,7 +499,254 @@
const Mfdcloexec : mfdflags = 0x01
const Mfdallowsealing : mfdflags = 0x02
- /* syscalls */
+ /* exported values: initialized by start code */
+ extern var __cenvp : byte##
+
+ type ulong = uint64
+ type sigstack = sigaltstack
+ type greg = int64
+ type gregset = greg[23]
+ type fpregset = _libc_fpstate#
+ type uintptr = uint64
+ type loff = int64
+ type fd_mask = int64
+ type key = int
+ type uid = uint
+ type gid = uint
+ type syscall_ulong = uint64
+ type shmatt = syscall_ulong
+ type msgqnum = syscall_ulong
+ type msglen = syscall_ulong
+ type rlim = uint64
+ type kernel_long = int64
+ type kernel_ulong = uint64
+ type u16 = uint16
+ type u32 = uint
+ type dev = uint64
+ type daddr = int
+ type ino = uint64
+ type fsword = int64
+ type fsblkcnt = uint64
+ type fsfilcnt = uint64
+ type clockid = int
+ type timer = void#
+
+ type sigaltstack = struct
+ sp : void#
+ flags : int
+ size : size
+
+ ;;
+
+ type _libc_fpxreg = struct
+ significand : uint16[4]
+ exponent : uint16
+ padding : uint16[3]
+
+ ;;
+
+ type _libc_xmmreg = struct
+ element : uint32[4]
+
+ ;;
+
+ type _libc_fpstate = struct
+ cwd : uint16
+ swd : uint16
+ ftw : uint16
+ fop : uint16
+ rip : uint64
+ rdp : uint64
+ mxcsr : uint32
+ mxcr_mask : uint32
+ _st : _libc_fpxreg[8]
+ _xmm : _libc_xmmreg[16]
+ padding : uint32[24]
+
+ ;;
+
+ type mcontext = struct
+ gregs : gregset
+ fpregs : fpregset
+ __reserved1 : uint64[8]
+
+ ;;
+
+ type ucontext = struct
+ uc_flags : uint64
+ uc_link : ucontext#
+ uc_stack : sigstack
+ uc_mcontext : mcontext
+ uc_sigmask : sigset
+ __fpregs_mem : _libc_fpstate
+
+ ;;
+
+ type fdset = struct
+ bits : fd_mask[16]
+
+ ;;
+
+ type ipc_perm = struct
+ __key : key
+ uid : uid
+ gid : gid
+ cuid : uid
+ cgid : gid
+ mode : uint16
+ __pad1 : uint16
+ __seq : uint16
+ __pad2 : uint16
+ __glibc_reserved1 : syscall_ulong
+ __glibc_reserved2 : syscall_ulong
+
+ ;;
+
+ type shmid_ds = struct
+ shm_perm : ipc_perm
+ shm_segsz : size
+ shm_atime : time
+ shm_dtime : time
+ shm_ctime : time
+ shm_cpid : pid
+ shm_lpid : pid
+ shm_nattch : shmatt
+ __glibc_reserved4 : syscall_ulong
+ __glibc_reserved5 : syscall_ulong
+
+ ;;
+
+ type itimerval = struct
+ interval : timeval
+ value : timeval
+
+ ;;
+
+ type sembuf = struct
+ num : uint16
+ op : int16
+ flg : int16
+
+ ;;
+
+ type msqid_ds = struct
+ msg_perm : ipc_perm
+ msg_stime : time
+ msg_rtime : time
+ msg_ctime : time
+ __msg_cbytes : syscall_ulong
+ msg_qnum : msgqnum
+ msg_qbytes : msglen
+ msg_lspid : pid
+ msg_lrpid : pid
+ __glibc_reserved4 : syscall_ulong
+ __glibc_reserved5 : syscall_ulong
+
+ ;;
+
+ type timezone = struct
+ minuteswest : int
+ dsttime : int
+
+ ;;
+
+ type rlimit = struct
+ cur : rlim
+ max : rlim
+
+ ;;
+
+ type sysinfo = struct
+ uptime : kernel_long
+ loads : kernel_ulong[3]
+ totalram : kernel_ulong
+ freeram : kernel_ulong
+ sharedram : kernel_ulong
+ bufferram : kernel_ulong
+ totalswap : kernel_ulong
+ freeswap : kernel_ulong
+ procs : u16
+ pad : u16
+ totalhigh : kernel_ulong
+ freehigh : kernel_ulong
+ mem_unit : u32
+ _f : byte[0]
+
+ ;;
+
+ type tms = struct
+ utime : clock
+ stime : clock
+ cutime : clock
+ cstime : clock
+
+ ;;
+
+ type utimbuf = struct
+ actime : time
+ modtime : time
+
+ ;;
+
+ type ustat = struct
+ tfree : daddr
+ tinode : ino
+ fname : byte[6]
+ fpack : byte[6]
+
+ ;;
+
+ type fsid = struct
+ __val : int[2]
+
+ ;;
+
+ type statfs = struct
+ kind : fsword
+ bsize : fsword
+ blocks : fsblkcnt
+ bfree : fsblkcnt
+ bavail : fsblkcnt
+ files : fsfilcnt
+ ffree : fsfilcnt
+ fsid : fsid
+ namelen : fsword
+ frsize : fsword
+ flags : fsword
+ spare : fsword[4]
+
+ ;;
+
+ type sysctl_args = struct
+ name : int#
+ nlen : int
+ oldval : void#
+ oldlenp : size#
+ newval : void#
+ newlen : size
+ __unused : uint64[4]
+
+ ;;
+
+ type itimerspec = struct
+ interval : timespec
+ value : timespec
+
+ ;;
+
+ type robust_list = struct
+ next : robust_list#
+
+ ;;
+
+ type robust_list_head = struct
+ list : robust_list
+ futex_offset : int64
+ list_op_pending : robust_list#
+
+ ;;
+
+
const Sysread : scno = 0
const Syswrite : scno = 1
const Sysopen : scno = 2
@@ -457,8 +764,8 @@
const Sysrt_sigprocmask : scno = 14
const Sysrt_sigreturn : scno = 15
const Sysioctl : scno = 16
- const Syspread64 : scno = 17
- const Syspwrite64 : scno = 18
+ const Syspread : scno = 17
+ const Syspwrite : scno = 18
const Sysreadv : scno = 19
const Syswritev : scno = 20
const Sysaccess : scno = 21
@@ -574,7 +881,6 @@
const Syssigaltstack : scno = 131
const Sysutime : scno = 132
const Sysmknod : scno = 133
- const Sysuselib : scno = 134
const Syspersonality : scno = 135
const Sysustat : scno = 136
const Sysstatfs : scno = 137
@@ -594,9 +900,8 @@
const Sysmlockall : scno = 151
const Sysmunlockall : scno = 152
const Sysvhangup : scno = 153
- const Sysmodify_ldt : scno = 154
const Syspivot_root : scno = 155
- const Sys_sysctl : scno = 156
+ const Syssysctl : scno = 156
const Sysprctl : scno = 157
const Sysarch_prctl : scno = 158
const Sysadjtimex : scno = 159
@@ -606,7 +911,7 @@
const Sysacct : scno = 163
const Syssettimeofday : scno = 164
const Sysmount : scno = 165
- const Sysumount2 : scno = 166
+ const Sysumount : scno = 166
const Sysswapon : scno = 167
const Sysswapoff : scno = 168
const Sysreboot : scno = 169
@@ -613,7 +918,6 @@
const Syssethostname : scno = 170
const Syssetdomainname : scno = 171
const Sysiopl : scno = 172
- const Sysioperm : scno = 173
const Syscreate_module : scno = 174
const Sysinit_module : scno = 175
const Sysdelete_module : scno = 176
@@ -627,7 +931,6 @@
const Systuxcall : scno = 184
const Syssecurity : scno = 185
const Sysgettid : scno = 186
- const Sysreadahead : scno = 187
const Syssetxattr : scno = 188
const Syslsetxattr : scno = 189
const Sysfsetxattr : scno = 190
@@ -646,12 +949,6 @@
const Syssched_setaffinity : scno = 203
const Syssched_getaffinity : scno = 204
const Sysset_thread_area : scno = 205
- const Sysio_setup : scno = 206
- const Sysio_destroy : scno = 207
- const Sysio_getevents : scno = 208
- const Sysio_submit : scno = 209
- const Sysio_cancel : scno = 210
- const Sysget_thread_area : scno = 211
const Syslookup_dcookie : scno = 212
const Sysepoll_create : scno = 213
const Sysepoll_ctl_old : scno = 214
@@ -659,7 +956,6 @@
const Sysremap_file_pages : scno = 216
const Sysgetdents64 : scno = 217
const Sysset_tid_address : scno = 218
- const Sysrestart_syscall : scno = 219
const Syssemtimedop : scno = 220
const Sysfadvise64 : scno = 221
const Systimer_create : scno = 222
@@ -676,7 +972,6 @@
const Sysepoll_ctl : scno = 233
const Systgkill : scno = 234
const Sysutimes : scno = 235
- const Sysvserver : scno = 236
const Sysmbind : scno = 237
const Sysset_mempolicy : scno = 238
const Sysget_mempolicy : scno = 239
@@ -702,7 +997,7 @@
const Sysmknodat : scno = 259
const Sysfchownat : scno = 260
const Sysfutimesat : scno = 261
- const Sysnewfstatat : scno = 262
+ const Sysfstatat : scno = 262
const Sysunlinkat : scno = 263
const Sysrenameat : scno = 264
const Syslinkat : scno = 265
@@ -723,7 +1018,7 @@
const Sysutimensat : scno = 280
const Sysepoll_pwait : scno = 281
const Syssignalfd : scno = 282
- const Systimerfd_create : scno = 283
+ const Systimerfd : scno = 283
const Syseventfd : scno = 284
const Sysfallocate : scno = 285
const Systimerfd_settime : scno = 286
@@ -737,7 +1032,7 @@
const Sysinotify_init1 : scno = 294
const Syspreadv : scno = 295
const Syspwritev : scno = 296
- const Sysrt_tgsigqueueinfo : scno = 297
+ const Sysrt_tsigqueueinfo : scno = 297
const Sysperf_event_open : scno = 298
const Sysrecvmmsg : scno = 299
const Sysfanotify_init : scno = 300
@@ -749,58 +1044,33 @@
const Syssyncfs : scno = 306
const Syssendmmsg : scno = 307
const Syssetns : scno = 308
- const Sysgetcpu : scno = 309
- const Sysprocess_vm_readv : scno = 310
- const Sysprocess_vm_writev : scno = 311
- const Syskcmp : scno = 312
- const Sysfinit_module : scno = 313
- const Syssched_setattr : scno = 314
- const Syssched_getattr : scno = 315
- const Sysrenameat2 : scno = 316
- const Sysseccomp : scno = 317
- const Sysgetrandom : scno = 318
- const Sysmemfd_create : scno = 319
- const Syskexec_file_load : scno = 320
- const Sysbpf : scno = 321
- const Sysexecveat : scno = 322
- const Sysuserfaultfd : scno = 323
- const Sysmembarrier : scno = 324
- const Sysmlock2 : scno = 325
- const Syscopy_file_range : scno = 326
- const Syspreadv2 : scno = 327
- const Syspwritev2 : scno = 328
- const Syspkey_mprotect : scno = 329
- const Syspkey_alloc : scno = 330
- const Syspkey_free : scno = 331
+ const Sysprocess_vm_readv : scno = 309
+ const Sysprocess_vm_writev : scno = 310
+ const Syskcmp : scno = 311
+ const Sysfinit_module : scno = 312
- /* getting to the os */
+ /* start manual overrides { */
extern const syscall : (sc:scno, args:... -> int64)
extern const sigreturn : (-> void)
-
- /* process management */
const exit : (status:int -> void)
const exit_group : (status:int -> void)
const getpid : ( -> pid)
const kill : (pid:pid, sig:int64 -> int64)
const fork : (-> pid)
- /* FIXME: where the fuck is 'struct pt_reg' defined?? */
const clone : (flags : cloneopt, stk : byte#, ptid : pid#, ctid : pid#, ptreg : byte# -> pid)
extern const fnclone : ( flags : cloneopt, \
- stk : byte#, \
- ptid : pid#, \
- tls : byte#, \
- ctid : pid#, \
- ptreg : byte#, \
- fn : void# \ /* we need a raw pointer */
- -> pid)
+ stk : byte#, \
+ ptid : pid#, \
+ tls : byte#, \
+ ctid : pid#, \
+ ptreg : byte#, \
+ fn : void# /* we need a raw pointer */ \
+ -> pid)
const wait4 : (pid:pid, loc:int32#, opt : int64, usage:rusage# -> int64)
const waitpid : (pid:pid, loc:int32#, opt : int64 -> int64)
const execv : (cmd : byte[:], args : byte[:][:] -> int64)
const execve : (cmd : byte[:], args : byte[:][:], env : byte[:][:] -> int64)
- /* wrappers to extract wait status */
const waitstatus : (st : int32 -> waitstatus)
-
- /* file manipulation */
const open : (path:byte[:], opts:fdopt -> fd)
const openmode : (path:byte[:], opts:fdopt, mode:int64 -> fd)
const close : (fd:fd -> int64)
@@ -824,28 +1094,18 @@
const sendmsg : (fd:fd, msg:msghdr#, flags:msgflags -> int64)
const recvmsg : (fd:fd, msg:msghdr#, flags:msgflags -> int64)
const fallocate : (fd:fd, mode:fallocmode, off:off, len:off -> int64)
- const memfdcreate : (name:byte[:], flags:mfdflags -> fd)
-
- /* signals */
const sigaction : (sig : signo, act : sigaction#, oact : sigaction# -> int)
const sigprocmask : (how : int32, set : sigset#, oset : sigset# -> int)
-
- /* fd stuff */
const pipe : (fds : fd[2]# -> int64)
const dup : (fd : fd -> fd)
const dup2 : (src : fd, dst : fd -> fd)
-
- /* threading */
const futex : (uaddr : int32#, op : futexop, val : int32, \
- timeout : timespec#, uaddr2 : int32#, val3 : int32 -> int64)
-
- /* polling */
+ timeout : timespec#, uaddr2 : int32#, val3 : int32 -> int64)
+ const semctl : (semid : int, semnum : int, cmd : int, arg : void# -> int)
const epollcreate : (flg : epollflags -> fd) /* actually epoll_create1 */
const epollctl : (epfd : fd, op : int, fd : fd, evt : epollevt# -> int)
const epollwait : (epfd : fd, evts : epollevt[:], timeout : int -> int)
const poll : (pfd : pollfd[:], timeout : int -> int)
-
- /* networking */
const socket : (dom : sockfam, stype : socktype, proto : sockproto -> fd)
const connect : (sock : fd, addr : sockaddr#, len : size -> int)
const accept : (sock : fd, addr : sockaddr#, len : size# -> fd)
@@ -853,200 +1113,1210 @@
const bind : (sock : fd, addr : sockaddr#, len : size -> int)
const setsockopt : (sock : fd, lev : sockproto, opt : sockopt, val : void#, len : size -> int)
const getsockopt : (sock : fd, lev : sockproto, opt : sockopt, val : void#, len : size# -> int)
-
- /* memory mapping */
const munmap : (addr:byte#, len:size -> int64)
const mmap : (addr:byte#, len:size, prot:mprot, flags:mopt, fd:fd, off:off -> byte#)
-
- /* time */
const clock_getres : (clk : clock, ts : timespec# -> int32)
const clock_gettime : (clk : clock, ts : timespec# -> int32)
const clock_settime : (clk : clock, ts : timespec# -> int32)
const nanosleep : (req : timespec#, rem : timespec# -> int32)
-
- /* user/group management */
const getuid : ( -> uint32)
const getgid : ( -> uint32)
const setuid : (uid : uint32 -> int32)
const setgid : (gid : uint32 -> int32)
-
- /* system information */
const uname : (buf : utsname# -> int)
+ extern const cstring : (str : byte[:] -> byte#)
+ extern const alloca : (sz : size -> byte#)
+ /* } end manual overrides */
- /* exported values: initialized by start code */
- extern var __cenvp : byte##
+ const mprotect : (addr : void#, len : int, prot : int -> int)
+ const brk : (dsend : ulong -> int)
+ const rt_sigaction : (sig : int, act : sigaction#, oact : sigaction#, sigsetsize : size -> int)
+ const rt_sigprocmask : (how : int, mask : sigset#, omask : sigset#, sigsetsize : size -> int)
+ const rt_sigreturn : (ucp : ucontext# -> int)
+ const readv : (fd : int, iovp : iovec#, iovcnt : uint -> int)
+ const writev : (fd : int, iovp : iovec#, iovcnt : uint -> int)
+ const access : (path : byte#, amode : int -> int)
+ const select : (nfds : int, readfds : fdset#, writefds : fdset#, exceptfds : fdset#, timeout : timeval# -> int)
+ const sched_yield : ( -> int)
+ const mremap : (addr : ulong, old_len : ulong, new_len : ulong, flags : ulong, new_addr : ulong -> int)
+ const msync : (addr : ulong, len : size, fl : int -> int)
+ const mincore : (start : ulong, len : size, vec : byte# -> int)
+ const madvise : (addr : void#, len : size, behav : int -> int)
+ const shmget : (key : key, size : size, shmflg : int -> int)
+ const shmat : (shmid : int, shmaddr : byte#, shmflg : int -> int)
+ const shmctl : (shmid : int, cmd : int, buf : shmid_ds# -> int)
+ const pause : ( -> int)
+ const getitimer : (which : int, itv : itimerval# -> int)
+ const alarm : (secs : uint -> int)
+ const setitimer : (which : int, itv : itimerval#, oitv : itimerval# -> int)
+ const sendfile : (out : int, _in : int, offset : int64#, count : size -> int)
+ const sendto : (s : int, msg : uintptr, len : int, flags : int, to : uintptr, tolen : int -> int)
+ const recvfrom : (s : int, buf : uintptr, len : size, flags : int, from : uintptr, fromlen : uintptr -> int)
+ const shutdown : (s : int, how : int -> int)
+ const getsockname : (s : int, addr : uintptr, namelen : uintptr -> int)
+ const getpeername : (s : int, addr : uintptr, namelen : uintptr -> int)
+ const socketpair : (domain : int, kind : int, protocol : int, rsv : uintptr -> int)
+ const vfork : ( -> int)
+ const semget : (key : key, nsems : int, semflg : int -> int)
+ const semop : (semid : int, tsops : sembuf#, nsops : uint -> int)
+ const shmdt : (shmaddr : byte# -> int)
+ const msgget : (key : key, msgflg : int -> int)
+ const msgsnd : (msqid : int, msgp : msgbuf#, msgsz : size, msgflg : int -> int)
+ const msgrcv : (msqid : int, msgp : msgbuf#, msgsz : size, msgtyp : int64, msgflg : int -> int)
+ const msgctl : (msqid : int, cmd : int, buf : msqid_ds# -> int)
+ const fcntl : (fd : uint, cmd : uint, arg : ulong -> int)
+ const flock : (fd : int, how : int -> int)
+ const fsync : (fd : int -> int)
+ const fdatasync : (fd : uint -> int)
+ const truncate : (path : byte#, length : ulong -> int)
+ const ftruncate : (fd : int, length : int64 -> int)
+ const getdents : (fd : uint, dent : void#, count : uint -> int)
+ const fchdir : (fd : int -> int)
+ const rmdir : (path : byte# -> int)
+ const link : (path : byte#, to : byte# -> int)
+ const symlink : (path : byte#, to : byte# -> int)
+ const chmod : (path : byte#, mode : filemode -> int)
+ const fchmod : (fd : int, mode : int -> int)
+ const chown : (path : byte#, uid : uid, gid : gid -> int)
+ const fchown : (fd : int, uid : int, gid : int -> int)
+ const lchown : (path : byte#, uid : uid, gid : gid -> int)
+ const umask : (newmask : int -> int)
+ const gettimeofday : (tp : timeval#, tzp : timezone# -> int)
+ const getrlimit : (resource : uint, rlim : rlimit# -> int)
+ const getrusage : (who : int, rusage : rusage# -> int)
+ const sysinfo : (info : sysinfo# -> int)
+ const times : (buf : tms# -> int)
+ const ptrace : (req : int64, pid : int64, addr : int64, data : int64 -> int)
+ const syslog : (kind : int, buf : byte#, len : int -> int)
+ const geteuid : ( -> int)
+ const getegid : ( -> int)
+ const setpgid : (pid : int, pgid : int -> int)
+ const getppid : ( -> int)
+ const getpgrp : ( -> int)
+ const setsid : ( -> int)
+ const setreuid : (ruid : uid, euid : uid -> int)
+ const setregid : (rgid : gid, egid : gid -> int)
+ const getgroups : (gidsetsize : int, grouplist : gid# -> int)
+ const setgroups : (gidsetsize : int, grouplist : gid# -> int)
+ const setresuid : (ruid : uid, euid : uid, suid : uid -> int)
+ const getresuid : (ruid : uid#, euid : uid#, suid : uid# -> int)
+ const setresgid : (rgid : gid, egid : gid, sgid : gid -> int)
+ const getresgid : (rgid : gid#, egid : gid#, sgid : gid# -> int)
+ const getpgid : (pid : int -> int)
+ const setfsuid : (uid : uid -> int)
+ const setfsgid : (gid : gid -> int)
+ const getsid : (pid : pid -> int)
+ const capget : (hdrp : capuserheader#, datap : capuserdata# -> int)
+ const capset : (hdrp : capuserheader#, datap : capuserdata# -> int)
+ const rt_sigpending : (set : sigset#, sigsetsize : size -> int)
+ const rt_sigtimedwait : (mask : sigset#, ptr : siginfo#, timeout : timeval#, sigsetsize : size -> int)
+ const rt_sigqueueinfo : (pid : pid, sig : int, info : siginfo# -> int)
+ const rt_sigsuspend : (newset : sigset#, sigsetsize : size -> int)
+ const sigaltstack : (uss : sigstack#, uoss : sigstack# -> int)
+ const utime : (fname : byte#, times : utimbuf# -> int)
+ const mknod : (path : byte#, mode : int, dev : dev -> int)
+ const personality : (per : uint -> int)
+ const ustat : (dev : dev, ubuf : ustat# -> int)
+ const statfs : (path : byte#, buf : statfs# -> int)
+ const fstatfs : (fd : uint, buf : statfs# -> int)
+ const sysfs : (option : int, arg1 : ulong, arg2 : ulong -> int)
+ const getpriority : (which : int, who : int -> int)
+ const setpriority : (which : int, who : int, prio : int -> int)
+ const sched_setparam : (pid : pid, param : sched_param# -> int)
+ const sched_getparam : (pid : pid, param : sched_param# -> int)
+ const sched_setscheduler : (pid : pid, policy : int, param : sched_param# -> int)
+ const sched_getscheduler : (pid : pid -> int)
+ const sched_get_priority_max : (policy : int -> int)
+ const sched_get_priority_min : (policy : int -> int)
+ const sched_rr_get_interval : (pid : pid, interval : timespec# -> int)
+ const mlock : (addr : void#, len : size -> int)
+ const munlock : (addr : void#, len : size -> int)
+ const mlockall : (how : int -> int)
+ const munlockall : ( -> int)
+ const vhangup : ( -> int)
+ const pivot_root : ( -> int)
+ const sysctl : (args : sysctl_args# -> int)
+ const prctl : (option : int, arg2 : uintptr, arg3 : uintptr, arg4 : uintptr, arg5 : uintptr -> int)
+ const arch_prctl : (code : int, addr : ulong -> int)
+ const adjtimex : ( -> int)
+ const setrlimit : (resource : uint, rlim : rlimit# -> int)
+ const chroot : (path : byte# -> int)
+ const sync : ( -> int)
+ const acct : (path : byte# -> int)
+ const settimeofday : (tv : timeval#, tzp : timezone# -> int)
+ const mount : (specialfile : byte#, dir : byte#, filesystemtype : byte#, rwflag : ulong, data : void# -> int)
+ const umount : (path : byte#, flags : int -> int)
+ const swapon : (name : byte# -> int)
+ const swapoff : ( -> int)
+ const reboot : (magic1 : int, magic2 : int, cmd : uint, arg : void# -> int)
+ const sethostname : (hostname : byte#, len : uint -> int)
+ const setdomainname : (name : byte#, len : int -> int)
+ const iopl : (level : uint -> int)
+ const create_module : ( -> int)
+ const init_module : ( -> int)
+ const delete_module : ( -> int)
+ const get_kernel_syms : ( -> int)
+ const query_module : ( -> int)
+ const quotactl : ( -> int)
+ const nfsservctl : ( -> int)
+ const getpmsg : ( -> int)
+ const putpmsg : ( -> int)
+ const afs_syscall : ( -> int)
+ const tuxcall : ( -> int)
+ const security : ( -> int)
+ const gettid : ( -> int)
+ const setxattr : ( -> int)
+ const lsetxattr : ( -> int)
+ const fsetxattr : ( -> int)
+ const getxattr : ( -> int)
+ const lgetxattr : ( -> int)
+ const fgetxattr : ( -> int)
+ const listxattr : ( -> int)
+ const llistxattr : ( -> int)
+ const flistxattr : ( -> int)
+ const removexattr : ( -> int)
+ const lremovexattr : ( -> int)
+ const fremovexattr : ( -> int)
+ const tkill : (tid : int, sig : int -> int)
+ const time : (tm : time# -> int)
+ const sched_setaffinity : (pid : pid, len : uint, user_mask_ptr : ulong# -> int)
+ const sched_getaffinity : (pid : pid, len : uint, user_mask_ptr : ulong# -> int)
+ const set_thread_area : ( -> int)
+ const lookup_dcookie : ( -> int)
+ const epoll_create : (size : int -> int)
+ const epoll_ctl_old : ( -> int)
+ const epoll_wait_old : ( -> int)
+ const remap_file_pages : ( -> int)
+ const set_tid_address : (tidptr : int# -> int)
+ const semtimedop : ( -> int)
+ const fadvise64 : (fd : int, offset : loff, len : size, advice : int -> int)
+ const timer_create : (clock_id : clockid, evp : sigevent#, timerid : timer# -> int)
+ const timer_settime : (timerid : timer, flags : int, new : itimerspec#, old : itimerspec# -> int)
+ const timer_gettime : (timerid : timer, setting : itimerspec# -> int)
+ const timer_getoverrun : (timerid : timer -> int)
+ const timer_delete : (timerid : timer -> int)
+ const clock_nanosleep : (which : clockid, flags : int, rqtp : timespec#, rmtp : timespec# -> int)
+ const epoll_wait : (epfd : int, events : epollevt#, maxevents : int, timeout : int -> int)
+ const epoll_ctl : (epfd : int, op : int, fd : int, event : epollevt# -> int)
+ const tgkill : (tgid : int, pid : int, sig : int -> int)
+ const utimes : (fname : byte#, tptr : timeval# -> int)
+ const mbind : ( -> int)
+ const set_mempolicy : ( -> int)
+ const get_mempolicy : ( -> int)
+ const mq_open : ( -> int)
+ const mq_unlink : ( -> int)
+ const mq_timedsend : ( -> int)
+ const mq_timedreceive : ( -> int)
+ const mq_notify : ( -> int)
+ const mq_getsetattr : ( -> int)
+ const kexec_load : ( -> int)
+ const waitid : (idtype : int, id : pid, info : siginfo#, options : int, rusage : rusage# -> int)
+ const add_key : ( -> int)
+ const request_key : ( -> int)
+ const keyctl : ( -> int)
+ const ioprio_set : ( -> int)
+ const ioprio_get : ( -> int)
+ const inotify_init : ( -> int)
+ const inotify_add_watch : ( -> int)
+ const inotify_rm_watch : ( -> int)
+ const migrate_pages : ( -> int)
+ const openat : (dfd : int, filename : byte#, flags : int, mode : int -> int)
+ const mkdirat : (dfd : int, pathname : byte#, mode : int -> int)
+ const mknodat : (dfd : int, filename : byte#, mode : int, dev : uint -> int)
+ const fchownat : (dfd : int, filename : byte#, uid : uid, gid : gid, flag : int -> int)
+ const futimesat : (dfd : int, filename : byte#, utimes : timeval# -> int)
+ const fstatat : (dfd : int, pathname : byte#, statbuf : statbuf#, flag : int -> int)
+ const unlinkat : (dfd : int, pathname : byte#, flag : int -> int)
+ const renameat : (olddfd : int, oldname : byte#, newdfd : int, newname : byte# -> int)
+ const linkat : (olddfd : int, oldname : byte#, newdfd : int, newname : byte#, flag : int -> int)
+ const symlinkat : (oldname : byte#, newdfd : int, newname : byte# -> int)
+ const readlinkat : (dfd : int, path : byte#, buf : byte#, bufsiz : int -> int)
+ const fchmodat : (dfd : int, filename : byte#, mode : filemode -> int)
+ const faccessat : (dfd : int, filename : byte#, amode : int -> int)
+ const pselect6 : (nfds : int, readfds : fdset#, writefds : fdset#, exceptfds : fdset#, tsp : timespec#, sig : uintptr# -> int)
+ const ppoll : (fds : pollfd#, nfds : uint32, tsp : timespec#, sset : sigset#, ssize : size -> int)
+ const unshare : ( -> int)
+ const set_robust_list : (head : robust_list_head#, len : size -> int)
+ const get_robust_list : (pid : int, head : robust_list_head##, len : size# -> int)
+ const splice : ( -> int)
+ const tee : ( -> int)
+ const sync_file_range : ( -> int)
+ const vmsplice : ( -> int)
+ const move_pages : ( -> int)
+ const utimensat : (dfd : int, pathname : byte#, times : timespec#, flags : int -> int)
+ const epoll_pwait : (epfd : int, events : epollevt#, maxevents : int, timeout : int, mask : sigset# -> int)
+ const signalfd : ( -> int)
+ const timerfd : ( -> int)
+ const eventfd : (initval : uint -> int)
+ const timerfd_settime : ( -> int)
+ const timerfd_gettime : ( -> int)
+ const accept4 : (s : int, addr : uintptr, namelen : uintptr, flags : int -> int)
+ const signalfd4 : ( -> int)
+ const eventfd2 : (initval : uint, flags : int -> int)
+ const epoll_create1 : (flags : int -> int)
+ const dup3 : (oldfd : int, newfd : int, flags : int -> int)
+ const pipe2 : (pipefds : int#, flags : int -> int)
+ const inotify_init1 : ( -> int)
+ const preadv : ( -> int)
+ const pwritev : ( -> int)
+ const rt_tsigqueueinfo : ( -> int)
+ const perf_event_open : ( -> int)
+ const recvmmsg : (s : int, msg : mmsghdr#, vlen : uint, flags : uint, timeout : timespec# -> int)
+ const fanotify_init : ( -> int)
+ const fanotify_mark : ( -> int)
+ const prlimit64 : (pid : pid, resource : uint, new : rlimit#, old : rlimit# -> int)
+ const name_to_handle_at : ( -> int)
+ const open_by_handle_at : ( -> int)
+ const clock_adjtime : ( -> int)
+ const syncfs : (fd : int -> int)
+ const sendmmsg : (s : int, msg : mmsghdr#, vlen : uint, flags : uint -> int)
+ const setns : ( -> int)
+ const process_vm_readv : ( -> int)
+ const process_vm_writev : ( -> int)
+ const kcmp : ( -> int)
+ const finit_module : ( -> int)
;;
-/*
-wraps a syscall argument, converting it to 64 bits for the syscall function.
-This is the same as casting, but more concise than writing a cast to int64.
-*/
-generic a = {x : @t; -> (x : uint64)}
+ /* start manual overrides { */
+ /* getting to the os */
-/* asm stubs from util.s */
-extern const cstring : (str : byte[:] -> byte#)
-extern const alloca : (sz : size -> byte#)
+ /* process management */
+ /* FIXME: where the fuck is 'struct pt_reg' defined?? */
+ /* wrappers to extract wait status */
-/* process management */
-const exit = {status; syscall(Sysexit, a(status))}
-const exit_group = {status; syscall(Sysexit_group, a(status))}
-const getpid = {; -> (syscall(Sysgetpid) : pid)}
-const kill = {pid, sig; -> syscall(Syskill, a(pid), a(sig))}
-const fork = {; -> (syscall(Sysfork) : pid)}
-const clone = {flags, stk, ptid, ctid, ptreg; -> (syscall(Sysclone, a(flags), a(stk), a(ptid), a(ctid), a(ptreg)) : pid)}
-const wait4 = {pid, loc, opt, usage; -> syscall(Syswait4, a(pid), a(loc), a(opt), a(usage))}
-const waitpid = {pid, loc, opt;
- var rusage
- -> wait4(pid, loc, opt, &rusage)
-}
+ /* file manipulation */
-const execv = {cmd, args
- var p, cargs, i
+ /* signals */
- /* of course we fucking have to duplicate this code everywhere,
- * since we want to stack allocate... */
- p = alloca((args.len + 1)*sizeof(byte#))
- cargs = (p : byte##)[:args.len + 1]
- for i = 0; i < args.len; i++
- cargs[i] = cstring(args[i])
- ;;
- cargs[args.len] = (0 : byte#)
- -> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp))
-}
+ /* fd stuff */
-const execve = {cmd, args, env
- var cargs, cenv, i
- var ap, ep
+ /* threading */
- /* copy the args */
- ap = alloca((args.len + 1)*sizeof(byte#))
- cargs = (ap : byte##)[:args.len + 1]
- for i = 0; i < args.len; i++
- cargs[i] = cstring(args[i])
- ;;
- cargs[args.len] = (0 : byte#)
+ /* polling */
+ /* networking */
+
+ /* memory mapping */
+
+ /* time */
+
+ /* user/group management */
+
+ /* system information */
+
/*
- copy the env.
- of course we fucking have to duplicate this code everywhere,
- since we want to stack allocate...
+ wraps a syscall argument, converting it to 64 bits for the syscall function.
+ This is the same as casting, but more concise than writing a cast to int64.
*/
- ep = alloca((env.len + 1)*sizeof(byte#))
- cenv = (ep : byte##)[:env.len]
- for i = 0; i < env.len; i++
- cenv[i] = cstring(env[i])
- ;;
- cenv[env.len] = (0 : byte#)
+ generic a = {x : @t; -> (x : uint64)}
- -> syscall(Sysexecve, cstring(cmd), a(ap), a(ep))
-}
+ /* asm stubs from util.s */
-/* file manipulation */
-const open = {path, opts; -> (syscall(Sysopen, cstring(path), a(opts), a(0o777)) : fd)}
-const openmode = {path, opts, mode; -> (syscall(Sysopen, cstring(path), a(opts), a(mode)) : fd)}
-const close = {fd; -> syscall(Sysclose, a(fd))}
-const creat = {path, mode; -> (syscall(Syscreat, cstring(path), a(mode)) : fd)}
-const rename = {from, to; -> syscall(Sysrename, cstring(from), cstring(to))}
-const unlink = {path; -> (syscall(Sysunlink, cstring(path)) : int)}
-const readlink = {path, buf; -> syscall(Sysreadlink, cstring(path), (buf : byte#), a(buf.len))}
-const read = {fd, buf; -> (syscall(Sysread, a(fd), (buf : byte#), a(buf.len)) : size)}
-const pread = {fd, buf, off; -> (syscall(Syspread64, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
-const write = {fd, buf; -> (syscall(Syswrite, a(fd), (buf : byte#), a(buf.len)) : size)}
-const pwrite = {fd, buf, off; -> (syscall(Syspwrite64, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
-const lseek = {fd, off, whence; -> syscall(Syslseek, a(fd), a(off), a(whence))}
-const stat = {path, sb; -> syscall(Sysstat, cstring(path), a(sb))}
-const lstat = {path, sb; -> syscall(Syslstat, cstring(path), a(sb))}
-const fstat = {fd, sb; -> syscall(Sysfstat, a(fd), a(sb))}
-const mkdir = {path, mode; -> (syscall(Sysmkdir, cstring(path), a(mode)) : int64)}
-generic ioctl = {fd, req, arg; -> (syscall(Sysioctl, a(fd), a(req), a(arg)) : int64)}
-const getdents64 = {fd, buf; -> syscall(Sysgetdents64, a(fd), (buf : byte#), a(buf.len))}
-const chdir = {dir; -> syscall(Syschdir, cstring(dir))}
-const getcwd = {buf; -> syscall(Sysgetcwd, a(buf), a(buf.len))}
-const sendmsg = {fd, msg, flags; -> syscall(Syssendmsg, a(fd), msg, a(flags))}
-const recvmsg = {fd, msg, flags; -> syscall(Sysrecvmsg, a(fd), msg, a(flags))}
-const fallocate = {fd, mode, off, len; -> syscall(Sysfallocate, a(fd), a(mode), a(off), a(len))}
-const memfdcreate = {name, flags; -> (syscall(Sysmemfd_create, cstring(name), a(flags)) : fd)}
+ /* process management */
+ const exit = {status; syscall(Sysexit, a(status))}
+ const exit_group = {status; syscall(Sysexit_group, a(status))}
+ const getpid = {; -> (syscall(Sysgetpid) : pid)}
+ const kill = {pid, sig; -> syscall(Syskill, a(pid), a(sig))}
+ const fork = {; -> (syscall(Sysfork) : pid)}
+ const clone = {flags, stk, ptid, ctid, ptreg; -> (syscall(Sysclone, a(flags), a(stk), a(ptid), a(ctid), a(ptreg)) : pid)}
+ const wait4 = {pid, loc, opt, usage; -> syscall(Syswait4, a(pid), a(loc), a(opt), a(usage))}
+ const waitpid = {pid, loc, opt;
+ var rusage
+ -> wait4(pid, loc, opt, &rusage)
+ }
-/* file stuff */
-const pipe = {fds; -> syscall(Syspipe, a(fds))}
-const dup = {fd; -> (syscall(Sysdup, a(fd)) : fd)}
-const dup2 = {src, dst; -> (syscall(Sysdup2, a(src), a(dst)) : fd)}
+ const execv = {cmd, args
+ var p, cargs, i
-const sigaction = {sig, act, oact;
- if act.restore == (0 : byte#)
- act.flags |= Sarestorer
- act.restore = (sys.sigreturn : byte#)
- ;;
- -> (syscall(Sysrt_sigaction, a(sig), a(act), a(oact), a(sizeof(sigflags))) : int)
-}
-const sigprocmask = {sig, act, oact; -> (syscall(Sysrt_sigprocmask, a(sig), a(act), a(oact), a(sizeof(sigflags))) : int)}
+ /* of course we fucking have to duplicate this code everywhere,
+ * since we want to stack allocate... */
+ p = alloca((args.len + 1)*sizeof(byte#))
+ cargs = (p : byte##)[:args.len + 1]
+ for i = 0; i < args.len; i++
+ cargs[i] = cstring(args[i])
+ ;;
+ cargs[args.len] = (0 : byte#)
+ -> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp))
+ }
-/* threading */
-const futex = {uaddr, op, val, timeout, uaddr2, val3
- -> syscall(Sysfutex, a(uaddr), a(op), a(val), a(timeout), a(uaddr2), a(val3))}
+ const execve = {cmd, args, env
+ var cargs, cenv, i
+ var ap, ep
-/* poll */
-const poll = {pfd, timeout; -> (syscall(Syspoll, (pfd : pollfd#), a(pfd.len), a(timeout)) : int)}
-const epollctl = {epfd, op, fd, evt;
- -> (syscall(Sysepoll_ctl, a(epfd), a(op), a(fd), a(evt)) : int)}
-const epollwait = {epfd, evts, timeout;
- -> (syscall(Sysepoll_wait, a(epfd), (evts : epollevt#), a(evts.len), a(timeout)) : int)}
-const epollcreate = {flg; -> (syscall(Sysepoll_create1, a(flg)) : fd)}
+ /* copy the args */
+ ap = alloca((args.len + 1)*sizeof(byte#))
+ cargs = (ap : byte##)[:args.len + 1]
+ for i = 0; i < args.len; i++
+ cargs[i] = cstring(args[i])
+ ;;
+ cargs[args.len] = (0 : byte#)
-/* networking */
-const socket = {dom, stype, proto; -> (syscall(Syssocket, a(dom), a(stype), a(proto)) : fd)}
-const connect = {sock, addr, len; -> (syscall(Sysconnect, a(sock), a(addr), a(len)) : int)}
-const bind = {sock, addr, len; -> (syscall(Sysbind, a(sock), a(addr), a(len)) : int)}
-const listen = {sock, backlog; -> (syscall(Syslisten, a(sock), a(backlog)) : int)}
-const accept = {sock, addr, lenp; -> (syscall(Sysaccept, a(sock), a(addr), a(lenp)) : fd)}
-const setsockopt = {sock, lev, opt, val, len; -> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
-const getsockopt = {sock, lev, opt, val, len; -> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+ /*
+ copy the env.
+ of course we fucking have to duplicate this code everywhere,
+ since we want to stack allocate...
+ */
+ ep = alloca((env.len + 1)*sizeof(byte#))
+ cenv = (ep : byte##)[:env.len]
+ for i = 0; i < env.len; i++
+ cenv[i] = cstring(env[i])
+ ;;
+ cenv[env.len] = (0 : byte#)
-/* memory mapping */
-const munmap = {addr, len; -> syscall(Sysmunmap, a(addr), a(len))}
-const mmap = {addr, len, prot, flags, fd, off;
- -> (syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(off)) : byte#)
-}
+ -> syscall(Sysexecve, cstring(cmd), a(ap), a(ep))
+ }
-/* time */
-const clock_getres = {clk, ts; -> (syscall(Sysclock_getres, clockid(clk), a(ts)) : int32)}
-const clock_gettime = {clk, ts; -> (syscall(Sysclock_gettime, clockid(clk), a(ts)) : int32)}
-const clock_settime = {clk, ts; -> (syscall(Sysclock_settime, clockid(clk), a(ts)) : int32)}
-const nanosleep = {req, rem; -> (syscall(Sysnanosleep, a(req), a(rem)) : int32)}
+ /* file manipulation */
+ const open = {path, opts; -> (syscall(Sysopen, cstring(path), a(opts), a(0o777)) : fd)}
+ const openmode = {path, opts, mode; -> (syscall(Sysopen, cstring(path), a(opts), a(mode)) : fd)}
+ const close = {fd; -> syscall(Sysclose, a(fd))}
+ const creat = {path, mode; -> (syscall(Syscreat, cstring(path), a(mode)) : fd)}
+ const rename = {from, to; -> syscall(Sysrename, cstring(from), cstring(to))}
+ const unlink = {path; -> (syscall(Sysunlink, cstring(path)) : int)}
+ const readlink = {path, buf; -> syscall(Sysreadlink, cstring(path), (buf : byte#), a(buf.len))}
+ const read = {fd, buf; -> (syscall(Sysread, a(fd), (buf : byte#), a(buf.len)) : size)}
+ const pread = {fd, buf, off; -> (syscall(Syspread, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
+ const write = {fd, buf; -> (syscall(Syswrite, a(fd), (buf : byte#), a(buf.len)) : size)}
+ const pwrite = {fd, buf, off; -> (syscall(Syspwrite, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
+ const lseek = {fd, off, whence; -> syscall(Syslseek, a(fd), a(off), a(whence))}
+ const stat = {path, sb; -> syscall(Sysstat, cstring(path), a(sb))}
+ const lstat = {path, sb; -> syscall(Syslstat, cstring(path), a(sb))}
+ const fstat = {fd, sb; -> syscall(Sysfstat, a(fd), a(sb))}
+ const mkdir = {path, mode; -> (syscall(Sysmkdir, cstring(path), a(mode)) : int64)}
+ generic ioctl = {fd, req, arg; -> (syscall(Sysioctl, a(fd), a(req), a(arg)) : int64)}
+ const getdents64 = {fd, buf; -> syscall(Sysgetdents64, a(fd), (buf : byte#), a(buf.len))}
+ const chdir = {dir; -> syscall(Syschdir, cstring(dir))}
+ const getcwd = {buf; -> syscall(Sysgetcwd, a(buf), a(buf.len))}
+ const sendmsg = {fd, msg, flags; -> syscall(Syssendmsg, a(fd), msg, a(flags))}
+ const recvmsg = {fd, msg, flags; -> syscall(Sysrecvmsg, a(fd), msg, a(flags))}
+ const fallocate = {fd, mode, off, len; -> syscall(Sysfallocate, a(fd), a(mode), a(off), a(len))}
-/* user/group management */
-const getuid = {; -> (syscall(Sysgetuid) : uint32)}
-const getgid = {; -> (syscall(Sysgetgid) : uint32)}
-const setuid = {uid; -> (syscall(Syssetuid, a(uid)) : int32)}
-const setgid = {gid; -> (syscall(Syssetgid, a(gid)) : int32)}
+ /* file stuff */
+ const pipe = {fds; -> syscall(Syspipe, a(fds))}
+ const dup = {fd; -> (syscall(Sysdup, a(fd)) : fd)}
+ const dup2 = {src, dst; -> (syscall(Sysdup2, a(src), a(dst)) : fd)}
-/* system information */
-const uname = {buf; -> (syscall(Sysuname, buf) : int)}
+ const sigaction = {sig, act, oact;
+ if act.restore == (0 : byte#)
+ act.flags |= Sarestorer
+ act.restore = (sys.sigreturn : byte#)
+ ;;
+ -> (syscall(Sysrt_sigaction, a(sig), a(act), a(oact), a(sizeof(sigflags))) : int)
+ }
+ const sigprocmask = {sig, act, oact; -> (syscall(Sysrt_sigprocmask, a(sig), a(act), a(oact), a(sizeof(sigflags))) : int)}
-const clockid = {clk
- match clk
- | `Clockrealtime: -> 0
- | `Clockmonotonic: -> 1
- | `Clockproccpu: -> 2
- | `Clockthreadcpu: -> 3
- | `Clockmonotonicraw: -> 4
- | `Clockrealtimecoarse: -> 5
- | `Clockmonotoniccoarse:-> 6
- | `Clockboottime: -> 7
- | `Clockrealtimealarm: -> 8
- | `Clockboottimealarm: -> 9
- ;;
- -> -1
-}
+ /* threading */
+ const futex = {uaddr, op, val, timeout, uaddr2, val3
+ -> syscall(Sysfutex, a(uaddr), a(op), a(val), a(timeout), a(uaddr2), a(val3))
+ }
+ const semctl = {semid, semnum, cmd, arg
+ -> (syscall(Syssemctl, a(semnum), a(cmd), a(arg)) : int)
+ }
+ /* poll */
+ const poll = {pfd, timeout; -> (syscall(Syspoll, (pfd : pollfd#), a(pfd.len), a(timeout)) : int)}
+ const epollctl = {epfd, op, fd, evt;
+ -> (syscall(Sysepoll_ctl, a(epfd), a(op), a(fd), a(evt)) : int)}
+ const epollwait = {epfd, evts, timeout;
+ -> (syscall(Sysepoll_wait, a(epfd), (evts : epollevt#), a(evts.len), a(timeout)) : int)}
+ const epollcreate = {flg; -> (syscall(Sysepoll_create1, a(flg)) : fd)}
-const waitstatus = {st
- if st & 0x7f == 0 /* if exited */
- -> `Waitexit ((st & 0xff00) >> 8)
- elif ((st & 0xffff)-1) < 0xff /* if signaled */
- -> `Waitsig ((st) & 0x7f)
- elif (((st & 0xffff)*0x10001)>>8) > 0x7f00
- -> `Waitstop ((st & 0xff00) >> 8)
- ;;
- -> `Waitfail st /* wait failed to give a result */
+ /* networking */
+ const socket = {dom, stype, proto; -> (syscall(Syssocket, a(dom), a(stype), a(proto)) : fd)}
+ const connect = {sock, addr, len; -> (syscall(Sysconnect, a(sock), a(addr), a(len)) : int)}
+ const bind = {sock, addr, len; -> (syscall(Sysbind, a(sock), a(addr), a(len)) : int)}
+ const listen = {sock, backlog; -> (syscall(Syslisten, a(sock), a(backlog)) : int)}
+ const accept = {sock, addr, lenp; -> (syscall(Sysaccept, a(sock), a(addr), a(lenp)) : fd)}
+ const setsockopt = {sock, lev, opt, val, len; -> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+ const getsockopt = {sock, lev, opt, val, len; -> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+
+ /* memory mapping */
+ const munmap = {addr, len; -> syscall(Sysmunmap, a(addr), a(len))}
+ const mmap = {addr, len, prot, flags, fd, off;
+ -> (syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(off)) : byte#)
+ }
+
+ /* time */
+ const clock_getres = {clk, ts; -> (syscall(Sysclock_getres, clockid(clk), a(ts)) : int32)}
+ const clock_gettime = {clk, ts; -> (syscall(Sysclock_gettime, clockid(clk), a(ts)) : int32)}
+ const clock_settime = {clk, ts; -> (syscall(Sysclock_settime, clockid(clk), a(ts)) : int32)}
+ const nanosleep = {req, rem; -> (syscall(Sysnanosleep, a(req), a(rem)) : int32)}
+
+ /* user/group management */
+ const getuid = {; -> (syscall(Sysgetuid) : uint32)}
+ const getgid = {; -> (syscall(Sysgetgid) : uint32)}
+ const setuid = {uid; -> (syscall(Syssetuid, a(uid)) : int32)}
+ const setgid = {gid; -> (syscall(Syssetgid, a(gid)) : int32)}
+
+ /* system information */
+ const uname = {buf; -> (syscall(Sysuname, buf) : int)}
+
+ const clockid = {clk
+ match clk
+ | `Clockrealtime: -> 0
+ | `Clockmonotonic: -> 1
+ | `Clockproccpu: -> 2
+ | `Clockthreadcpu: -> 3
+ | `Clockmonotonicraw: -> 4
+ | `Clockrealtimecoarse: -> 5
+ | `Clockmonotoniccoarse:-> 6
+ | `Clockboottime: -> 7
+ | `Clockrealtimealarm: -> 8
+ | `Clockboottimealarm: -> 9
+ ;;
+ -> -1
+ }
+
+
+ const waitstatus = {st
+ if st & 0x7f == 0 /* if exited */
+ -> `Waitexit ((st & 0xff00) >> 8)
+ elif ((st & 0xffff)-1) < 0xff /* if signaled */
+ -> `Waitsig ((st) & 0x7f)
+ elif (((st & 0xffff)*0x10001)>>8) > 0x7f00
+ -> `Waitstop ((st & 0xff00) >> 8)
+ ;;
+ -> `Waitfail st /* wait failed to give a result */
+ }
+ /* } end manual overrides */
+const mprotect = {addr, len, prot
+ -> (syscall(Sysmprotect, a(len), a(prot)) : int)
+}
+const brk = {dsend
+ -> (syscall(Sysbrk) : int)
+}
+const rt_sigaction = {sig, act, oact, sigsetsize
+ -> (syscall(Sysrt_sigaction, a(act), a(oact), a(sigsetsize)) : int)
+}
+const rt_sigprocmask = {how, mask, omask, sigsetsize
+ -> (syscall(Sysrt_sigprocmask, a(mask), a(omask), a(sigsetsize)) : int)
+}
+const rt_sigreturn = {ucp
+ -> (syscall(Sysrt_sigreturn) : int)
+}
+const readv = {fd, iovp, iovcnt
+ -> (syscall(Sysreadv, a(iovp), a(iovcnt)) : int)
+}
+const writev = {fd, iovp, iovcnt
+ -> (syscall(Syswritev, a(iovp), a(iovcnt)) : int)
+}
+const access = {path, amode
+ -> (syscall(Sysaccess, a(amode)) : int)
+}
+const select = {nfds, readfds, writefds, exceptfds, timeout
+ -> (syscall(Sysselect, a(readfds), a(writefds), a(exceptfds), a(timeout)) : int)
+}
+const sched_yield = {
+ -> (syscall(Syssched_yield) : int)
+}
+const mremap = {addr, old_len, new_len, flags, new_addr
+ -> (syscall(Sysmremap, a(old_len), a(new_len), a(flags), a(new_addr)) : int)
+}
+const msync = {addr, len, fl
+ -> (syscall(Sysmsync, a(len), a(fl)) : int)
+}
+const mincore = {start, len, vec
+ -> (syscall(Sysmincore, a(len), a(vec)) : int)
+}
+const madvise = {addr, len, behav
+ -> (syscall(Sysmadvise, a(len), a(behav)) : int)
+}
+const shmget = {key, size, shmflg
+ -> (syscall(Sysshmget, a(size), a(shmflg)) : int)
+}
+const shmat = {shmid, shmaddr, shmflg
+ -> (syscall(Sysshmat, a(shmaddr), a(shmflg)) : int)
+}
+const shmctl = {shmid, cmd, buf
+ -> (syscall(Sysshmctl, a(cmd), a(buf)) : int)
+}
+const pause = {
+ -> (syscall(Syspause) : int)
+}
+const getitimer = {which, itv
+ -> (syscall(Sysgetitimer, a(itv)) : int)
+}
+const alarm = {secs
+ -> (syscall(Sysalarm) : int)
+}
+const setitimer = {which, itv, oitv
+ -> (syscall(Syssetitimer, a(itv), a(oitv)) : int)
+}
+const sendfile = {out, _in, offset, count
+ -> (syscall(Syssendfile, a(_in), a(offset), a(count)) : int)
+}
+const sendto = {s, msg, len, flags, to, tolen
+ -> (syscall(Syssendto, a(msg), a(len), a(flags), a(to), a(tolen)) : int)
+}
+const recvfrom = {s, buf, len, flags, from, fromlen
+ -> (syscall(Sysrecvfrom, a(buf), a(len), a(flags), a(from), a(fromlen)) : int)
+}
+const shutdown = {s, how
+ -> (syscall(Sysshutdown, a(how)) : int)
+}
+const getsockname = {s, addr, namelen
+ -> (syscall(Sysgetsockname, a(addr), a(namelen)) : int)
+}
+const getpeername = {s, addr, namelen
+ -> (syscall(Sysgetpeername, a(addr), a(namelen)) : int)
+}
+const socketpair = {domain, kind, protocol, rsv
+ -> (syscall(Syssocketpair, a(kind), a(protocol), a(rsv)) : int)
+}
+const vfork = {
+ -> (syscall(Sysvfork) : int)
+}
+const semget = {key, nsems, semflg
+ -> (syscall(Syssemget, a(nsems), a(semflg)) : int)
+}
+const semop = {semid, tsops, nsops
+ -> (syscall(Syssemop, a(tsops), a(nsops)) : int)
+}
+const shmdt = {shmaddr
+ -> (syscall(Sysshmdt) : int)
+}
+const msgget = {key, msgflg
+ -> (syscall(Sysmsgget, a(msgflg)) : int)
+}
+const msgsnd = {msqid, msgp, msgsz, msgflg
+ -> (syscall(Sysmsgsnd, a(msgp), a(msgsz), a(msgflg)) : int)
+}
+const msgrcv = {msqid, msgp, msgsz, msgtyp, msgflg
+ -> (syscall(Sysmsgrcv, a(msgp), a(msgsz), a(msgtyp), a(msgflg)) : int)
+}
+const msgctl = {msqid, cmd, buf
+ -> (syscall(Sysmsgctl, a(cmd), a(buf)) : int)
+}
+const fcntl = {fd, cmd, arg
+ -> (syscall(Sysfcntl, a(cmd), a(arg)) : int)
+}
+const flock = {fd, how
+ -> (syscall(Sysflock, a(how)) : int)
+}
+const fsync = {fd
+ -> (syscall(Sysfsync) : int)
+}
+const fdatasync = {fd
+ -> (syscall(Sysfdatasync) : int)
+}
+const truncate = {path, length
+ -> (syscall(Systruncate, a(length)) : int)
+}
+const ftruncate = {fd, length
+ -> (syscall(Sysftruncate, a(length)) : int)
+}
+const getdents = {fd, dent, count
+ -> (syscall(Sysgetdents, a(dent), a(count)) : int)
+}
+const fchdir = {fd
+ -> (syscall(Sysfchdir) : int)
+}
+const rmdir = {path
+ -> (syscall(Sysrmdir) : int)
+}
+const link = {path, to
+ -> (syscall(Syslink, a(to)) : int)
+}
+const symlink = {path, to
+ -> (syscall(Syssymlink, a(to)) : int)
+}
+const chmod = {path, mode
+ -> (syscall(Syschmod, a(mode)) : int)
+}
+const fchmod = {fd, mode
+ -> (syscall(Sysfchmod, a(mode)) : int)
+}
+const chown = {path, uid, gid
+ -> (syscall(Syschown, a(uid), a(gid)) : int)
+}
+const fchown = {fd, uid, gid
+ -> (syscall(Sysfchown, a(uid), a(gid)) : int)
+}
+const lchown = {path, uid, gid
+ -> (syscall(Syslchown, a(uid), a(gid)) : int)
+}
+const umask = {newmask
+ -> (syscall(Sysumask) : int)
+}
+const gettimeofday = {tp, tzp
+ -> (syscall(Sysgettimeofday, a(tzp)) : int)
+}
+const getrlimit = {resource, rlim
+ -> (syscall(Sysgetrlimit, a(rlim)) : int)
+}
+const getrusage = {who, rusage
+ -> (syscall(Sysgetrusage, a(rusage)) : int)
+}
+const sysinfo = {info
+ -> (syscall(Syssysinfo) : int)
+}
+const times = {buf
+ -> (syscall(Systimes) : int)
+}
+const ptrace = {req, pid, addr, data
+ -> (syscall(Sysptrace, a(pid), a(addr), a(data)) : int)
+}
+const syslog = {kind, buf, len
+ -> (syscall(Syssyslog, a(buf), a(len)) : int)
+}
+const geteuid = {
+ -> (syscall(Sysgeteuid) : int)
+}
+const getegid = {
+ -> (syscall(Sysgetegid) : int)
+}
+const setpgid = {pid, pgid
+ -> (syscall(Syssetpgid, a(pgid)) : int)
+}
+const getppid = {
+ -> (syscall(Sysgetppid) : int)
+}
+const getpgrp = {
+ -> (syscall(Sysgetpgrp) : int)
+}
+const setsid = {
+ -> (syscall(Syssetsid) : int)
+}
+const setreuid = {ruid, euid
+ -> (syscall(Syssetreuid, a(euid)) : int)
+}
+const setregid = {rgid, egid
+ -> (syscall(Syssetregid, a(egid)) : int)
+}
+const getgroups = {gidsetsize, grouplist
+ -> (syscall(Sysgetgroups, a(grouplist)) : int)
+}
+const setgroups = {gidsetsize, grouplist
+ -> (syscall(Syssetgroups, a(grouplist)) : int)
+}
+const setresuid = {ruid, euid, suid
+ -> (syscall(Syssetresuid, a(euid), a(suid)) : int)
+}
+const getresuid = {ruid, euid, suid
+ -> (syscall(Sysgetresuid, a(euid), a(suid)) : int)
+}
+const setresgid = {rgid, egid, sgid
+ -> (syscall(Syssetresgid, a(egid), a(sgid)) : int)
+}
+const getresgid = {rgid, egid, sgid
+ -> (syscall(Sysgetresgid, a(egid), a(sgid)) : int)
+}
+const getpgid = {pid
+ -> (syscall(Sysgetpgid) : int)
+}
+const setfsuid = {uid
+ -> (syscall(Syssetfsuid) : int)
+}
+const setfsgid = {gid
+ -> (syscall(Syssetfsgid) : int)
+}
+const getsid = {pid
+ -> (syscall(Sysgetsid) : int)
+}
+const capget = {hdrp, datap
+ -> (syscall(Syscapget, a(datap)) : int)
+}
+const capset = {hdrp, datap
+ -> (syscall(Syscapset, a(datap)) : int)
+}
+const rt_sigpending = {set, sigsetsize
+ -> (syscall(Sysrt_sigpending, a(sigsetsize)) : int)
+}
+const rt_sigtimedwait = {mask, ptr, timeout, sigsetsize
+ -> (syscall(Sysrt_sigtimedwait, a(ptr), a(timeout), a(sigsetsize)) : int)
+}
+const rt_sigqueueinfo = {pid, sig, info
+ -> (syscall(Sysrt_sigqueueinfo, a(sig), a(info)) : int)
+}
+const rt_sigsuspend = {newset, sigsetsize
+ -> (syscall(Sysrt_sigsuspend, a(sigsetsize)) : int)
+}
+const sigaltstack = {uss, uoss
+ -> (syscall(Syssigaltstack, a(uoss)) : int)
+}
+const utime = {fname, times
+ -> (syscall(Sysutime, a(times)) : int)
+}
+const mknod = {path, mode, dev
+ -> (syscall(Sysmknod, a(mode), a(dev)) : int)
+}
+const personality = {per
+ -> (syscall(Syspersonality) : int)
+}
+const ustat = {dev, ubuf
+ -> (syscall(Sysustat, a(ubuf)) : int)
+}
+const statfs = {path, buf
+ -> (syscall(Sysstatfs, a(buf)) : int)
+}
+const fstatfs = {fd, buf
+ -> (syscall(Sysfstatfs, a(buf)) : int)
+}
+const sysfs = {option, arg1, arg2
+ -> (syscall(Syssysfs, a(arg1), a(arg2)) : int)
+}
+const getpriority = {which, who
+ -> (syscall(Sysgetpriority, a(who)) : int)
+}
+const setpriority = {which, who, prio
+ -> (syscall(Syssetpriority, a(who), a(prio)) : int)
+}
+const sched_setparam = {pid, param
+ -> (syscall(Syssched_setparam, a(param)) : int)
+}
+const sched_getparam = {pid, param
+ -> (syscall(Syssched_getparam, a(param)) : int)
+}
+const sched_setscheduler = {pid, policy, param
+ -> (syscall(Syssched_setscheduler, a(policy), a(param)) : int)
+}
+const sched_getscheduler = {pid
+ -> (syscall(Syssched_getscheduler) : int)
+}
+const sched_get_priority_max = {policy
+ -> (syscall(Syssched_get_priority_max) : int)
+}
+const sched_get_priority_min = {policy
+ -> (syscall(Syssched_get_priority_min) : int)
+}
+const sched_rr_get_interval = {pid, interval
+ -> (syscall(Syssched_rr_get_interval, a(interval)) : int)
+}
+const mlock = {addr, len
+ -> (syscall(Sysmlock, a(len)) : int)
+}
+const munlock = {addr, len
+ -> (syscall(Sysmunlock, a(len)) : int)
+}
+const mlockall = {how
+ -> (syscall(Sysmlockall) : int)
+}
+const munlockall = {
+ -> (syscall(Sysmunlockall) : int)
+}
+const vhangup = {
+ -> (syscall(Sysvhangup) : int)
+}
+const pivot_root = {
+ -> (syscall(Syspivot_root) : int)
+}
+const sysctl = {args
+ -> (syscall(Syssysctl) : int)
+}
+const prctl = {option, arg2, arg3, arg4, arg5
+ -> (syscall(Sysprctl, a(arg2), a(arg3), a(arg4), a(arg5)) : int)
+}
+const arch_prctl = {code, addr
+ -> (syscall(Sysarch_prctl, a(addr)) : int)
+}
+const adjtimex = {
+ -> (syscall(Sysadjtimex) : int)
+}
+const setrlimit = {resource, rlim
+ -> (syscall(Syssetrlimit, a(rlim)) : int)
+}
+const chroot = {path
+ -> (syscall(Syschroot) : int)
+}
+const sync = {
+ -> (syscall(Syssync) : int)
+}
+const acct = {path
+ -> (syscall(Sysacct) : int)
+}
+const settimeofday = {tv, tzp
+ -> (syscall(Syssettimeofday, a(tzp)) : int)
+}
+const mount = {specialfile, dir, filesystemtype, rwflag, data
+ -> (syscall(Sysmount, a(dir), a(filesystemtype), a(rwflag), a(data)) : int)
+}
+const umount = {path, flags
+ -> (syscall(Sysumount, a(flags)) : int)
+}
+const swapon = {name
+ -> (syscall(Sysswapon) : int)
+}
+const swapoff = {
+ -> (syscall(Sysswapoff) : int)
+}
+const reboot = {magic1, magic2, cmd, arg
+ -> (syscall(Sysreboot, a(magic2), a(cmd), a(arg)) : int)
+}
+const sethostname = {hostname, len
+ -> (syscall(Syssethostname, a(len)) : int)
+}
+const setdomainname = {name, len
+ -> (syscall(Syssetdomainname, a(len)) : int)
+}
+const iopl = {level
+ -> (syscall(Sysiopl) : int)
+}
+const create_module = {
+ -> (syscall(Syscreate_module) : int)
+}
+const init_module = {
+ -> (syscall(Sysinit_module) : int)
+}
+const delete_module = {
+ -> (syscall(Sysdelete_module) : int)
+}
+const get_kernel_syms = {
+ -> (syscall(Sysget_kernel_syms) : int)
+}
+const query_module = {
+ -> (syscall(Sysquery_module) : int)
+}
+const quotactl = {
+ -> (syscall(Sysquotactl) : int)
+}
+const nfsservctl = {
+ -> (syscall(Sysnfsservctl) : int)
+}
+const getpmsg = {
+ -> (syscall(Sysgetpmsg) : int)
+}
+const putpmsg = {
+ -> (syscall(Sysputpmsg) : int)
+}
+const afs_syscall = {
+ -> (syscall(Sysafs_syscall) : int)
+}
+const tuxcall = {
+ -> (syscall(Systuxcall) : int)
+}
+const security = {
+ -> (syscall(Syssecurity) : int)
+}
+const gettid = {
+ -> (syscall(Sysgettid) : int)
+}
+const setxattr = {
+ -> (syscall(Syssetxattr) : int)
+}
+const lsetxattr = {
+ -> (syscall(Syslsetxattr) : int)
+}
+const fsetxattr = {
+ -> (syscall(Sysfsetxattr) : int)
+}
+const getxattr = {
+ -> (syscall(Sysgetxattr) : int)
+}
+const lgetxattr = {
+ -> (syscall(Syslgetxattr) : int)
+}
+const fgetxattr = {
+ -> (syscall(Sysfgetxattr) : int)
+}
+const listxattr = {
+ -> (syscall(Syslistxattr) : int)
+}
+const llistxattr = {
+ -> (syscall(Sysllistxattr) : int)
+}
+const flistxattr = {
+ -> (syscall(Sysflistxattr) : int)
+}
+const removexattr = {
+ -> (syscall(Sysremovexattr) : int)
+}
+const lremovexattr = {
+ -> (syscall(Syslremovexattr) : int)
+}
+const fremovexattr = {
+ -> (syscall(Sysfremovexattr) : int)
+}
+const tkill = {tid, sig
+ -> (syscall(Systkill, a(sig)) : int)
+}
+const time = {tm
+ -> (syscall(Systime) : int)
+}
+const sched_setaffinity = {pid, len, user_mask_ptr
+ -> (syscall(Syssched_setaffinity, a(len), a(user_mask_ptr)) : int)
+}
+const sched_getaffinity = {pid, len, user_mask_ptr
+ -> (syscall(Syssched_getaffinity, a(len), a(user_mask_ptr)) : int)
+}
+const set_thread_area = {
+ -> (syscall(Sysset_thread_area) : int)
+}
+const lookup_dcookie = {
+ -> (syscall(Syslookup_dcookie) : int)
+}
+const epoll_create = {size
+ -> (syscall(Sysepoll_create) : int)
+}
+const epoll_ctl_old = {
+ -> (syscall(Sysepoll_ctl_old) : int)
+}
+const epoll_wait_old = {
+ -> (syscall(Sysepoll_wait_old) : int)
+}
+const remap_file_pages = {
+ -> (syscall(Sysremap_file_pages) : int)
+}
+const set_tid_address = {tidptr
+ -> (syscall(Sysset_tid_address) : int)
+}
+const semtimedop = {
+ -> (syscall(Syssemtimedop) : int)
+}
+const fadvise64 = {fd, offset, len, advice
+ -> (syscall(Sysfadvise64, a(offset), a(len), a(advice)) : int)
+}
+const timer_create = {clock_id, evp, timerid
+ -> (syscall(Systimer_create, a(evp), a(timerid)) : int)
+}
+const timer_settime = {timerid, flags, new, old
+ -> (syscall(Systimer_settime, a(flags), a(new), a(old)) : int)
+}
+const timer_gettime = {timerid, setting
+ -> (syscall(Systimer_gettime, a(setting)) : int)
+}
+const timer_getoverrun = {timerid
+ -> (syscall(Systimer_getoverrun) : int)
+}
+const timer_delete = {timerid
+ -> (syscall(Systimer_delete) : int)
+}
+const clock_nanosleep = {which, flags, rqtp, rmtp
+ -> (syscall(Sysclock_nanosleep, a(flags), a(rqtp), a(rmtp)) : int)
+}
+const epoll_wait = {epfd, events, maxevents, timeout
+ -> (syscall(Sysepoll_wait, a(events), a(maxevents), a(timeout)) : int)
+}
+const epoll_ctl = {epfd, op, fd, event
+ -> (syscall(Sysepoll_ctl, a(op), a(fd), a(event)) : int)
+}
+const tgkill = {tgid, pid, sig
+ -> (syscall(Systgkill, a(pid), a(sig)) : int)
+}
+const utimes = {fname, tptr
+ -> (syscall(Sysutimes, a(tptr)) : int)
+}
+const mbind = {
+ -> (syscall(Sysmbind) : int)
+}
+const set_mempolicy = {
+ -> (syscall(Sysset_mempolicy) : int)
+}
+const get_mempolicy = {
+ -> (syscall(Sysget_mempolicy) : int)
+}
+const mq_open = {
+ -> (syscall(Sysmq_open) : int)
+}
+const mq_unlink = {
+ -> (syscall(Sysmq_unlink) : int)
+}
+const mq_timedsend = {
+ -> (syscall(Sysmq_timedsend) : int)
+}
+const mq_timedreceive = {
+ -> (syscall(Sysmq_timedreceive) : int)
+}
+const mq_notify = {
+ -> (syscall(Sysmq_notify) : int)
+}
+const mq_getsetattr = {
+ -> (syscall(Sysmq_getsetattr) : int)
+}
+const kexec_load = {
+ -> (syscall(Syskexec_load) : int)
+}
+const waitid = {idtype, id, info, options, rusage
+ -> (syscall(Syswaitid, a(id), a(info), a(options), a(rusage)) : int)
+}
+const add_key = {
+ -> (syscall(Sysadd_key) : int)
+}
+const request_key = {
+ -> (syscall(Sysrequest_key) : int)
+}
+const keyctl = {
+ -> (syscall(Syskeyctl) : int)
+}
+const ioprio_set = {
+ -> (syscall(Sysioprio_set) : int)
+}
+const ioprio_get = {
+ -> (syscall(Sysioprio_get) : int)
+}
+const inotify_init = {
+ -> (syscall(Sysinotify_init) : int)
+}
+const inotify_add_watch = {
+ -> (syscall(Sysinotify_add_watch) : int)
+}
+const inotify_rm_watch = {
+ -> (syscall(Sysinotify_rm_watch) : int)
+}
+const migrate_pages = {
+ -> (syscall(Sysmigrate_pages) : int)
+}
+const openat = {dfd, filename, flags, mode
+ -> (syscall(Sysopenat, a(filename), a(flags), a(mode)) : int)
+}
+const mkdirat = {dfd, pathname, mode
+ -> (syscall(Sysmkdirat, a(pathname), a(mode)) : int)
+}
+const mknodat = {dfd, filename, mode, dev
+ -> (syscall(Sysmknodat, a(filename), a(mode), a(dev)) : int)
+}
+const fchownat = {dfd, filename, uid, gid, flag
+ -> (syscall(Sysfchownat, a(filename), a(uid), a(gid), a(flag)) : int)
+}
+const futimesat = {dfd, filename, utimes
+ -> (syscall(Sysfutimesat, a(filename), a(utimes)) : int)
+}
+const fstatat = {dfd, pathname, statbuf, flag
+ -> (syscall(Sysfstatat, a(pathname), a(statbuf), a(flag)) : int)
+}
+const unlinkat = {dfd, pathname, flag
+ -> (syscall(Sysunlinkat, a(pathname), a(flag)) : int)
+}
+const renameat = {olddfd, oldname, newdfd, newname
+ -> (syscall(Sysrenameat, a(oldname), a(newdfd), a(newname)) : int)
+}
+const linkat = {olddfd, oldname, newdfd, newname, flag
+ -> (syscall(Syslinkat, a(oldname), a(newdfd), a(newname), a(flag)) : int)
+}
+const symlinkat = {oldname, newdfd, newname
+ -> (syscall(Syssymlinkat, a(newdfd), a(newname)) : int)
+}
+const readlinkat = {dfd, path, buf, bufsiz
+ -> (syscall(Sysreadlinkat, a(path), a(buf), a(bufsiz)) : int)
+}
+const fchmodat = {dfd, filename, mode
+ -> (syscall(Sysfchmodat, a(filename), a(mode)) : int)
+}
+const faccessat = {dfd, filename, amode
+ -> (syscall(Sysfaccessat, a(filename), a(amode)) : int)
+}
+const pselect6 = {nfds, readfds, writefds, exceptfds, tsp, sig
+ -> (syscall(Syspselect6, a(readfds), a(writefds), a(exceptfds), a(tsp), a(sig)) : int)
+}
+const ppoll = {fds, nfds, tsp, sset, ssize
+ -> (syscall(Sysppoll, a(nfds), a(tsp), a(sset), a(ssize)) : int)
+}
+const unshare = {
+ -> (syscall(Sysunshare) : int)
+}
+const set_robust_list = {head, len
+ -> (syscall(Sysset_robust_list, a(len)) : int)
+}
+const get_robust_list = {pid, head, len
+ -> (syscall(Sysget_robust_list, a(head), a(len)) : int)
+}
+const splice = {
+ -> (syscall(Syssplice) : int)
+}
+const tee = {
+ -> (syscall(Systee) : int)
+}
+const sync_file_range = {
+ -> (syscall(Syssync_file_range) : int)
+}
+const vmsplice = {
+ -> (syscall(Sysvmsplice) : int)
+}
+const move_pages = {
+ -> (syscall(Sysmove_pages) : int)
+}
+const utimensat = {dfd, pathname, times, flags
+ -> (syscall(Sysutimensat, a(pathname), a(times), a(flags)) : int)
+}
+const epoll_pwait = {epfd, events, maxevents, timeout, mask
+ -> (syscall(Sysepoll_pwait, a(events), a(maxevents), a(timeout), a(mask)) : int)
+}
+const signalfd = {
+ -> (syscall(Syssignalfd) : int)
+}
+const timerfd = {
+ -> (syscall(Systimerfd) : int)
+}
+const eventfd = {initval
+ -> (syscall(Syseventfd) : int)
+}
+const timerfd_settime = {
+ -> (syscall(Systimerfd_settime) : int)
+}
+const timerfd_gettime = {
+ -> (syscall(Systimerfd_gettime) : int)
+}
+const accept4 = {s, addr, namelen, flags
+ -> (syscall(Sysaccept4, a(addr), a(namelen), a(flags)) : int)
+}
+const signalfd4 = {
+ -> (syscall(Syssignalfd4) : int)
+}
+const eventfd2 = {initval, flags
+ -> (syscall(Syseventfd2, a(flags)) : int)
+}
+const epoll_create1 = {flags
+ -> (syscall(Sysepoll_create1) : int)
+}
+const dup3 = {oldfd, newfd, flags
+ -> (syscall(Sysdup3, a(newfd), a(flags)) : int)
+}
+const pipe2 = {pipefds, flags
+ -> (syscall(Syspipe2, a(flags)) : int)
+}
+const inotify_init1 = {
+ -> (syscall(Sysinotify_init1) : int)
+}
+const preadv = {
+ -> (syscall(Syspreadv) : int)
+}
+const pwritev = {
+ -> (syscall(Syspwritev) : int)
+}
+const rt_tsigqueueinfo = {
+ -> (syscall(Sysrt_tsigqueueinfo) : int)
+}
+const perf_event_open = {
+ -> (syscall(Sysperf_event_open) : int)
+}
+const recvmmsg = {s, msg, vlen, flags, timeout
+ -> (syscall(Sysrecvmmsg, a(msg), a(vlen), a(flags), a(timeout)) : int)
+}
+const fanotify_init = {
+ -> (syscall(Sysfanotify_init) : int)
+}
+const fanotify_mark = {
+ -> (syscall(Sysfanotify_mark) : int)
+}
+const prlimit64 = {pid, resource, new, old
+ -> (syscall(Sysprlimit64, a(resource), a(new), a(old)) : int)
+}
+const name_to_handle_at = {
+ -> (syscall(Sysname_to_handle_at) : int)
+}
+const open_by_handle_at = {
+ -> (syscall(Sysopen_by_handle_at) : int)
+}
+const clock_adjtime = {
+ -> (syscall(Sysclock_adjtime) : int)
+}
+const syncfs = {fd
+ -> (syscall(Syssyncfs) : int)
+}
+const sendmmsg = {s, msg, vlen, flags
+ -> (syscall(Syssendmmsg, a(msg), a(vlen), a(flags)) : int)
+}
+const setns = {
+ -> (syscall(Syssetns) : int)
+}
+const process_vm_readv = {
+ -> (syscall(Sysprocess_vm_readv) : int)
+}
+const process_vm_writev = {
+ -> (syscall(Sysprocess_vm_writev) : int)
+}
+const kcmp = {
+ -> (syscall(Syskcmp) : int)
+}
+const finit_module = {
+ -> (syscall(Sysfinit_module) : int)
}