1/*
2 * Generated from gen_syscall_emulator.pl
3 */
4#include <sys/syscall.h>
5#include <stdarg.h>
6#include <errno.h>
7#include <sys/socket.h>
8#include <sys/event.h>
9#include <sys/futex.h>
10#include <sys/ioctl.h>
11#include <sys/ktrace.h>
12#include <sys/mman.h>
13#include <sys/mount.h>
14#include <sys/msg.h>
15#include <sys/poll.h>
16#include <sys/ptrace.h>
17#include <sys/resource.h>
18#include <sys/select.h>
19#include <sys/sem.h>
20#include <sys/shm.h>
21#include <sys/stat.h>
22#include <sys/sysctl.h>
23#include <sys/time.h>
24#include <sys/uio.h>
25#include <sys/wait.h>
26#include <dirent.h>
27#include <fcntl.h>
28#include <sched.h>
29#include <signal.h>
30#include <stdlib.h>
31#include <stdio.h>
32#include <syslog.h>
33#include <tib.h>
34#include <time.h>
35#include <unistd.h>
36#include "syscall_emulator.h"
37
38long
39syscall_emulator(int syscall, ...)
40{
41	long ret = 0;
42	va_list args;
43	va_start(args, syscall);
44
45	switch(syscall) {
46	/* Indirect syscalls not supported
47	 *case SYS_syscall:
48	 *	ret = syscall(int, ...);
49	 *	break;
50	 */
51	case SYS_exit:
52		exit(va_arg(args, int)); // rval
53		break;
54	case SYS_fork:
55		ret = fork();
56		break;
57	case SYS_read: {
58		int fd = (int)va_arg(args, long);
59		void * buf = (void *)va_arg(args, long);
60		size_t nbyte = (size_t)va_arg(args, long);
61		ret = read(fd, buf, nbyte);
62		break;
63	}
64	case SYS_write: {
65		int fd = (int)va_arg(args, long);
66		const void * buf = (const void *)va_arg(args, long);
67		size_t nbyte = (size_t)va_arg(args, long);
68		ret = write(fd, buf, nbyte);
69		break;
70	}
71	case SYS_open: {
72		const char * path = (const char *)va_arg(args, long);
73		int flags = (int)va_arg(args, long);
74		mode_t mode = (mode_t)va_arg(args, long);
75		ret = open(path, flags, mode);
76		break;
77	}
78	case SYS_close:
79		ret = close(va_arg(args, int)); // fd
80		break;
81	case SYS_getentropy: {
82		void * buf = (void *)va_arg(args, long);
83		size_t nbyte = (size_t)va_arg(args, long);
84		ret = getentropy(buf, nbyte);
85		break;
86	}
87	/* No signature found in headers
88	 *case SYS___tfork: {
89	 *	const struct __tfork * param = (const struct __tfork *)va_arg(args, long);
90	 *	size_t psize = (size_t)va_arg(args, long);
91	 *	ret = __tfork(param, psize);
92	 *	break;
93	 *}
94	 */
95	case SYS_link: {
96		const char * path = (const char *)va_arg(args, long);
97		const char * _link = (const char *)va_arg(args, long);
98		ret = link(path, _link);
99		break;
100	}
101	case SYS_unlink:
102		ret = unlink(va_arg(args, const char *)); // path
103		break;
104	case SYS_wait4: {
105		pid_t pid = (pid_t)va_arg(args, long);
106		int * status = (int *)va_arg(args, long);
107		int options = (int)va_arg(args, long);
108		struct rusage * rusage = (struct rusage *)va_arg(args, long);
109		ret = wait4(pid, status, options, rusage);
110		break;
111	}
112	case SYS_chdir:
113		ret = chdir(va_arg(args, const char *)); // path
114		break;
115	case SYS_fchdir:
116		ret = fchdir(va_arg(args, int)); // fd
117		break;
118	case SYS_mknod: {
119		const char * path = (const char *)va_arg(args, long);
120		mode_t mode = (mode_t)va_arg(args, long);
121		dev_t dev = (dev_t)va_arg(args, long);
122		ret = mknod(path, mode, dev);
123		break;
124	}
125	case SYS_chmod: {
126		const char * path = (const char *)va_arg(args, long);
127		mode_t mode = (mode_t)va_arg(args, long);
128		ret = chmod(path, mode);
129		break;
130	}
131	case SYS_chown: {
132		const char * path = (const char *)va_arg(args, long);
133		uid_t uid = (uid_t)va_arg(args, long);
134		gid_t gid = (gid_t)va_arg(args, long);
135		ret = chown(path, uid, gid);
136		break;
137	}
138	/* No signature found in headers
139	 *case SYS_break:
140	 *	ret = break(char *);
141	 *	break;
142	 */
143	case SYS_getdtablecount:
144		ret = getdtablecount();
145		break;
146	case SYS_getrusage: {
147		int who = (int)va_arg(args, long);
148		struct rusage * rusage = (struct rusage *)va_arg(args, long);
149		ret = getrusage(who, rusage);
150		break;
151	}
152	case SYS_getpid:
153		ret = getpid();
154		break;
155	case SYS_mount: {
156		const char * type = (const char *)va_arg(args, long);
157		const char * path = (const char *)va_arg(args, long);
158		int flags = (int)va_arg(args, long);
159		void * data = (void *)va_arg(args, long);
160		ret = mount(type, path, flags, data);
161		break;
162	}
163	case SYS_unmount: {
164		const char * path = (const char *)va_arg(args, long);
165		int flags = (int)va_arg(args, long);
166		ret = unmount(path, flags);
167		break;
168	}
169	case SYS_setuid:
170		ret = setuid(va_arg(args, uid_t)); // uid
171		break;
172	case SYS_getuid:
173		ret = getuid();
174		break;
175	case SYS_geteuid:
176		ret = geteuid();
177		break;
178	case SYS_ptrace: {
179		int req = (int)va_arg(args, long);
180		pid_t pid = (pid_t)va_arg(args, long);
181		caddr_t addr = (caddr_t)va_arg(args, long);
182		int data = (int)va_arg(args, long);
183		ret = ptrace(req, pid, addr, data);
184		break;
185	}
186	case SYS_recvmsg: {
187		int s = (int)va_arg(args, long);
188		struct msghdr * msg = (struct msghdr *)va_arg(args, long);
189		int flags = (int)va_arg(args, long);
190		ret = recvmsg(s, msg, flags);
191		break;
192	}
193	case SYS_sendmsg: {
194		int s = (int)va_arg(args, long);
195		const struct msghdr * msg = (const struct msghdr *)va_arg(args, long);
196		int flags = (int)va_arg(args, long);
197		ret = sendmsg(s, msg, flags);
198		break;
199	}
200	case SYS_recvfrom: {
201		int s = (int)va_arg(args, long);
202		void * buf = (void *)va_arg(args, long);
203		size_t len = (size_t)va_arg(args, long);
204		int flags = (int)va_arg(args, long);
205		struct sockaddr * from = (struct sockaddr *)va_arg(args, long);
206		socklen_t * fromlenaddr = (socklen_t *)va_arg(args, long);
207		ret = recvfrom(s, buf, len, flags, from, fromlenaddr);
208		break;
209	}
210	case SYS_accept: {
211		int s = (int)va_arg(args, long);
212		struct sockaddr * name = (struct sockaddr *)va_arg(args, long);
213		socklen_t * anamelen = (socklen_t *)va_arg(args, long);
214		ret = accept(s, name, anamelen);
215		break;
216	}
217	case SYS_getpeername: {
218		int fdes = (int)va_arg(args, long);
219		struct sockaddr * asa = (struct sockaddr *)va_arg(args, long);
220		socklen_t * alen = (socklen_t *)va_arg(args, long);
221		ret = getpeername(fdes, asa, alen);
222		break;
223	}
224	case SYS_getsockname: {
225		int fdes = (int)va_arg(args, long);
226		struct sockaddr * asa = (struct sockaddr *)va_arg(args, long);
227		socklen_t * alen = (socklen_t *)va_arg(args, long);
228		ret = getsockname(fdes, asa, alen);
229		break;
230	}
231	case SYS_access: {
232		const char * path = (const char *)va_arg(args, long);
233		int amode = (int)va_arg(args, long);
234		ret = access(path, amode);
235		break;
236	}
237	case SYS_chflags: {
238		const char * path = (const char *)va_arg(args, long);
239		u_int flags = (u_int)va_arg(args, long);
240		ret = chflags(path, flags);
241		break;
242	}
243	case SYS_fchflags: {
244		int fd = (int)va_arg(args, long);
245		u_int flags = (u_int)va_arg(args, long);
246		ret = fchflags(fd, flags);
247		break;
248	}
249	case SYS_sync:
250		sync();
251		break;
252	/* No signature found in headers
253	 *case SYS_msyscall: {
254	 *	void * addr = (void *)va_arg(args, long);
255	 *	size_t len = (size_t)va_arg(args, long);
256	 *	ret = msyscall(addr, len);
257	 *	break;
258	 *}
259	 */
260	case SYS_stat: {
261		const char * path = (const char *)va_arg(args, long);
262		struct stat * ub = (struct stat *)va_arg(args, long);
263		ret = stat(path, ub);
264		break;
265	}
266	case SYS_getppid:
267		ret = getppid();
268		break;
269	case SYS_lstat: {
270		const char * path = (const char *)va_arg(args, long);
271		struct stat * ub = (struct stat *)va_arg(args, long);
272		ret = lstat(path, ub);
273		break;
274	}
275	case SYS_dup:
276		ret = dup(va_arg(args, int)); // fd
277		break;
278	case SYS_fstatat: {
279		int fd = (int)va_arg(args, long);
280		const char * path = (const char *)va_arg(args, long);
281		struct stat * buf = (struct stat *)va_arg(args, long);
282		int flag = (int)va_arg(args, long);
283		ret = fstatat(fd, path, buf, flag);
284		break;
285	}
286	case SYS_getegid:
287		ret = getegid();
288		break;
289	case SYS_profil: {
290		caddr_t samples = (caddr_t)va_arg(args, long);
291		size_t size = (size_t)va_arg(args, long);
292		u_long offset = (u_long)va_arg(args, long);
293		u_int scale = (u_int)va_arg(args, long);
294		ret = profil(samples, size, offset, scale);
295		break;
296	}
297	case SYS_ktrace: {
298		const char * fname = (const char *)va_arg(args, long);
299		int ops = (int)va_arg(args, long);
300		int facs = (int)va_arg(args, long);
301		pid_t pid = (pid_t)va_arg(args, long);
302		ret = ktrace(fname, ops, facs, pid);
303		break;
304	}
305	case SYS_sigaction: {
306		int signum = (int)va_arg(args, long);
307		const struct sigaction * nsa = (const struct sigaction *)va_arg(args, long);
308		struct sigaction * osa = (struct sigaction *)va_arg(args, long);
309		ret = sigaction(signum, nsa, osa);
310		break;
311	}
312	case SYS_getgid:
313		ret = getgid();
314		break;
315	/* Mismatched func: int sigprocmask(int, const sigset_t *, sigset_t *); <signal.h>
316	 *                  int sigprocmask(int, sigset_t); <sys/syscall.h>
317	 *case SYS_sigprocmask: {
318	 *	int how = (int)va_arg(args, long);
319	 *	sigset_t mask = (sigset_t)va_arg(args, long);
320	 *	ret = sigprocmask(how, mask);
321	 *	break;
322	 *}
323	 */
324	case SYS_mmap: {
325		void * addr = (void *)va_arg(args, long);
326		size_t len = (size_t)va_arg(args, long);
327		int prot = (int)va_arg(args, long);
328		int flags = (int)va_arg(args, long);
329		int fd = (int)va_arg(args, long);
330		off_t pos = (off_t)va_arg(args, long);
331		ret = (long)mmap(addr, len, prot, flags, fd, pos);
332		break;
333	}
334	case SYS_setlogin:
335		ret = setlogin(va_arg(args, const char *)); // namebuf
336		break;
337	case SYS_acct:
338		ret = acct(va_arg(args, const char *)); // path
339		break;
340	/* Mismatched func: int sigpending(sigset_t *); <signal.h>
341	 *                  int sigpending(void); <sys/syscall.h>
342	 *case SYS_sigpending:
343	 *	ret = sigpending();
344	 *	break;
345	 */
346	case SYS_fstat: {
347		int fd = (int)va_arg(args, long);
348		struct stat * sb = (struct stat *)va_arg(args, long);
349		ret = fstat(fd, sb);
350		break;
351	}
352	case SYS_ioctl: {
353		int fd = (int)va_arg(args, long);
354		u_long com = (u_long)va_arg(args, long);
355		void * data = (void *)va_arg(args, long);
356		ret = ioctl(fd, com, data);
357		break;
358	}
359	case SYS_reboot:
360		ret = reboot(va_arg(args, int)); // opt
361		break;
362	case SYS_revoke:
363		ret = revoke(va_arg(args, const char *)); // path
364		break;
365	case SYS_symlink: {
366		const char * path = (const char *)va_arg(args, long);
367		const char * link = (const char *)va_arg(args, long);
368		ret = symlink(path, link);
369		break;
370	}
371	case SYS_readlink: {
372		const char * path = (const char *)va_arg(args, long);
373		char * buf = (char *)va_arg(args, long);
374		size_t count = (size_t)va_arg(args, long);
375		ret = readlink(path, buf, count);
376		break;
377	}
378	case SYS_execve: {
379		const char * path = (const char *)va_arg(args, long);
380		char *const * argp = (char *const *)va_arg(args, long);
381		char *const * envp = (char *const *)va_arg(args, long);
382		ret = execve(path, argp, envp);
383		break;
384	}
385	case SYS_umask:
386		ret = umask(va_arg(args, mode_t)); // newmask
387		break;
388	case SYS_chroot:
389		ret = chroot(va_arg(args, const char *)); // path
390		break;
391	case SYS_getfsstat: {
392		struct statfs * buf = (struct statfs *)va_arg(args, long);
393		size_t bufsize = (size_t)va_arg(args, long);
394		int flags = (int)va_arg(args, long);
395		ret = getfsstat(buf, bufsize, flags);
396		break;
397	}
398	case SYS_statfs: {
399		const char * path = (const char *)va_arg(args, long);
400		struct statfs * buf = (struct statfs *)va_arg(args, long);
401		ret = statfs(path, buf);
402		break;
403	}
404	case SYS_fstatfs: {
405		int fd = (int)va_arg(args, long);
406		struct statfs * buf = (struct statfs *)va_arg(args, long);
407		ret = fstatfs(fd, buf);
408		break;
409	}
410	case SYS_fhstatfs: {
411		const fhandle_t * fhp = (const fhandle_t *)va_arg(args, long);
412		struct statfs * buf = (struct statfs *)va_arg(args, long);
413		ret = fhstatfs(fhp, buf);
414		break;
415	}
416	case SYS_vfork:
417		ret = vfork();
418		break;
419	case SYS_gettimeofday: {
420		struct timeval * tp = (struct timeval *)va_arg(args, long);
421		struct timezone * tzp = (struct timezone *)va_arg(args, long);
422		ret = gettimeofday(tp, tzp);
423		break;
424	}
425	case SYS_settimeofday: {
426		const struct timeval * tv = (const struct timeval *)va_arg(args, long);
427		const struct timezone * tzp = (const struct timezone *)va_arg(args, long);
428		ret = settimeofday(tv, tzp);
429		break;
430	}
431	case SYS_setitimer: {
432		int which = (int)va_arg(args, long);
433		const struct itimerval * itv = (const struct itimerval *)va_arg(args, long);
434		struct itimerval * oitv = (struct itimerval *)va_arg(args, long);
435		ret = setitimer(which, itv, oitv);
436		break;
437	}
438	case SYS_getitimer: {
439		int which = (int)va_arg(args, long);
440		struct itimerval * itv = (struct itimerval *)va_arg(args, long);
441		ret = getitimer(which, itv);
442		break;
443	}
444	case SYS_select: {
445		int nd = (int)va_arg(args, long);
446		fd_set * in = (fd_set *)va_arg(args, long);
447		fd_set * ou = (fd_set *)va_arg(args, long);
448		fd_set * ex = (fd_set *)va_arg(args, long);
449		struct timeval * tv = (struct timeval *)va_arg(args, long);
450		ret = select(nd, in, ou, ex, tv);
451		break;
452	}
453	case SYS_kevent: {
454		int fd = (int)va_arg(args, long);
455		const struct kevent * changelist = (const struct kevent *)va_arg(args, long);
456		int nchanges = (int)va_arg(args, long);
457		struct kevent * eventlist = (struct kevent *)va_arg(args, long);
458		int nevents = (int)va_arg(args, long);
459		const struct timespec * timeout = (const struct timespec *)va_arg(args, long);
460		ret = kevent(fd, changelist, nchanges, eventlist, nevents, timeout);
461		break;
462	}
463	case SYS_munmap: {
464		void * addr = (void *)va_arg(args, long);
465		size_t len = (size_t)va_arg(args, long);
466		ret = munmap(addr, len);
467		break;
468	}
469	case SYS_mprotect: {
470		void * addr = (void *)va_arg(args, long);
471		size_t len = (size_t)va_arg(args, long);
472		int prot = (int)va_arg(args, long);
473		ret = mprotect(addr, len, prot);
474		break;
475	}
476	case SYS_madvise: {
477		void * addr = (void *)va_arg(args, long);
478		size_t len = (size_t)va_arg(args, long);
479		int behav = (int)va_arg(args, long);
480		ret = madvise(addr, len, behav);
481		break;
482	}
483	case SYS_utimes: {
484		const char * path = (const char *)va_arg(args, long);
485		const struct timeval * tptr = (const struct timeval *)va_arg(args, long);
486		ret = utimes(path, tptr);
487		break;
488	}
489	case SYS_futimes: {
490		int fd = (int)va_arg(args, long);
491		const struct timeval * tptr = (const struct timeval *)va_arg(args, long);
492		ret = futimes(fd, tptr);
493		break;
494	}
495	case SYS_mquery: {
496		void * addr = (void *)va_arg(args, long);
497		size_t len = (size_t)va_arg(args, long);
498		int prot = (int)va_arg(args, long);
499		int flags = (int)va_arg(args, long);
500		int fd = (int)va_arg(args, long);
501		off_t pos = (off_t)va_arg(args, long);
502		ret = (long)mquery(addr, len, prot, flags, fd, pos);
503		break;
504	}
505	case SYS_getgroups: {
506		int gidsetsize = (int)va_arg(args, long);
507		gid_t * gidset = (gid_t *)va_arg(args, long);
508		ret = getgroups(gidsetsize, gidset);
509		break;
510	}
511	case SYS_setgroups: {
512		int gidsetsize = (int)va_arg(args, long);
513		const gid_t * gidset = (const gid_t *)va_arg(args, long);
514		ret = setgroups(gidsetsize, gidset);
515		break;
516	}
517	case SYS_getpgrp:
518		ret = getpgrp();
519		break;
520	case SYS_setpgid: {
521		pid_t pid = (pid_t)va_arg(args, long);
522		pid_t pgid = (pid_t)va_arg(args, long);
523		ret = setpgid(pid, pgid);
524		break;
525	}
526	case SYS_futex: {
527		uint32_t * f = (uint32_t *)va_arg(args, long);
528		int op = (int)va_arg(args, long);
529		int val = (int)va_arg(args, long);
530		const struct timespec * timeout = (const struct timespec *)va_arg(args, long);
531		uint32_t * g = (uint32_t *)va_arg(args, long);
532		ret = futex(f, op, val, timeout, g);
533		break;
534	}
535	case SYS_utimensat: {
536		int fd = (int)va_arg(args, long);
537		const char * path = (const char *)va_arg(args, long);
538		const struct timespec * times = (const struct timespec *)va_arg(args, long);
539		int flag = (int)va_arg(args, long);
540		ret = utimensat(fd, path, times, flag);
541		break;
542	}
543	case SYS_futimens: {
544		int fd = (int)va_arg(args, long);
545		const struct timespec * times = (const struct timespec *)va_arg(args, long);
546		ret = futimens(fd, times);
547		break;
548	}
549	/* No signature found in headers
550	 *case SYS_kbind: {
551	 *	const struct __kbind * param = (const struct __kbind *)va_arg(args, long);
552	 *	size_t psize = (size_t)va_arg(args, long);
553	 *	int64_t proc_cookie = (int64_t)va_arg(args, long);
554	 *	ret = kbind(param, psize, proc_cookie);
555	 *	break;
556	 *}
557	 */
558	case SYS_clock_gettime: {
559		clockid_t clock_id = (clockid_t)va_arg(args, long);
560		struct timespec * tp = (struct timespec *)va_arg(args, long);
561		ret = clock_gettime(clock_id, tp);
562		break;
563	}
564	case SYS_clock_settime: {
565		clockid_t clock_id = (clockid_t)va_arg(args, long);
566		const struct timespec * tp = (const struct timespec *)va_arg(args, long);
567		ret = clock_settime(clock_id, tp);
568		break;
569	}
570	case SYS_clock_getres: {
571		clockid_t clock_id = (clockid_t)va_arg(args, long);
572		struct timespec * tp = (struct timespec *)va_arg(args, long);
573		ret = clock_getres(clock_id, tp);
574		break;
575	}
576	case SYS_dup2: {
577		int from = (int)va_arg(args, long);
578		int to = (int)va_arg(args, long);
579		ret = dup2(from, to);
580		break;
581	}
582	case SYS_nanosleep: {
583		const struct timespec * rqtp = (const struct timespec *)va_arg(args, long);
584		struct timespec * rmtp = (struct timespec *)va_arg(args, long);
585		ret = nanosleep(rqtp, rmtp);
586		break;
587	}
588	case SYS_fcntl: {
589		int fd = (int)va_arg(args, long);
590		int cmd = (int)va_arg(args, long);
591		void * arg = (void *)va_arg(args, long);
592		ret = fcntl(fd, cmd, arg);
593		break;
594	}
595	case SYS_accept4: {
596		int s = (int)va_arg(args, long);
597		struct sockaddr * name = (struct sockaddr *)va_arg(args, long);
598		socklen_t * anamelen = (socklen_t *)va_arg(args, long);
599		int flags = (int)va_arg(args, long);
600		ret = accept4(s, name, anamelen, flags);
601		break;
602	}
603	/* No signature found in headers
604	 *case SYS___thrsleep: {
605	 *	const volatile void * ident = (const volatile void *)va_arg(args, long);
606	 *	clockid_t clock_id = (clockid_t)va_arg(args, long);
607	 *	const struct timespec * tp = (const struct timespec *)va_arg(args, long);
608	 *	void * lock = (void *)va_arg(args, long);
609	 *	const int * abort = (const int *)va_arg(args, long);
610	 *	ret = __thrsleep(ident, clock_id, tp, lock, abort);
611	 *	break;
612	 *}
613	 */
614	case SYS_fsync:
615		ret = fsync(va_arg(args, int)); // fd
616		break;
617	case SYS_setpriority: {
618		int which = (int)va_arg(args, long);
619		id_t who = (id_t)va_arg(args, long);
620		int prio = (int)va_arg(args, long);
621		ret = setpriority(which, who, prio);
622		break;
623	}
624	case SYS_socket: {
625		int domain = (int)va_arg(args, long);
626		int type = (int)va_arg(args, long);
627		int protocol = (int)va_arg(args, long);
628		ret = socket(domain, type, protocol);
629		break;
630	}
631	case SYS_connect: {
632		int s = (int)va_arg(args, long);
633		const struct sockaddr * name = (const struct sockaddr *)va_arg(args, long);
634		socklen_t namelen = (socklen_t)va_arg(args, long);
635		ret = connect(s, name, namelen);
636		break;
637	}
638	case SYS_getdents: {
639		int fd = (int)va_arg(args, long);
640		void * buf = (void *)va_arg(args, long);
641		size_t buflen = (size_t)va_arg(args, long);
642		ret = getdents(fd, buf, buflen);
643		break;
644	}
645	case SYS_getpriority: {
646		int which = (int)va_arg(args, long);
647		id_t who = (id_t)va_arg(args, long);
648		ret = getpriority(which, who);
649		break;
650	}
651	case SYS_pipe2: {
652		int * fdp = (int *)va_arg(args, long);
653		int flags = (int)va_arg(args, long);
654		ret = pipe2(fdp, flags);
655		break;
656	}
657	case SYS_dup3: {
658		int from = (int)va_arg(args, long);
659		int to = (int)va_arg(args, long);
660		int flags = (int)va_arg(args, long);
661		ret = dup3(from, to, flags);
662		break;
663	}
664	/* No signature found in headers
665	 *case SYS_sigreturn:
666	 *	ret = sigreturn(va_arg(args, struct sigcontext *)); // sigcntxp
667	 *	break;
668	 */
669	case SYS_bind: {
670		int s = (int)va_arg(args, long);
671		const struct sockaddr * name = (const struct sockaddr *)va_arg(args, long);
672		socklen_t namelen = (socklen_t)va_arg(args, long);
673		ret = bind(s, name, namelen);
674		break;
675	}
676	case SYS_setsockopt: {
677		int s = (int)va_arg(args, long);
678		int level = (int)va_arg(args, long);
679		int name = (int)va_arg(args, long);
680		const void * val = (const void *)va_arg(args, long);
681		socklen_t valsize = (socklen_t)va_arg(args, long);
682		ret = setsockopt(s, level, name, val, valsize);
683		break;
684	}
685	case SYS_listen: {
686		int s = (int)va_arg(args, long);
687		int backlog = (int)va_arg(args, long);
688		ret = listen(s, backlog);
689		break;
690	}
691	case SYS_chflagsat: {
692		int fd = (int)va_arg(args, long);
693		const char * path = (const char *)va_arg(args, long);
694		u_int flags = (u_int)va_arg(args, long);
695		int atflags = (int)va_arg(args, long);
696		ret = chflagsat(fd, path, flags, atflags);
697		break;
698	}
699	case SYS_pledge: {
700		const char * promises = (const char *)va_arg(args, long);
701		const char * execpromises = (const char *)va_arg(args, long);
702		ret = pledge(promises, execpromises);
703		break;
704	}
705	case SYS_ppoll: {
706		struct pollfd * fds = (struct pollfd *)va_arg(args, long);
707		u_int nfds = (u_int)va_arg(args, long);
708		const struct timespec * ts = (const struct timespec *)va_arg(args, long);
709		const sigset_t * mask = (const sigset_t *)va_arg(args, long);
710		ret = ppoll(fds, nfds, ts, mask);
711		break;
712	}
713	case SYS_pselect: {
714		int nd = (int)va_arg(args, long);
715		fd_set * in = (fd_set *)va_arg(args, long);
716		fd_set * ou = (fd_set *)va_arg(args, long);
717		fd_set * ex = (fd_set *)va_arg(args, long);
718		const struct timespec * ts = (const struct timespec *)va_arg(args, long);
719		const sigset_t * mask = (const sigset_t *)va_arg(args, long);
720		ret = pselect(nd, in, ou, ex, ts, mask);
721		break;
722	}
723	/* Mismatched func: int sigsuspend(const sigset_t *); <signal.h>
724	 *                  int sigsuspend(int); <sys/syscall.h>
725	 *case SYS_sigsuspend:
726	 *	ret = sigsuspend(va_arg(args, int)); // mask
727	 *	break;
728	 */
729	case SYS_sendsyslog: {
730		const char * buf = (const char *)va_arg(args, long);
731		size_t nbyte = (size_t)va_arg(args, long);
732		int flags = (int)va_arg(args, long);
733		ret = sendsyslog(buf, nbyte, flags);
734		break;
735	}
736	case SYS_unveil: {
737		const char * path = (const char *)va_arg(args, long);
738		const char * permissions = (const char *)va_arg(args, long);
739		ret = unveil(path, permissions);
740		break;
741	}
742	/* No signature found in headers
743	 *case SYS___realpath: {
744	 *	const char * pathname = (const char *)va_arg(args, long);
745	 *	char * resolved = (char *)va_arg(args, long);
746	 *	ret = __realpath(pathname, resolved);
747	 *	break;
748	 *}
749	 */
750	case SYS_recvmmsg: {
751		int s = (int)va_arg(args, long);
752		struct mmsghdr * mmsg = (struct mmsghdr *)va_arg(args, long);
753		unsigned int vlen = (unsigned int)va_arg(args, long);
754		int flags = (int)va_arg(args, long);
755		struct timespec * timeout = (struct timespec *)va_arg(args, long);
756		ret = recvmmsg(s, mmsg, vlen, flags, timeout);
757		break;
758	}
759	case SYS_sendmmsg: {
760		int s = (int)va_arg(args, long);
761		struct mmsghdr * mmsg = (struct mmsghdr *)va_arg(args, long);
762		unsigned int vlen = (unsigned int)va_arg(args, long);
763		int flags = (int)va_arg(args, long);
764		ret = sendmmsg(s, mmsg, vlen, flags);
765		break;
766	}
767	case SYS_getsockopt: {
768		int s = (int)va_arg(args, long);
769		int level = (int)va_arg(args, long);
770		int name = (int)va_arg(args, long);
771		void * val = (void *)va_arg(args, long);
772		socklen_t * avalsize = (socklen_t *)va_arg(args, long);
773		ret = getsockopt(s, level, name, val, avalsize);
774		break;
775	}
776	case SYS_thrkill: {
777		pid_t tid = (pid_t)va_arg(args, long);
778		int signum = (int)va_arg(args, long);
779		void * tcb = (void *)va_arg(args, long);
780		ret = thrkill(tid, signum, tcb);
781		break;
782	}
783	case SYS_readv: {
784		int fd = (int)va_arg(args, long);
785		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
786		int iovcnt = (int)va_arg(args, long);
787		ret = readv(fd, iovp, iovcnt);
788		break;
789	}
790	case SYS_writev: {
791		int fd = (int)va_arg(args, long);
792		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
793		int iovcnt = (int)va_arg(args, long);
794		ret = writev(fd, iovp, iovcnt);
795		break;
796	}
797	case SYS_kill: {
798		int pid = (int)va_arg(args, long);
799		int signum = (int)va_arg(args, long);
800		ret = kill(pid, signum);
801		break;
802	}
803	case SYS_fchown: {
804		int fd = (int)va_arg(args, long);
805		uid_t uid = (uid_t)va_arg(args, long);
806		gid_t gid = (gid_t)va_arg(args, long);
807		ret = fchown(fd, uid, gid);
808		break;
809	}
810	case SYS_fchmod: {
811		int fd = (int)va_arg(args, long);
812		mode_t mode = (mode_t)va_arg(args, long);
813		ret = fchmod(fd, mode);
814		break;
815	}
816	case SYS_setreuid: {
817		uid_t ruid = (uid_t)va_arg(args, long);
818		uid_t euid = (uid_t)va_arg(args, long);
819		ret = setreuid(ruid, euid);
820		break;
821	}
822	case SYS_setregid: {
823		gid_t rgid = (gid_t)va_arg(args, long);
824		gid_t egid = (gid_t)va_arg(args, long);
825		ret = setregid(rgid, egid);
826		break;
827	}
828	case SYS_rename: {
829		const char * from = (const char *)va_arg(args, long);
830		const char * to = (const char *)va_arg(args, long);
831		ret = rename(from, to);
832		break;
833	}
834	case SYS_flock: {
835		int fd = (int)va_arg(args, long);
836		int how = (int)va_arg(args, long);
837		ret = flock(fd, how);
838		break;
839	}
840	case SYS_mkfifo: {
841		const char * path = (const char *)va_arg(args, long);
842		mode_t mode = (mode_t)va_arg(args, long);
843		ret = mkfifo(path, mode);
844		break;
845	}
846	case SYS_sendto: {
847		int s = (int)va_arg(args, long);
848		const void * buf = (const void *)va_arg(args, long);
849		size_t len = (size_t)va_arg(args, long);
850		int flags = (int)va_arg(args, long);
851		const struct sockaddr * to = (const struct sockaddr *)va_arg(args, long);
852		socklen_t tolen = (socklen_t)va_arg(args, long);
853		ret = sendto(s, buf, len, flags, to, tolen);
854		break;
855	}
856	case SYS_shutdown: {
857		int s = (int)va_arg(args, long);
858		int how = (int)va_arg(args, long);
859		ret = shutdown(s, how);
860		break;
861	}
862	case SYS_socketpair: {
863		int domain = (int)va_arg(args, long);
864		int type = (int)va_arg(args, long);
865		int protocol = (int)va_arg(args, long);
866		int * rsv = (int *)va_arg(args, long);
867		ret = socketpair(domain, type, protocol, rsv);
868		break;
869	}
870	case SYS_mkdir: {
871		const char * path = (const char *)va_arg(args, long);
872		mode_t mode = (mode_t)va_arg(args, long);
873		ret = mkdir(path, mode);
874		break;
875	}
876	case SYS_rmdir:
877		ret = rmdir(va_arg(args, const char *)); // path
878		break;
879	case SYS_adjtime: {
880		const struct timeval * delta = (const struct timeval *)va_arg(args, long);
881		struct timeval * olddelta = (struct timeval *)va_arg(args, long);
882		ret = adjtime(delta, olddelta);
883		break;
884	}
885	/* Mismatched func: int getlogin_r(char *, size_t); <unistd.h>
886	 *                  int getlogin_r(char *, u_int); <sys/syscall.h>
887	 *case SYS_getlogin_r: {
888	 *	char * namebuf = (char *)va_arg(args, long);
889	 *	u_int namelen = (u_int)va_arg(args, long);
890	 *	ret = getlogin_r(namebuf, namelen);
891	 *	break;
892	 *}
893	 */
894	case SYS_getthrname: {
895		pid_t tid = (pid_t)va_arg(args, long);
896		char * name = (char *)va_arg(args, long);
897		size_t len = (size_t)va_arg(args, long);
898		ret = getthrname(tid, name, len);
899		break;
900	}
901	case SYS_setthrname: {
902		pid_t tid = (pid_t)va_arg(args, long);
903		const char * name = (const char *)va_arg(args, long);
904		ret = setthrname(tid, name);
905		break;
906	}
907	/* No signature found in headers
908	 *case SYS_pinsyscall: {
909	 *	int syscall = (int)va_arg(args, long);
910	 *	void * addr = (void *)va_arg(args, long);
911	 *	size_t len = (size_t)va_arg(args, long);
912	 *	ret = pinsyscall(syscall, addr, len);
913	 *	break;
914	 *}
915	 */
916	case SYS_setsid:
917		ret = setsid();
918		break;
919	case SYS_quotactl: {
920		const char * path = (const char *)va_arg(args, long);
921		int cmd = (int)va_arg(args, long);
922		int uid = (int)va_arg(args, long);
923		char * arg = (char *)va_arg(args, long);
924		ret = quotactl(path, cmd, uid, arg);
925		break;
926	}
927	/* No signature found in headers
928	 *case SYS_ypconnect:
929	 *	ret = ypconnect(va_arg(args, int)); // type
930	 *	break;
931	 */
932	case SYS_nfssvc: {
933		int flag = (int)va_arg(args, long);
934		void * argp = (void *)va_arg(args, long);
935		ret = nfssvc(flag, argp);
936		break;
937	}
938	case SYS_mimmutable: {
939		void * addr = (void *)va_arg(args, long);
940		size_t len = (size_t)va_arg(args, long);
941		ret = mimmutable(addr, len);
942		break;
943	}
944	case SYS_waitid: {
945		int idtype = (int)va_arg(args, long);
946		id_t id = (id_t)va_arg(args, long);
947		siginfo_t * info = (siginfo_t *)va_arg(args, long);
948		int options = (int)va_arg(args, long);
949		ret = waitid(idtype, id, info, options);
950		break;
951	}
952	case SYS_getfh: {
953		const char * fname = (const char *)va_arg(args, long);
954		fhandle_t * fhp = (fhandle_t *)va_arg(args, long);
955		ret = getfh(fname, fhp);
956		break;
957	}
958	/* No signature found in headers
959	 *case SYS___tmpfd:
960	 *	ret = __tmpfd(va_arg(args, int)); // flags
961	 *	break;
962	 */
963	/* No signature found in headers
964	 *case SYS_sysarch: {
965	 *	int op = (int)va_arg(args, long);
966	 *	void * parms = (void *)va_arg(args, long);
967	 *	ret = sysarch(op, parms);
968	 *	break;
969	 *}
970	 */
971	case SYS_lseek: {
972		int fd = (int)va_arg(args, long);
973		off_t offset = (off_t)va_arg(args, long);
974		int whence = (int)va_arg(args, long);
975		ret = lseek(fd, offset, whence);
976		break;
977	}
978	case SYS_truncate: {
979		const char * path = (const char *)va_arg(args, long);
980		off_t length = (off_t)va_arg(args, long);
981		ret = truncate(path, length);
982		break;
983	}
984	case SYS_ftruncate: {
985		int fd = (int)va_arg(args, long);
986		off_t length = (off_t)va_arg(args, long);
987		ret = ftruncate(fd, length);
988		break;
989	}
990	case SYS_pread: {
991		int fd = (int)va_arg(args, long);
992		void * buf = (void *)va_arg(args, long);
993		size_t nbyte = (size_t)va_arg(args, long);
994		off_t offset = (off_t)va_arg(args, long);
995		ret = pread(fd, buf, nbyte, offset);
996		break;
997	}
998	case SYS_pwrite: {
999		int fd = (int)va_arg(args, long);
1000		const void * buf = (const void *)va_arg(args, long);
1001		size_t nbyte = (size_t)va_arg(args, long);
1002		off_t offset = (off_t)va_arg(args, long);
1003		ret = pwrite(fd, buf, nbyte, offset);
1004		break;
1005	}
1006	case SYS_preadv: {
1007		int fd = (int)va_arg(args, long);
1008		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
1009		int iovcnt = (int)va_arg(args, long);
1010		off_t offset = (off_t)va_arg(args, long);
1011		ret = preadv(fd, iovp, iovcnt, offset);
1012		break;
1013	}
1014	case SYS_pwritev: {
1015		int fd = (int)va_arg(args, long);
1016		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
1017		int iovcnt = (int)va_arg(args, long);
1018		off_t offset = (off_t)va_arg(args, long);
1019		ret = pwritev(fd, iovp, iovcnt, offset);
1020		break;
1021	}
1022	case SYS_setgid:
1023		ret = setgid(va_arg(args, gid_t)); // gid
1024		break;
1025	case SYS_setegid:
1026		ret = setegid(va_arg(args, gid_t)); // egid
1027		break;
1028	case SYS_seteuid:
1029		ret = seteuid(va_arg(args, uid_t)); // euid
1030		break;
1031	case SYS_pathconf: {
1032		const char * path = (const char *)va_arg(args, long);
1033		int name = (int)va_arg(args, long);
1034		ret = pathconf(path, name);
1035		break;
1036	}
1037	case SYS_fpathconf: {
1038		int fd = (int)va_arg(args, long);
1039		int name = (int)va_arg(args, long);
1040		ret = fpathconf(fd, name);
1041		break;
1042	}
1043	case SYS_swapctl: {
1044		int cmd = (int)va_arg(args, long);
1045		const void * arg = (const void *)va_arg(args, long);
1046		int misc = (int)va_arg(args, long);
1047		ret = swapctl(cmd, arg, misc);
1048		break;
1049	}
1050	case SYS_getrlimit: {
1051		int which = (int)va_arg(args, long);
1052		struct rlimit * rlp = (struct rlimit *)va_arg(args, long);
1053		ret = getrlimit(which, rlp);
1054		break;
1055	}
1056	case SYS_setrlimit: {
1057		int which = (int)va_arg(args, long);
1058		const struct rlimit * rlp = (const struct rlimit *)va_arg(args, long);
1059		ret = setrlimit(which, rlp);
1060		break;
1061	}
1062	case SYS_sysctl: {
1063		const int * name = (const int *)va_arg(args, long);
1064		u_int namelen = (u_int)va_arg(args, long);
1065		void * old = (void *)va_arg(args, long);
1066		size_t * oldlenp = (size_t *)va_arg(args, long);
1067		void * new = (void *)va_arg(args, long);
1068		size_t newlen = (size_t)va_arg(args, long);
1069		ret = sysctl(name, namelen, old, oldlenp, new, newlen);
1070		break;
1071	}
1072	case SYS_mlock: {
1073		const void * addr = (const void *)va_arg(args, long);
1074		size_t len = (size_t)va_arg(args, long);
1075		ret = mlock(addr, len);
1076		break;
1077	}
1078	case SYS_munlock: {
1079		const void * addr = (const void *)va_arg(args, long);
1080		size_t len = (size_t)va_arg(args, long);
1081		ret = munlock(addr, len);
1082		break;
1083	}
1084	case SYS_getpgid:
1085		ret = getpgid(va_arg(args, pid_t)); // pid
1086		break;
1087	case SYS_utrace: {
1088		const char * label = (const char *)va_arg(args, long);
1089		const void * addr = (const void *)va_arg(args, long);
1090		size_t len = (size_t)va_arg(args, long);
1091		ret = utrace(label, addr, len);
1092		break;
1093	}
1094	case SYS_semget: {
1095		key_t key = (key_t)va_arg(args, long);
1096		int nsems = (int)va_arg(args, long);
1097		int semflg = (int)va_arg(args, long);
1098		ret = semget(key, nsems, semflg);
1099		break;
1100	}
1101	case SYS_msgget: {
1102		key_t key = (key_t)va_arg(args, long);
1103		int msgflg = (int)va_arg(args, long);
1104		ret = msgget(key, msgflg);
1105		break;
1106	}
1107	case SYS_msgsnd: {
1108		int msqid = (int)va_arg(args, long);
1109		const void * msgp = (const void *)va_arg(args, long);
1110		size_t msgsz = (size_t)va_arg(args, long);
1111		int msgflg = (int)va_arg(args, long);
1112		ret = msgsnd(msqid, msgp, msgsz, msgflg);
1113		break;
1114	}
1115	case SYS_msgrcv: {
1116		int msqid = (int)va_arg(args, long);
1117		void * msgp = (void *)va_arg(args, long);
1118		size_t msgsz = (size_t)va_arg(args, long);
1119		long msgtyp = (long)va_arg(args, long);
1120		int msgflg = (int)va_arg(args, long);
1121		ret = msgrcv(msqid, msgp, msgsz, msgtyp, msgflg);
1122		break;
1123	}
1124	case SYS_shmat: {
1125		int shmid = (int)va_arg(args, long);
1126		const void * shmaddr = (const void *)va_arg(args, long);
1127		int shmflg = (int)va_arg(args, long);
1128		ret = (long)shmat(shmid, shmaddr, shmflg);
1129		break;
1130	}
1131	case SYS_shmdt:
1132		ret = shmdt(va_arg(args, const void *)); // shmaddr
1133		break;
1134	case SYS_minherit: {
1135		void * addr = (void *)va_arg(args, long);
1136		size_t len = (size_t)va_arg(args, long);
1137		int inherit = (int)va_arg(args, long);
1138		ret = minherit(addr, len, inherit);
1139		break;
1140	}
1141	case SYS_poll: {
1142		struct pollfd * fds = (struct pollfd *)va_arg(args, long);
1143		u_int nfds = (u_int)va_arg(args, long);
1144		int timeout = (int)va_arg(args, long);
1145		ret = poll(fds, nfds, timeout);
1146		break;
1147	}
1148	case SYS_issetugid:
1149		ret = issetugid();
1150		break;
1151	case SYS_lchown: {
1152		const char * path = (const char *)va_arg(args, long);
1153		uid_t uid = (uid_t)va_arg(args, long);
1154		gid_t gid = (gid_t)va_arg(args, long);
1155		ret = lchown(path, uid, gid);
1156		break;
1157	}
1158	case SYS_getsid:
1159		ret = getsid(va_arg(args, pid_t)); // pid
1160		break;
1161	case SYS_msync: {
1162		void * addr = (void *)va_arg(args, long);
1163		size_t len = (size_t)va_arg(args, long);
1164		int flags = (int)va_arg(args, long);
1165		ret = msync(addr, len, flags);
1166		break;
1167	}
1168	case SYS_pipe:
1169		ret = pipe(va_arg(args, int *)); // fdp
1170		break;
1171	case SYS_fhopen: {
1172		const fhandle_t * fhp = (const fhandle_t *)va_arg(args, long);
1173		int flags = (int)va_arg(args, long);
1174		ret = fhopen(fhp, flags);
1175		break;
1176	}
1177	case SYS_kqueue:
1178		ret = kqueue();
1179		break;
1180	case SYS_mlockall:
1181		ret = mlockall(va_arg(args, int)); // flags
1182		break;
1183	case SYS_munlockall:
1184		ret = munlockall();
1185		break;
1186	case SYS_getresuid: {
1187		uid_t * ruid = (uid_t *)va_arg(args, long);
1188		uid_t * euid = (uid_t *)va_arg(args, long);
1189		uid_t * suid = (uid_t *)va_arg(args, long);
1190		ret = getresuid(ruid, euid, suid);
1191		break;
1192	}
1193	case SYS_setresuid: {
1194		uid_t ruid = (uid_t)va_arg(args, long);
1195		uid_t euid = (uid_t)va_arg(args, long);
1196		uid_t suid = (uid_t)va_arg(args, long);
1197		ret = setresuid(ruid, euid, suid);
1198		break;
1199	}
1200	case SYS_getresgid: {
1201		gid_t * rgid = (gid_t *)va_arg(args, long);
1202		gid_t * egid = (gid_t *)va_arg(args, long);
1203		gid_t * sgid = (gid_t *)va_arg(args, long);
1204		ret = getresgid(rgid, egid, sgid);
1205		break;
1206	}
1207	case SYS_setresgid: {
1208		gid_t rgid = (gid_t)va_arg(args, long);
1209		gid_t egid = (gid_t)va_arg(args, long);
1210		gid_t sgid = (gid_t)va_arg(args, long);
1211		ret = setresgid(rgid, egid, sgid);
1212		break;
1213	}
1214	case SYS_closefrom:
1215		ret = closefrom(va_arg(args, int)); // fd
1216		break;
1217	case SYS_sigaltstack: {
1218		const struct sigaltstack * nss = (const struct sigaltstack *)va_arg(args, long);
1219		struct sigaltstack * oss = (struct sigaltstack *)va_arg(args, long);
1220		ret = sigaltstack(nss, oss);
1221		break;
1222	}
1223	case SYS_shmget: {
1224		key_t key = (key_t)va_arg(args, long);
1225		size_t size = (size_t)va_arg(args, long);
1226		int shmflg = (int)va_arg(args, long);
1227		ret = shmget(key, size, shmflg);
1228		break;
1229	}
1230	case SYS_semop: {
1231		int semid = (int)va_arg(args, long);
1232		struct sembuf * sops = (struct sembuf *)va_arg(args, long);
1233		size_t nsops = (size_t)va_arg(args, long);
1234		ret = semop(semid, sops, nsops);
1235		break;
1236	}
1237	case SYS_fhstat: {
1238		const fhandle_t * fhp = (const fhandle_t *)va_arg(args, long);
1239		struct stat * sb = (struct stat *)va_arg(args, long);
1240		ret = fhstat(fhp, sb);
1241		break;
1242	}
1243	case SYS___semctl: {
1244		int semid = (int)va_arg(args, long);
1245		int semnum = (int)va_arg(args, long);
1246		int cmd = (int)va_arg(args, long);
1247		union semun * arg = (union semun *)va_arg(args, long);
1248		ret = __semctl(semid, semnum, cmd, arg);
1249		break;
1250	}
1251	case SYS_shmctl: {
1252		int shmid = (int)va_arg(args, long);
1253		int cmd = (int)va_arg(args, long);
1254		struct shmid_ds * buf = (struct shmid_ds *)va_arg(args, long);
1255		ret = shmctl(shmid, cmd, buf);
1256		break;
1257	}
1258	case SYS_msgctl: {
1259		int msqid = (int)va_arg(args, long);
1260		int cmd = (int)va_arg(args, long);
1261		struct msqid_ds * buf = (struct msqid_ds *)va_arg(args, long);
1262		ret = msgctl(msqid, cmd, buf);
1263		break;
1264	}
1265	case SYS_sched_yield:
1266		ret = sched_yield();
1267		break;
1268	case SYS_getthrid:
1269		ret = getthrid();
1270		break;
1271	/* No signature found in headers
1272	 *case SYS___thrwakeup: {
1273	 *	const volatile void * ident = (const volatile void *)va_arg(args, long);
1274	 *	int n = (int)va_arg(args, long);
1275	 *	ret = __thrwakeup(ident, n);
1276	 *	break;
1277	 *}
1278	 */
1279	/* No signature found in headers
1280	 *case SYS___threxit:
1281	 *	__threxit(va_arg(args, pid_t *)); // notdead
1282	 *	break;
1283	 */
1284	/* No signature found in headers
1285	 *case SYS___thrsigdivert: {
1286	 *	sigset_t sigmask = (sigset_t)va_arg(args, long);
1287	 *	siginfo_t * info = (siginfo_t *)va_arg(args, long);
1288	 *	const struct timespec * timeout = (const struct timespec *)va_arg(args, long);
1289	 *	ret = __thrsigdivert(sigmask, info, timeout);
1290	 *	break;
1291	 *}
1292	 */
1293	/* No signature found in headers
1294	 *case SYS___getcwd: {
1295	 *	char * buf = (char *)va_arg(args, long);
1296	 *	size_t len = (size_t)va_arg(args, long);
1297	 *	ret = __getcwd(buf, len);
1298	 *	break;
1299	 *}
1300	 */
1301	case SYS_adjfreq: {
1302		const int64_t * freq = (const int64_t *)va_arg(args, long);
1303		int64_t * oldfreq = (int64_t *)va_arg(args, long);
1304		ret = adjfreq(freq, oldfreq);
1305		break;
1306	}
1307	case SYS_setrtable:
1308		ret = setrtable(va_arg(args, int)); // rtableid
1309		break;
1310	case SYS_getrtable:
1311		ret = getrtable();
1312		break;
1313	case SYS_faccessat: {
1314		int fd = (int)va_arg(args, long);
1315		const char * path = (const char *)va_arg(args, long);
1316		int amode = (int)va_arg(args, long);
1317		int flag = (int)va_arg(args, long);
1318		ret = faccessat(fd, path, amode, flag);
1319		break;
1320	}
1321	case SYS_fchmodat: {
1322		int fd = (int)va_arg(args, long);
1323		const char * path = (const char *)va_arg(args, long);
1324		mode_t mode = (mode_t)va_arg(args, long);
1325		int flag = (int)va_arg(args, long);
1326		ret = fchmodat(fd, path, mode, flag);
1327		break;
1328	}
1329	case SYS_fchownat: {
1330		int fd = (int)va_arg(args, long);
1331		const char * path = (const char *)va_arg(args, long);
1332		uid_t uid = (uid_t)va_arg(args, long);
1333		gid_t gid = (gid_t)va_arg(args, long);
1334		int flag = (int)va_arg(args, long);
1335		ret = fchownat(fd, path, uid, gid, flag);
1336		break;
1337	}
1338	case SYS_linkat: {
1339		int fd1 = (int)va_arg(args, long);
1340		const char * path1 = (const char *)va_arg(args, long);
1341		int fd2 = (int)va_arg(args, long);
1342		const char * path2 = (const char *)va_arg(args, long);
1343		int flag = (int)va_arg(args, long);
1344		ret = linkat(fd1, path1, fd2, path2, flag);
1345		break;
1346	}
1347	case SYS_mkdirat: {
1348		int fd = (int)va_arg(args, long);
1349		const char * path = (const char *)va_arg(args, long);
1350		mode_t mode = (mode_t)va_arg(args, long);
1351		ret = mkdirat(fd, path, mode);
1352		break;
1353	}
1354	case SYS_mkfifoat: {
1355		int fd = (int)va_arg(args, long);
1356		const char * path = (const char *)va_arg(args, long);
1357		mode_t mode = (mode_t)va_arg(args, long);
1358		ret = mkfifoat(fd, path, mode);
1359		break;
1360	}
1361	case SYS_mknodat: {
1362		int fd = (int)va_arg(args, long);
1363		const char * path = (const char *)va_arg(args, long);
1364		mode_t mode = (mode_t)va_arg(args, long);
1365		dev_t dev = (dev_t)va_arg(args, long);
1366		ret = mknodat(fd, path, mode, dev);
1367		break;
1368	}
1369	case SYS_openat: {
1370		int fd = (int)va_arg(args, long);
1371		const char * path = (const char *)va_arg(args, long);
1372		int flags = (int)va_arg(args, long);
1373		mode_t mode = (mode_t)va_arg(args, long);
1374		ret = openat(fd, path, flags, mode);
1375		break;
1376	}
1377	case SYS_readlinkat: {
1378		int fd = (int)va_arg(args, long);
1379		const char * path = (const char *)va_arg(args, long);
1380		char * buf = (char *)va_arg(args, long);
1381		size_t count = (size_t)va_arg(args, long);
1382		ret = readlinkat(fd, path, buf, count);
1383		break;
1384	}
1385	case SYS_renameat: {
1386		int fromfd = (int)va_arg(args, long);
1387		const char * from = (const char *)va_arg(args, long);
1388		int tofd = (int)va_arg(args, long);
1389		const char * to = (const char *)va_arg(args, long);
1390		ret = renameat(fromfd, from, tofd, to);
1391		break;
1392	}
1393	case SYS_symlinkat: {
1394		const char * path = (const char *)va_arg(args, long);
1395		int fd = (int)va_arg(args, long);
1396		const char * link = (const char *)va_arg(args, long);
1397		ret = symlinkat(path, fd, link);
1398		break;
1399	}
1400	case SYS_unlinkat: {
1401		int fd = (int)va_arg(args, long);
1402		const char * path = (const char *)va_arg(args, long);
1403		int flag = (int)va_arg(args, long);
1404		ret = unlinkat(fd, path, flag);
1405		break;
1406	}
1407	case SYS___set_tcb:
1408		__set_tcb(va_arg(args, void *)); // tcb
1409		break;
1410	case SYS___get_tcb:
1411		ret = (long)__get_tcb();
1412		break;
1413	default:
1414		ret = -1;
1415		errno = ENOSYS;
1416	}
1417	va_end(args);
1418
1419	return ret;
1420}
1421