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