xref: /openbsd/gnu/usr.bin/perl/syscall_emulator.c (revision fac98b93)
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 
38 long
syscall_emulator(int syscall,...)39 syscall_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