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