LCOV - code coverage report
Current view: top level - src/client/syscalls/detail - syscall_info.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 19 22 86.4 %
Date: 2024-04-30 13:21:35 Functions: 4 5 80.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :   Copyright 2018-2024, Barcelona Supercomputing Center (BSC), Spain
       3             :   Copyright 2015-2024, Johannes Gutenberg Universitaet Mainz, Germany
       4             : 
       5             :   This software was partially supported by the
       6             :   EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu).
       7             : 
       8             :   This software was partially supported by the
       9             :   ADA-FS project under the SPPEXA project funded by the DFG.
      10             : 
      11             :   This file is part of GekkoFS' POSIX interface.
      12             : 
      13             :   GekkoFS' POSIX interface is free software: you can redistribute it and/or
      14             :   modify it under the terms of the GNU Lesser General Public License as
      15             :   published by the Free Software Foundation, either version 3 of the License,
      16             :   or (at your option) any later version.
      17             : 
      18             :   GekkoFS' POSIX interface is distributed in the hope that it will be useful,
      19             :   but WITHOUT ANY WARRANTY; without even the implied warranty of
      20             :   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      21             :   GNU Lesser General Public License for more details.
      22             : 
      23             :   You should have received a copy of the GNU Lesser General Public License
      24             :   along with GekkoFS' POSIX interface.  If not, see
      25             :   <https://www.gnu.org/licenses/>.
      26             : 
      27             :   SPDX-License-Identifier: LGPL-3.0-or-later
      28             : */
      29             : 
      30             : // This file uses special C formatting for a better overview
      31             : // clang-format off
      32             : 
      33             : #define _GNU_SOURCE
      34             : #include <syscall.h>
      35             : #include <stdbool.h>
      36             : #include <stddef.h>
      37             : #include <sys/types.h>
      38             : #include <sys/stat.h>
      39             : #include <fcntl.h>
      40             : #include <string.h>
      41             : #include <stdlib.h>
      42             : #include <client/syscalls/detail/syscall_info.h>
      43             : 
      44             : #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
      45             : 
      46             : #define SYSCALL(id, nargs, ret, ...) \
      47             :     [SYS_##id] =                     \
      48             : {                                    \
      49             :     .s_nr = SYS_##id,                \
      50             :     .s_name = #id,                   \
      51             :     .s_nargs = nargs,                \
      52             :     .s_return_type = ret,            \
      53             :     .s_args = {__VA_ARGS__}          \
      54             : }
      55             : 
      56             : #define S_NOARGS() {0}
      57             : 
      58             : #define S_UARG(t) \
      59             : {                 \
      60             :     .a_type = t,  \
      61             :     .a_name = #t  \
      62             : }
      63             : 
      64             : #define S_NARG(t, n) \
      65             : {                    \
      66             :     .a_type = t,     \
      67             :     .a_name = n      \
      68             : }
      69             : 
      70             : #define S_RET(t) \
      71             : {                \
      72             :     .r_type = t  \
      73             : }
      74             : 
      75             : /* Linux syscalls on x86_64 */
      76             : const struct syscall_info syscall_table[] = {
      77             :     SYSCALL(read,                    3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "buf"),              S_NARG(arg, "count")),
      78             :     SYSCALL(write,                   3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "buf"),              S_NARG(arg, "count")),
      79             : #ifdef SYS_open
      80             :     SYSCALL(open,                    2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(open_flags, "flags")),
      81             : #endif
      82             :     SYSCALL(close,                   1,  S_RET(rdec),    S_UARG(fd)),
      83             : #ifdef SYS_stat
      84             :     SYSCALL(stat,                    2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(ptr, "statbuf")),
      85             : #endif
      86             :     SYSCALL(fstat,                   2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "statbuf")),
      87             : #ifdef SYS_lstat
      88             :     SYSCALL(lstat,                   2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(ptr, "statbuf")),
      89             : #endif
      90             : #ifdef SYS_poll
      91             :     SYSCALL(poll,                    3,  S_RET(rdec),    S_NARG(ptr, "fds"),            S_NARG(dec, "nfds"),             S_NARG(dec, "timeout")),
      92             : #endif
      93             :     SYSCALL(lseek,                   3,  S_RET(rdec),    S_UARG(fd),                    S_UARG(offset),                  S_UARG(whence)),
      94             :     SYSCALL(mmap,                    6,  S_RET(rptr),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(mmap_prot, "prot"),        S_NARG(mmap_flags, "flags"), S_UARG(fd),                  S_UARG(offset)),
      95             :     SYSCALL(mprotect,                3,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(mmap_prot, "prot")),
      96             :     SYSCALL(munmap,                  2,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length")),
      97             :     SYSCALL(brk,                     1,  S_RET(rdec),    S_NARG(ptr, "addr")),
      98             :     SYSCALL(rt_sigaction,            4,  S_RET(rdec),    S_NARG(signum, "signum"),      S_NARG(ptr, "act"),              S_NARG(ptr, "oldact"),            S_NARG(dec, "sigsetsize")),
      99             :     SYSCALL(rt_sigprocmask,          4,  S_RET(rdec),    S_NARG(sigproc_how, "how"),    S_NARG(ptr, "set"),              S_NARG(ptr, "oldset"),            S_NARG(dec, "sigsetsize")),
     100             :     SYSCALL(rt_sigreturn,            0,  S_RET(rnone),   S_NOARGS()),
     101             :     SYSCALL(ioctl,                   3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(arg, "cmd"),              S_NARG(arg, "argp")),
     102             :     SYSCALL(pread64,                 4,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "buf"),              S_NARG(arg, "count"),             S_UARG(offset)),
     103             :     SYSCALL(pwrite64,                4,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "buf"),              S_NARG(arg, "count"),             S_UARG(offset)),
     104             :     SYSCALL(readv,                   3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "iov"),              S_NARG(dec, "iovcnt")),
     105             :     SYSCALL(writev,                  3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "iov"),              S_NARG(dec, "iovcnt")),
     106             : #ifdef SYS_access
     107             :     SYSCALL(access,                  2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(octal_mode, "mode")),
     108             : #endif
     109             : #ifdef SYS_pipe
     110             :     SYSCALL(pipe,                    1,  S_RET(rdec),    S_NARG(ptr, "pipefd")),
     111             : #endif
     112             : #ifdef SYS_select
     113             :     SYSCALL(select,                  5,  S_RET(rdec),    S_NARG(dec, "nfds"),           S_NARG(ptr, "readfds"),          S_NARG(ptr, "writefds"),          S_NARG(ptr, "exceptfds"),    S_NARG(ptr, "timeout")),
     114             : #endif
     115             :     SYSCALL(sched_yield,             0,  S_RET(rdec),    S_NOARGS()),
     116             :     SYSCALL(mremap,                  5,  S_RET(rdec),    S_NARG(ptr, "old_address"),    S_NARG(dec, "old_size"),         S_NARG(dec, "new_size"),          S_NARG(arg, "flags"),        S_NARG(ptr, "new_addr")),
     117             :     SYSCALL(msync,                   3,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(arg, "flags")),
     118             :     SYSCALL(mincore,                 3,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(ptr, "vec")),
     119             :     SYSCALL(madvise,                 3,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(arg, "behavior")),
     120             : #ifdef SYS_semget
     121             :     SYSCALL(shmget,                  3,  S_RET(rdec),    S_NARG(arg, "key"),            S_NARG(dec, "size"),             S_NARG(arg, "flag")),
     122             : #endif // SYS_semget
     123             : #ifdef SYS_shmat
     124             :     SYSCALL(shmat,                   3,  S_RET(rdec),    S_NARG(arg, "shmid"),          S_NARG(ptr, "shmaddr"),          S_NARG(arg, "shmflg")),
     125             : #endif // SYS_shmat
     126             : #ifdef SYS_shmctl
     127             :     SYSCALL(shmctl,                  3,  S_RET(rdec),    S_NARG(arg, "shmid"),          S_NARG(arg, "cmd"),              S_NARG(ptr, "buf")),
     128             : #endif // SYS_shmctl
     129             :     SYSCALL(dup,                     1,  S_RET(rdec),    S_NARG(fd, "oldfd")),
     130             : #ifdef SYS_dup2
     131             :     SYSCALL(dup2,                    2,  S_RET(rdec),    S_NARG(fd, "oldfd"),           S_NARG(fd, "newfd")),
     132             : #endif
     133             : #ifdef SYS_pause
     134             :     SYSCALL(pause,                   0,  S_RET(rdec),    S_NOARGS()),
     135             : #endif
     136             :     SYSCALL(nanosleep,               2,  S_RET(rdec),    S_NARG(ptr, "rqtp"),           S_NARG(ptr, "rmtp")),
     137             :     SYSCALL(getitimer,               2,  S_RET(rdec),    S_NARG(arg, "which"),          S_NARG(ptr, "value")),
     138             : #ifdef SYS_alarm
     139             :     SYSCALL(alarm,                   1,  S_RET(rdec),    S_NARG(dec, "seconds")),
     140             : #endif
     141             :     SYSCALL(setitimer,               3,  S_RET(rdec),    S_NARG(arg, "which"),          S_NARG(ptr, "value"),            S_NARG(ptr, "ovalue")),
     142             :     SYSCALL(getpid,                  0,  S_RET(rdec),    S_NOARGS()),
     143             :     SYSCALL(sendfile,                4,  S_RET(rdec),    S_NARG(fd, "out_fd"),          S_NARG(fd, "in_fd"),             S_NARG(ptr, "offset"),            S_NARG(arg, "count")),
     144             :     SYSCALL(socket,                  3,  S_RET(rdec),    S_NARG(arg, "domain"),         S_NARG(arg, "type"),             S_NARG(arg, "protocol")),
     145             :     SYSCALL(connect,                 3,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "addr"),             S_NARG(arg, "addrlen")),
     146             :     SYSCALL(accept,                  3,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "addr"),             S_NARG(ptr, "addrlen")),
     147             :     SYSCALL(sendto,                  5,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "dest_addr"),        S_NARG(arg, "len"),               S_NARG(ptr, "addr"),         S_NARG(arg, "addrlen")),
     148             :     SYSCALL(recvfrom,                5,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "src_addr"),         S_NARG(arg, "len"),               S_NARG(ptr, "addr"),         S_NARG(ptr, "addrlen")),
     149             :     SYSCALL(sendmsg,                 3,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "msg"),              S_NARG(arg, "flags")),
     150             :     SYSCALL(recvmsg,                 3,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "msg"),              S_NARG(arg, "flags")),
     151             :     SYSCALL(shutdown,                2,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(arg, "how")),
     152             :     SYSCALL(bind,                    3,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "addr"),             S_NARG(arg, "addrlen")),
     153             :     SYSCALL(listen,                  2,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(arg, "backlog")),
     154             :     SYSCALL(getsockname,             3,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "addr"),             S_NARG(ptr, "addrlen")),
     155             :     SYSCALL(getpeername,             3,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "addr"),             S_NARG(ptr, "addrlen")),
     156             :     SYSCALL(socketpair,              4,  S_RET(rdec),    S_NARG(arg, "domain"),         S_NARG(arg, "type"),             S_NARG(arg, "protocol"),          S_NARG(ptr, "sv")),
     157             :     SYSCALL(setsockopt,              5,  S_RET(rdec),    S_UARG(fd),                    S_NARG(arg, "level"),            S_NARG(arg, "optname"),           S_NARG(ptr, "optval"),       S_NARG(arg, "optlen")),
     158             :     SYSCALL(getsockopt,              5,  S_RET(rdec),    S_UARG(fd),                    S_NARG(arg, "level"),            S_NARG(arg, "optname"),           S_NARG(ptr, "optval"),       S_NARG(ptr, "optlen")),
     159             :     SYSCALL(clone,                   5,  S_RET(rdec),    S_NARG(clone_flags, "flags"),  S_NARG(ptr, "child_stack"),      S_NARG(ptr, "ptid"),              S_NARG(ptr, "ctid"),         S_NARG(ptr, "newtls")),
     160             : #ifdef SYS_fork
     161             :     SYSCALL(fork,                    0,  S_RET(rdec),    S_NOARGS()),
     162             : #endif
     163             : #ifdef SYS_vfork
     164             :     SYSCALL(vfork,                   0,  S_RET(rdec),    S_NOARGS()),
     165             : #endif
     166             :     SYSCALL(execve,                  3,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(ptr, "argv"),             S_NARG(ptr, "envp")),
     167             :     SYSCALL(exit,                    1,  S_RET(rnone),   S_NARG(dec, "status")),
     168             :     SYSCALL(wait4,                   4,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "stat_addr"),        S_NARG(arg, "options"),           S_NARG(ptr, "rusage")),
     169             :     SYSCALL(kill,                    2,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(signum, "sig")),
     170             :     SYSCALL(uname,                   1,  S_RET(rdec),    S_NARG(ptr, "buf")),
     171             : #ifdef SYS_semget
     172             :     SYSCALL(semget,                  3,  S_RET(rdec),    S_NARG(arg, "key"),            S_NARG(dec, "nsems"),            S_NARG(arg, "semflg")),
     173             : #endif // SYS_semop
     174             : #ifdef SYS_semop
     175             :     SYSCALL(semop,                   3,  S_RET(rdec),    S_NARG(dec, "semid"),          S_NARG(ptr, "sops"),             S_NARG(arg, "nsops")),
     176             : #endif // SYS_semop
     177             : #ifdef SYS_semctl
     178             :     SYSCALL(semctl,                  4,  S_RET(rdec),    S_NARG(dec, "semid"),          S_NARG(dec, "semnum"),           S_NARG(arg, "cmd"),               S_NARG(arg, "arg")),
     179             : #endif // SYS_semctl
     180             : #ifdef SYS_shmdt
     181             :     SYSCALL(shmdt,                   1,  S_RET(rdec),    S_NARG(ptr, "shmaddr")),
     182             : #endif // SYS_shmdt
     183             : #ifdef SYS_msgget
     184             :     SYSCALL(msgget,                  2,  S_RET(rdec),    S_NARG(arg, "key"),            S_NARG(arg, "msflg")),
     185             : #endif // SYS_msgget
     186             : #ifdef SYS_msgsnd
     187             :     SYSCALL(msgsnd,                  4,  S_RET(rdec),    S_NARG(arg, "msqid"),          S_NARG(ptr, "msgp"),             S_NARG(dec, "msgsz"),             S_NARG(arg, "msflg")),
     188             : #endif // SYS_msgsnd
     189             : #ifdef SYS_msgrcv
     190             :     SYSCALL(msgrcv,                  5,  S_RET(rdec),    S_NARG(arg, "msqid"),          S_NARG(ptr, "msgp"),             S_NARG(dec, "msgsz"),             S_NARG(arg, "msgtyp"),       S_NARG(arg, "msflg")),
     191             : #endif // SYS_msgrcv
     192             : #ifdef SYS_msgctl
     193             :     SYSCALL(msgctl,                  3,  S_RET(rdec),    S_NARG(arg, "msqid"),          S_NARG(arg, "cmd"),              S_NARG(ptr, "buf")),
     194             : #endif // SYS_msgctl
     195             :     SYSCALL(fcntl,                   3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(arg, "cmd"),              S_NARG(arg, "arg")),
     196             :     SYSCALL(flock,                   2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(arg, "cmd")),
     197             :     SYSCALL(fsync,                   1,  S_RET(rdec),    S_UARG(fd)),
     198             :     SYSCALL(fdatasync,               2,  S_RET(rdec),    S_UARG(fd)),
     199             :     SYSCALL(truncate,                2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(arg, "length")),
     200             :     SYSCALL(ftruncate,               2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(offset, "length")),
     201             : #ifdef SYS_getdents
     202             :     SYSCALL(getdents,                3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "dirent"),           S_NARG(arg, "count")),
     203             : #endif
     204             :     SYSCALL(getcwd,                  2,  S_RET(rdec),    S_NARG(ptr, "buf"),            S_NARG(dec, "size")),
     205             :     SYSCALL(chdir,                   1,  S_RET(rdec),    S_NARG(cstr, "pathname")),
     206             :     SYSCALL(fchdir,                  1,  S_RET(rdec),    S_UARG(fd)),
     207             : #ifdef SYS_rename
     208             :     SYSCALL(rename,                  2,  S_RET(rdec),    S_NARG(cstr, "oldpath"),       S_NARG(cstr, "newpath")),
     209             : #endif
     210             : #ifdef SYS_mkdir
     211             :     SYSCALL(mkdir,                   2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(octal_mode, "mode")),
     212             : #endif
     213             : #ifdef SYS_rmdir
     214             :     SYSCALL(rmdir,                   1,  S_RET(rdec),    S_NARG(cstr, "pathname")),
     215             : #endif
     216             : #ifdef SYS_creat
     217             :     SYSCALL(creat,                   2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(octal_mode, "mode")),
     218             : #endif
     219             : #ifdef SYS_link
     220             :     SYSCALL(link,                    2,  S_RET(rdec),    S_NARG(cstr, "oldpath"),       S_NARG(cstr, "newpath")),
     221             : #endif
     222             : #ifdef SYS_unlink
     223             :     SYSCALL(unlink,                  1,  S_RET(rdec),    S_NARG(cstr, "pathname")),
     224             : #endif
     225             : #ifdef SYS_symlink
     226             :     SYSCALL(symlink,                 2,  S_RET(rdec),    S_NARG(cstr, "target"),        S_NARG(cstr, "linkpath")),
     227             : #endif
     228             : #ifdef SYS_readlink
     229             :     SYSCALL(readlink,                2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(ptr, "buf"),              S_NARG(arg, "bufsiz")),
     230             : #endif
     231             : #ifdef SYS_chmod
     232             :     SYSCALL(chmod,                   2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(octal_mode, "mode")),
     233             : #endif
     234             :     SYSCALL(fchmod,                  2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(octal_mode, "mode")),
     235             : #ifdef SYS_chown
     236             :     SYSCALL(chown,                   3,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(dec, "user"),             S_NARG(dec, "group")),
     237             : #endif
     238             :     SYSCALL(fchown,                  3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(dec, "user"),             S_NARG(dec, "group")),
     239             : #ifdef SYS_lchown
     240             :     SYSCALL(lchown,                  3,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(dec, "user"),             S_NARG(dec, "group")),
     241             : #endif
     242             :     SYSCALL(umask,                   1,  S_RET(rdec),    S_NARG(arg, "mask")),
     243             :     SYSCALL(gettimeofday,            2,  S_RET(rdec),    S_NARG(ptr, "tv"),             S_NARG(ptr, "tz")),
     244             :     SYSCALL(getrlimit,               2,  S_RET(rdec),    S_NARG(arg, "resource"),       S_NARG(ptr, "rlim")),
     245             :     SYSCALL(getrusage,               2,  S_RET(rdec),    S_NARG(arg, "who"),            S_NARG(ptr, "ru")),
     246             :     SYSCALL(sysinfo,                 1,  S_RET(rdec),    S_NARG(ptr, "info")),
     247             :     SYSCALL(times,                   1,  S_RET(rdec),    S_NARG(ptr, "tbuf")),
     248             :     SYSCALL(ptrace,                  4,  S_RET(rdec),    S_NARG(arg, "request"),        S_NARG(dec, "pid"),              S_NARG(ptr, "addr"),              S_NARG(ptr, "data")),
     249             :     SYSCALL(getuid,                  0,  S_RET(rdec),    S_NOARGS()),
     250             :     SYSCALL(syslog,                  3,  S_RET(rdec),    S_NARG(arg, "type"),           S_NARG(ptr, "buf"),              S_NARG(arg, "length")),
     251             :     SYSCALL(getgid,                  0,  S_RET(rdec),    S_NOARGS()),
     252             :     SYSCALL(setuid,                  1,  S_RET(rdec),    S_NARG(dec, "uid")),
     253             :     SYSCALL(setgid,                  1,  S_RET(rdec),    S_NARG(dec, "gid")),
     254             :     SYSCALL(geteuid,                 0,  S_RET(rdec),    S_NOARGS()),
     255             :     SYSCALL(getegid,                 0,  S_RET(rdec),    S_NOARGS()),
     256             :     SYSCALL(setpgid,                 2,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(dec, "pgid")),
     257             :     SYSCALL(getppid,                 0,  S_RET(rdec),    S_NOARGS()),
     258             : #ifdef SYS_getpgrp
     259             :     SYSCALL(getpgrp,                 0,  S_RET(rdec),    S_NOARGS()),
     260             : #endif
     261             :     SYSCALL(setsid,                  0,  S_RET(rdec),    S_NOARGS()),
     262             :     SYSCALL(setreuid,                2,  S_RET(rdec),    S_NARG(dec, "ruid"),           S_NARG(dec, "euid")),
     263             :     SYSCALL(setregid,                2,  S_RET(rdec),    S_NARG(dec, "rgid"),           S_NARG(dec, "egid")),
     264             :     SYSCALL(getgroups,               2,  S_RET(rdec),    S_NARG(arg, "gidsetsize"),     S_NARG(ptr, "grouplist")),
     265             :     SYSCALL(setgroups,               2,  S_RET(rdec),    S_NARG(arg, "gidsetsize"),     S_NARG(ptr, "grouplist")),
     266             :     SYSCALL(setresuid,               3,  S_RET(rdec),    S_NARG(dec, "ruid"),           S_NARG(dec, "euid"),             S_NARG(dec, "suid")),
     267             :     SYSCALL(getresuid,               3,  S_RET(rdec),    S_NARG(ptr, "ruid"),           S_NARG(ptr, "euid"),             S_NARG(ptr, "suid")),
     268             :     SYSCALL(setresgid,               3,  S_RET(rdec),    S_NARG(dec, "rgid"),           S_NARG(dec, "egid"),             S_NARG(dec, "sgid")),
     269             :     SYSCALL(getresgid,               3,  S_RET(rdec),    S_NARG(ptr, "rgid"),           S_NARG(ptr, "egid"),             S_NARG(ptr, "sgid")),
     270             :     SYSCALL(getpgid,                 1,  S_RET(rdec),    S_NARG(dec, "pid")),
     271             :     SYSCALL(setfsuid,                1,  S_RET(rdec),    S_NARG(dec, "uid")),
     272             :     SYSCALL(setfsgid,                1,  S_RET(rdec),    S_NARG(dec, "gid")),
     273             :     SYSCALL(getsid,                  1,  S_RET(rdec),    S_NARG(dec, "pid")),
     274             :     SYSCALL(capget,                  2,  S_RET(rdec),    S_NARG(ptr, "header"),         S_NARG(ptr, "datap")),
     275             :     SYSCALL(capset,                  2,  S_RET(rdec),    S_NARG(ptr, "header"),         S_NARG(ptr, "datap")),
     276             :     SYSCALL(rt_sigpending,           2,  S_RET(rdec),    S_NARG(ptr, "set"),            S_NARG(dec, "sigsetsize")),
     277             :     SYSCALL(rt_sigtimedwait,         4,  S_RET(rdec),    S_NARG(ptr, "uthese"),         S_NARG(ptr, "uinfo"),            S_NARG(ptr, "uts"),               S_NARG(dec, "sigsetsize")),
     278             :     SYSCALL(rt_sigqueueinfo,         4,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(signum, "sig"),           S_NARG(ptr, "uinfo")),
     279             :     SYSCALL(rt_sigsuspend,           2,  S_RET(rdec),    S_NARG(ptr, "unewset"),        S_NARG(dec, "sigsetsize")),
     280             :     SYSCALL(sigaltstack,             2,  S_RET(rdec),    S_NARG(ptr, "ss"),             S_NARG(ptr, "old_ss")),
     281             : #ifdef SYS_utime
     282             :     SYSCALL(utime,                   2,  S_RET(rdec),    S_NARG(cstr, "filename"),      S_NARG(ptr, "times")),
     283             : #endif
     284             : #ifdef SYS_mknod
     285             :     SYSCALL(mknod,                   3,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(octal_mode, "mode"),      S_NARG(arg, "dev")),
     286             : #endif
     287             : #ifdef SYS_uselib
     288             :     SYSCALL(uselib,                  1,  S_RET(rdec),    S_NARG(cstr, "library")),
     289             : #endif
     290             :     SYSCALL(personality,             1,  S_RET(rdec),    S_NARG(arg, "personality")),
     291             : #ifdef SYS_ustat
     292             :     SYSCALL(ustat,                   2,  S_RET(rdec),    S_NARG(arg, "dev"),            S_NARG(ptr, "ubuf")),
     293             : #endif
     294             :     SYSCALL(statfs,                  2,  S_RET(rdec),    S_NARG(cstr, "path"),          S_NARG(ptr, "buf")),
     295             :     SYSCALL(fstatfs,                 2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "buf")),
     296             : #ifdef SYS_sysfs
     297             :     SYSCALL(sysfs,                   3,  S_RET(rdec),    S_NARG(arg, "option"),         S_NARG(ptr, "arg1"),             S_NARG(ptr, "arg2")),
     298             : #endif
     299             :     SYSCALL(getpriority,             2,  S_RET(rdec),    S_NARG(arg, "which"),          S_NARG(arg, "who")),
     300             :     SYSCALL(setpriority,             3,  S_RET(rdec),    S_NARG(arg, "which"),          S_NARG(arg, "who"),              S_NARG(arg, "prio")),
     301             :     SYSCALL(sched_setparam,          2,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "param")),
     302             :     SYSCALL(sched_getparam,          2,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "param")),
     303             :     SYSCALL(sched_setscheduler,      3,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(arg, "policy"),           S_NARG(ptr, "param")),
     304             :     SYSCALL(sched_getscheduler,      1,  S_RET(rdec),    S_NARG(dec, "pid")),
     305             :     SYSCALL(sched_get_priority_max,  1,  S_RET(rdec),    S_NARG(arg, "policy")),
     306             :     SYSCALL(sched_get_priority_min,  1,  S_RET(rdec),    S_NARG(arg, "policy")),
     307             :     SYSCALL(sched_rr_get_interval,   2,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "interval")),
     308             :     SYSCALL(mlock,                   2,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length")),
     309             :     SYSCALL(munlock,                 2,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length")),
     310             :     SYSCALL(mlockall,                1,  S_RET(rdec),    S_NARG(arg, "flags")),
     311             :     SYSCALL(munlockall,              0,  S_RET(rdec),    S_NOARGS()),
     312             :     SYSCALL(vhangup,                 0,  S_RET(rdec),    S_NOARGS()),
     313             : #ifdef SYS_modify_ldt
     314             :     SYSCALL(modify_ldt,              3,  S_RET(rdec),    S_NARG(arg, "func"),           S_NARG(ptr, "ptr"),              S_NARG(arg, "bytecount")),
     315             : #endif
     316             :     SYSCALL(pivot_root,              2,  S_RET(rdec),    S_NARG(cstr, "new_root"),      S_NARG(cstr, "put_old")),
     317             : #ifdef SYS_sysctl
     318             :     SYSCALL(_sysctl,                 1,  S_RET(rdec),    S_NARG(ptr, "args")),
     319             : #endif
     320             :     SYSCALL(prctl,                   5,  S_RET(rdec),    S_NARG(arg, "option"),         S_NARG(arg, "arg2"),             S_NARG(arg, "arg3"),              S_NARG(arg, "arg4"),         S_NARG(arg, "arg5")),
     321             : #ifdef SYS_arch_prctl
     322             :     SYSCALL(arch_prctl,              2,  S_RET(rdec),    S_NARG(arg, "code"),           S_NARG(arg, "addr")),
     323             : #endif // SYS_arch_prctl
     324             :     SYSCALL(adjtimex,                1,  S_RET(rdec),    S_NARG(ptr, "txc_p")),
     325             :     SYSCALL(setrlimit,               2,  S_RET(rdec),    S_NARG(arg, "resource"),       S_NARG(ptr, "rlim")),
     326             :     SYSCALL(chroot,                  1,  S_RET(rdec),    S_NARG(cstr, "pathname")),
     327             :     SYSCALL(sync,                    0,  S_RET(rdec),    S_NOARGS()),
     328             :     SYSCALL(acct,                    1,  S_RET(rdec),    S_NARG(cstr, "pathname")),
     329             :     SYSCALL(settimeofday,            2,  S_RET(rdec),    S_NARG(ptr, "tv"),             S_NARG(ptr, "tz")),
     330             :     SYSCALL(mount,                   5,  S_RET(rdec),    S_NARG(cstr, "dev_name"),      S_NARG(cstr, "dir_name"),        S_NARG(cstr, "type"),             S_NARG(arg, "flags"),        S_NARG(ptr, "data")),
     331             :     SYSCALL(umount2,                 2,  S_RET(rdec),    S_NARG(cstr, "target"),        S_NARG(arg, "flags")),
     332             :     SYSCALL(swapon,                  2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(arg, "swap_flags")),
     333             :     SYSCALL(swapoff,                 1,  S_RET(rdec),    S_NARG(cstr, "pathname")),
     334             :     SYSCALL(reboot,                  4,  S_RET(rdec),    S_NARG(arg, "magic1"),         S_NARG(arg, "magic2"),           S_NARG(arg, "cmd"),               S_NARG(ptr, "arg")),
     335             :     SYSCALL(sethostname,             2,  S_RET(rdec),    S_NARG(cstr, "name"),          S_NARG(arg, "length")),
     336             :     SYSCALL(setdomainname,           2,  S_RET(rdec),    S_NARG(cstr, "name"),          S_NARG(arg, "length")),
     337             : #ifdef SYS_iopl
     338             :     SYSCALL(iopl,                    1,  S_RET(rdec),    S_NARG(arg, "level")),
     339             : #endif
     340             : #ifdef SYS_ioperm
     341             :     SYSCALL(ioperm,                  3,  S_RET(rdec),    S_NARG(arg, "from"),           S_NARG(arg, "num"),              S_NARG(arg, "on")),
     342             : #endif
     343             : #ifdef SYS_create_module
     344             :     SYSCALL(create_module,           2,  S_RET(rdec),    S_NARG(cstr, "name"),          S_NARG(arg, "size")),
     345             : #endif
     346             :     SYSCALL(init_module,             3,  S_RET(rdec),    S_NARG(ptr, "module_image"),   S_NARG(dec, "length"),           S_NARG(cstr, "param_values")),
     347             :     SYSCALL(delete_module,           2,  S_RET(rdec),    S_NARG(cstr, "name"),          S_NARG(arg, "flags")),
     348             : #ifdef SYS_get_kernel_syms
     349             :     SYSCALL(get_kernel_syms,         1,  S_RET(rdec),    S_NARG(ptr, "table")),
     350             : #endif
     351             : #ifdef SYS_query_module
     352             :     SYSCALL(query_module,            5,  S_RET(rdec),    S_NARG(cstr, "name"),          S_NARG(arg, "which"),            S_NARG(ptr, "buf"),               S_NARG(arg, "bufsize"),      S_NARG(ptr, "ret")),
     353             : #endif
     354             : #ifdef SYS_quotactl
     355             :     SYSCALL(quotactl,                4,  S_RET(rdec),    S_NARG(arg, "cmd"),            S_NARG(cstr, "special"),         S_NARG(arg, "id"),                S_NARG(ptr, "addr")),
     356             : #endif
     357             :     SYSCALL(nfsservctl,              3,  S_RET(rdec),    S_NARG(arg, "cmd"),            S_NARG(ptr, "argp"),             S_NARG(ptr, "resp")),
     358             : #ifdef SYS_getpmsg    
     359             : SYSCALL(getpmsg,                 5,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2"),              S_NARG(arg, "arg3"),         S_NARG(arg, "arg4")),
     360             : #endif
     361             : #ifdef SYS_putmsg
     362             :     SYSCALL(putpmsg,                 5,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2"),              S_NARG(arg, "arg3"),         S_NARG(arg, "arg4")),
     363             : #endif
     364             : #ifdef SYS_afs_syscall
     365             :     SYSCALL(afs_syscall,             5,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2"),              S_NARG(arg, "arg3"),         S_NARG(arg, "arg4")),
     366             : #endif
     367             : #ifdef SYS_tuxcall
     368             :     SYSCALL(tuxcall,                 3,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2")),
     369             : #endif
     370             : #ifdef SYS_security
     371             :     SYSCALL(security,                3,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2")),
     372             : #endif // SYS_security
     373             :     SYSCALL(gettid,                  0,  S_RET(rdec),    S_NOARGS()),
     374             :     SYSCALL(readahead,               3,  S_RET(rdec),    S_UARG(fd),                    S_UARG(offset),                  S_NARG(arg, "count")),
     375             :     SYSCALL(setxattr,                5,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(cstr, "pathname"),        S_NARG(ptr, "value"),             S_NARG(dec, "size"),         S_NARG(arg, "flags")),
     376             :     SYSCALL(lsetxattr,               5,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(cstr, "pathname"),        S_NARG(ptr, "value"),             S_NARG(dec, "size"),         S_NARG(arg, "flags")),
     377             :     SYSCALL(fsetxattr,               5,  S_RET(rdec),    S_UARG(fd),                    S_NARG(cstr, "pathname"),        S_NARG(ptr, "value"),             S_NARG(dec, "size"),         S_NARG(arg, "flags")),
     378             :     SYSCALL(getxattr,                4,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(cstr, "pathname"),        S_NARG(ptr, "value"),             S_NARG(dec, "size")),
     379             :     SYSCALL(lgetxattr,               4,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(cstr, "pathname"),        S_NARG(ptr, "value"),             S_NARG(dec, "size")),
     380             :     SYSCALL(fgetxattr,               4,  S_RET(rdec),    S_UARG(fd),                    S_NARG(cstr, "pathname"),        S_NARG(ptr, "value"),             S_NARG(dec, "size")),
     381             :     SYSCALL(listxattr,               3,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(ptr, "list"),             S_NARG(dec, "size")),
     382             :     SYSCALL(llistxattr,              3,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(ptr, "list"),             S_NARG(dec, "size")),
     383             :     SYSCALL(flistxattr,              3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "list"),             S_NARG(dec, "size")),
     384             :     SYSCALL(removexattr,             2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(cstr, "pathname")),
     385             :     SYSCALL(lremovexattr,            2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(cstr, "pathname")),
     386             :     SYSCALL(fremovexattr,            2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(cstr, "pathname")),
     387             :     SYSCALL(tkill,                   2,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(signum, "sig")),
     388             : #ifdef SYS_time
     389             :     SYSCALL(time,                    1,  S_RET(rdec),    S_NARG(ptr, "tloc")),
     390             : #endif
     391             :     SYSCALL(futex,                   6,  S_RET(rdec),    S_NARG(ptr, "uaddr"),          S_NARG(arg, "op"),               S_NARG(arg, "val"),               S_NARG(ptr, "utime"),        S_NARG(ptr, "uaddr2"),       S_NARG(arg, "val3")),
     392             :     SYSCALL(sched_setaffinity,       3,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(arg, "length"),           S_NARG(ptr, "mask")),
     393             :     SYSCALL(sched_getaffinity,       3,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(arg, "length"),           S_NARG(ptr, "mask")),
     394             : #ifdef SYS_set_thread_area
     395             :     SYSCALL(set_thread_area,         1,  S_RET(rdec),    S_NARG(ptr, "u_info")),
     396             : #endif // SYS_set_thread_area
     397             :     SYSCALL(io_setup,                2,  S_RET(rdec),    S_NARG(dec, "nr_reqs"),        S_NARG(ptr, "ctx")),
     398             :     SYSCALL(io_destroy,              1,  S_RET(rdec),    S_NARG(ptr, "ctx")),
     399             :     SYSCALL(io_getevents,            5,  S_RET(rdec),    S_NARG(ptr, "ctx_id"),         S_NARG(dec, "min_nr"),           S_NARG(dec, "nr"),                S_NARG(ptr, "events"),       S_NARG(ptr, "timeout")),
     400             :     SYSCALL(io_submit,               3,  S_RET(rdec),    S_NARG(ptr, "ctx_id"),         S_NARG(dec, "nr"),               S_NARG(ptr, "iocbpp")),
     401             :     SYSCALL(io_cancel,               3,  S_RET(rdec),    S_NARG(ptr, "ctx_id"),         S_NARG(ptr, "iocb"),             S_NARG(ptr, "result")),
     402             : #ifdef SYS_get_thread_area
     403             :     SYSCALL(get_thread_area,         1,  S_RET(rdec),    S_NARG(ptr, "u_info")),
     404             : #endif // SYS_get_thread_area
     405             :     SYSCALL(lookup_dcookie,          3,  S_RET(rdec),    S_NARG(arg, "cookie64"),       S_NARG(ptr, "buf"),              S_NARG(dec, "length")),
     406             : #ifdef SYS_epoll_create
     407             :     SYSCALL(epoll_create,            3,  S_RET(rdec),    S_NARG(arg, "size")),
     408             : #endif
     409             : #ifdef SYS_epoll_ctl_old
     410             :     SYSCALL(epoll_ctl_old,           4,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2"),              S_NARG(arg, "arg3")),
     411             : #endif // SYS_epoll_ctl_old
     412             : #ifdef SYS_epoll_wait_old
     413             :     SYSCALL(epoll_wait_old,          4,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2"),              S_NARG(arg, "arg3")),
     414             : #endif // SYS_epoll_wait_old
     415             :     SYSCALL(remap_file_pages,        5,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "size"),             S_NARG(mmap_prot, "prot"),        S_NARG(dec, "pgoff"),        S_NARG(arg, "flags")),
     416             :     SYSCALL(getdents64,              3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "dirent"),           S_NARG(arg, "count")),
     417             :     SYSCALL(set_tid_address,         1,  S_RET(rdec),    S_NARG(ptr, "tidptr")),
     418             :     SYSCALL(restart_syscall,         0,  S_RET(rdec),    S_NOARGS()),
     419             : #ifdef SYS_semtimedop
     420             :     SYSCALL(semtimedop,              4,  S_RET(rdec),    S_NARG(dec, "semid"),          S_NARG(ptr, "sops"),             S_NARG(arg, "nsops"),             S_NARG(ptr, "timeout")),
     421             : #endif // SYS_semtimedop
     422             :     SYSCALL(fadvise64,               4,  S_RET(rdec),    S_UARG(fd),                    S_UARG(offset),                  S_NARG(dec, "length"),            S_NARG(arg, "advice")),
     423             :     SYSCALL(timer_create,            3,  S_RET(rdec),    S_NARG(arg, "which_clock"),    S_NARG(ptr, "timer_event_spec"), S_NARG(ptr, "created_timer_id")),
     424             :     SYSCALL(timer_settime,           4,  S_RET(rdec),    S_NARG(arg, "timer_id"),       S_NARG(arg, "flags"),            S_NARG(ptr, "new_setting"),       S_NARG(ptr, "old_setting")),
     425             :     SYSCALL(timer_gettime,           2,  S_RET(rdec),    S_NARG(arg, "timer_id"),       S_NARG(ptr, "setting")),
     426             :     SYSCALL(timer_getoverrun,        1,  S_RET(rdec),    S_NARG(arg, "timer_id")),
     427             :     SYSCALL(timer_delete,            1,  S_RET(rdec),    S_NARG(arg, "timer_id")),
     428             :     SYSCALL(clock_settime,           2,  S_RET(rdec),    S_NARG(arg, "which_clock"),    S_NARG(ptr, "tp")),
     429             :     SYSCALL(clock_gettime,           2,  S_RET(rdec),    S_NARG(arg, "which_clock"),    S_NARG(ptr, "tp")),
     430             :     SYSCALL(clock_getres,            2,  S_RET(rdec),    S_NARG(arg, "which_clock"),    S_NARG(ptr, "tp")),
     431             :     SYSCALL(clock_nanosleep,         4,  S_RET(rdec),    S_NARG(arg, "which_clock"),    S_NARG(arg, "flags"),            S_NARG(ptr, "rqtp"),              S_NARG(ptr, "rmtp")),
     432             :     SYSCALL(exit_group,              1,  S_RET(rnone),   S_NARG(dec, "status")),
     433             : #ifdef SYS_epoll_wait
     434             :     SYSCALL(epoll_wait,              4,  S_RET(rdec),    S_NARG(dec, "epfd"),           S_NARG(ptr, "events"),           S_NARG(dec, "maxevents"),         S_NARG(dec32, "timeout")),
     435             : #endif
     436             :     SYSCALL(epoll_ctl,               4,  S_RET(rdec),    S_NARG(dec, "epfd"),           S_NARG(arg, "op"),               S_UARG(fd),                       S_NARG(ptr, "event")),
     437             :     SYSCALL(tgkill,                  3,  S_RET(rdec),    S_NARG(arg, "tgid"),           S_NARG(dec, "pid"),              S_NARG(signum, "sig")),
     438             : #ifdef SYS_utimes
     439             :     SYSCALL(utimes,                  2,  S_RET(rdec),    S_NARG(cstr, "filename"),      S_NARG(ptr, "utimes")),
     440             : #endif
     441             : #ifdef SYS_vserver
     442             :     SYSCALL(vserver,                 5,  S_RET(rdec),    S_NARG(arg, "arg0"),           S_NARG(arg, "arg1"),             S_NARG(arg, "arg2"),              S_NARG(arg, "arg3"),         S_NARG(arg, "arg4")),
     443             : #endif // SYS_vserver
     444             :     SYSCALL(mbind,                   6,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(octal_mode, "mode"),       S_NARG(ptr, "nmask"),        S_NARG(arg, "maxnode"),      S_NARG(arg, "flags")),
     445             :     SYSCALL(set_mempolicy,           3,  S_RET(rdec),    S_NARG(octal_mode, "mode"),    S_NARG(ptr, "nmask"),            S_NARG(arg, "maxnode")),
     446             :     SYSCALL(get_mempolicy,           5,  S_RET(rdec),    S_NARG(ptr, "policy"),         S_NARG(ptr, "nmask"),            S_NARG(arg, "maxnode"),           S_NARG(ptr, "addr"),         S_NARG(arg, "flags")),
     447             :     SYSCALL(mq_open,                 4,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(open_flags, "oflag"),     S_NARG(octal_mode, "mode"),       S_NARG(ptr, "attr")),
     448             :     SYSCALL(mq_unlink,               1,  S_RET(rdec),    S_NARG(cstr, "pathname")),
     449             :     SYSCALL(mq_timedsend,            5,  S_RET(rdec),    S_NARG(arg, "mqdes"),          S_NARG(cstr, "msg_ptr"),         S_NARG(dec, "msg_len"),           S_NARG(arg, "msg_prio"),     S_NARG(ptr, "abs_timeout")),
     450             :     SYSCALL(mq_timedreceive,         5,  S_RET(rdec),    S_NARG(arg, "mqdes"),          S_NARG(ptr, "msg_ptr"),          S_NARG(dec, "msg_len"),           S_NARG(ptr, "msg_prio"),     S_NARG(ptr, "abs_timeout")),
     451             :     SYSCALL(mq_notify,               2,  S_RET(rdec),    S_NARG(arg, "mqdes"),          S_NARG(ptr, "notification")),
     452             :     SYSCALL(mq_getsetattr,           3,  S_RET(rdec),    S_NARG(arg, "mqdes"),          S_NARG(ptr, "mqstat"),           S_NARG(ptr, "omqstat")),
     453             :     SYSCALL(kexec_load,              4,  S_RET(rdec),    S_NARG(arg, "entry"),          S_NARG(arg, "nr_segments"),      S_NARG(ptr, "segments"),          S_NARG(arg, "flags")),
     454             :     SYSCALL(waitid,                  5,  S_RET(rdec),    S_NARG(arg, "which"),          S_NARG(dec, "pid"),              S_NARG(ptr, "infop"),             S_NARG(arg, "options"),      S_NARG(ptr, "ru")),
     455             :     SYSCALL(add_key,                 5,  S_RET(rdec),    S_NARG(cstr, "type"),          S_NARG(cstr, "description"),     S_NARG(ptr, "payload"),           S_NARG(dec, "plen"),         S_NARG(arg, "destringid")),
     456             :     SYSCALL(request_key,             4,  S_RET(rdec),    S_NARG(cstr, "type"),          S_NARG(cstr, "description"),     S_NARG(cstr, "callout_info"),     S_NARG(arg, "destringid")),
     457             :     SYSCALL(keyctl,                  5,  S_RET(rdec),    S_NARG(arg, "cmd"),            S_NARG(arg, "arg2"),             S_NARG(arg, "arg3"),              S_NARG(arg, "arg4"),         S_NARG(arg, "arg5")),
     458             :     SYSCALL(ioprio_set,              3,  S_RET(rdec),    S_NARG(arg, "which"),          S_NARG(arg, "who"),              S_NARG(dec, "ioprio")),
     459             :     SYSCALL(ioprio_get,              2,  S_RET(rdec),    S_NARG(arg, "which"),          S_NARG(arg, "who")),
     460             : #ifdef SYS_inotify_init
     461             :     SYSCALL(inotify_init,            0,  S_RET(rdec),    S_NOARGS()),
     462             : #endif
     463             :     SYSCALL(inotify_add_watch,       3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(cstr, "pathname"),        S_NARG(arg, "mask")),
     464             :     SYSCALL(inotify_rm_watch,        2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(dec, "wd")),
     465             :     SYSCALL(migrate_pages,           4,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(arg, "maxnode"),          S_NARG(ptr, "from"),              S_NARG(ptr, "to")),
     466             :     SYSCALL(openat,                  3,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(open_flags, "flags")),
     467             :     SYSCALL(mkdirat,                 3,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(octal_mode, "mode")),
     468             :     SYSCALL(mknodat,                 4,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "filename"),        S_NARG(octal_mode, "mode"),       S_NARG(arg, "dev")),
     469             :     SYSCALL(fchownat,                5,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(dec, "user"),              S_NARG(dec, "group"),        S_NARG(arg, "flag")),
     470             : #ifdef SYS_futimesat
     471             :     SYSCALL(futimesat,               3,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(ptr, "utimes")),
     472             : #endif
     473             :     SYSCALL(newfstatat,              4,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(ptr, "statbuf"),           S_NARG(arg, "flag")),
     474             :     SYSCALL(unlinkat,                3,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(arg, "flag")),
     475             :     SYSCALL(renameat,                4,  S_RET(rdec),    S_NARG(atfd, "olddfd"),        S_NARG(cstr, "oldname"),         S_NARG(atfd, "newdfd"),           S_NARG(cstr, "newname")),
     476             :     SYSCALL(linkat,                  5,  S_RET(rdec),    S_NARG(atfd, "olddfd"),        S_NARG(cstr, "oldpath"),         S_NARG(atfd, "newdfd"),           S_NARG(cstr, "newpath"),     S_NARG(arg, "flags")),
     477             :     SYSCALL(symlinkat,               3,  S_RET(rdec),    S_NARG(cstr, "oldname"),       S_NARG(atfd, "newdfd"),          S_NARG(cstr, "newname")),
     478             :     SYSCALL(readlinkat,              4,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(ptr, "buf"),               S_NARG(arg, "bufsiz")),
     479             :     SYSCALL(fchmodat,                3,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "filename"),        S_NARG(octal_mode, "mode")),
     480             :     SYSCALL(faccessat,               3,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(octal_mode, "mode")),
     481             : #ifdef SYS_faccessat2
     482             :     SYSCALL(faccessat2,              4,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(octal_mode, "mode"),       S_NARG(arg, "flags")),
     483             : #endif
     484             :     SYSCALL(pselect6,                6,  S_RET(rdec),    S_NARG(dec, "nfds"),           S_NARG(ptr, "readfds"),          S_NARG(ptr, "writefds"),          S_NARG(ptr, "exceptfds"),    S_NARG(ptr, "timeval"),      S_NARG(ptr, "sigmask")),
     485             :     SYSCALL(ppoll,                   5,  S_RET(rdec),    S_NARG(ptr, "fds"),            S_NARG(dec, "nfds"),             S_NARG(ptr, "tmo_p"),             S_NARG(ptr, "sigmask"),      S_NARG(dec, "sigsetsize")),
     486             :     SYSCALL(unshare,                 1,  S_RET(rdec),    S_NARG(arg, "unshare_flags")),
     487             :     SYSCALL(set_robust_list,         2,  S_RET(rdec),    S_NARG(ptr, "head"),           S_NARG(dec, "length")),
     488             :     SYSCALL(get_robust_list,         3,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "head_ptr"),         S_NARG(ptr, "len_ptr")),
     489             :     SYSCALL(splice,                  6,  S_RET(rdec),    S_NARG(dec, "fd_in"),          S_NARG(ptr, "off_in"),           S_NARG(dec, "fd_out"),            S_NARG(ptr, "off_out"),      S_NARG(dec, "length"),       S_NARG(arg, "flags")),
     490             :     SYSCALL(tee,                     4,  S_RET(rdec),    S_NARG(dec, "fd_in"),          S_NARG(dec, "fd_out"),           S_NARG(dec, "length"),            S_NARG(arg, "flags")),
     491             : #ifdef SYS_sync_file_range
     492             :     SYSCALL(sync_file_range,         4,  S_RET(rdec),    S_UARG(fd),                    S_UARG(offset),                  S_NARG(offset, "nbytes"),          S_NARG(arg, "flags")),
     493             : #endif // SYS_sync_file_range
     494             :     SYSCALL(vmsplice,                4,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "iov"),              S_NARG(arg, "nr_segs"),           S_NARG(arg, "flags")),
     495             :     SYSCALL(move_pages,              6,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(arg, "nr_pages"),         S_NARG(ptr, "pages"),             S_NARG(ptr, "nodes"),        S_NARG(ptr, "status"),       S_NARG(arg, "flags")),
     496             :     SYSCALL(utimensat,               4,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(ptr, "utimes"),            S_NARG(arg, "flags")),
     497             :     SYSCALL(epoll_pwait,             6,  S_RET(rdec),    S_NARG(fd, "epfd"),            S_NARG(ptr, "events"),           S_NARG(dec, "maxevents"),         S_NARG(dec, "timeout"),      S_NARG(ptr, "sigmask"),      S_NARG(dec, "sigsetsize")),
     498             : #ifdef SYS_signalfd
     499             :     SYSCALL(signalfd,                3,  S_RET(rdec),    S_NARG(dec, "ufd"),            S_NARG(ptr, "user_mask"),        S_NARG(dec, "sizemask")),
     500             : #endif
     501             :     SYSCALL(timerfd_create,          2,  S_RET(rdec),    S_NARG(dec, "clockid"),        S_NARG(arg, "flags")),
     502             : #ifdef SYS_eventfd
     503             :     SYSCALL(eventfd,                 1,  S_RET(rdec),    S_NARG(arg, "count")),
     504             : #endif
     505             :     SYSCALL(fallocate,               4,  S_RET(rdec),    S_UARG(fd),                    S_NARG(octal_mode, "mode"),      S_UARG(offset),                   S_NARG(offset, "length")),
     506             :     SYSCALL(timerfd_settime,         4,  S_RET(rdec),    S_NARG(fd, "ufd"),             S_NARG(arg, "flags"),            S_NARG(ptr, "utmr"),              S_NARG(ptr, "otmr")),
     507             :     SYSCALL(timerfd_gettime,         2,  S_RET(rdec),    S_NARG(fd, "ufd"),             S_NARG(ptr, "otmr")),
     508             :     SYSCALL(accept4,                 4,  S_RET(rdec),    S_NARG(fd, "sockfd"),          S_NARG(ptr, "addr"),             S_NARG(ptr, "addrlen"),           S_NARG(arg, "flags")),
     509             :     SYSCALL(signalfd4,               4,  S_RET(rdec),    S_NARG(fd, "ufd"),             S_NARG(ptr, "user_mask"),        S_NARG(dec, "sizemask"),          S_NARG(arg, "flags")),
     510             :     SYSCALL(eventfd2,                2,  S_RET(rdec),    S_NARG(arg, "count"),          S_NARG(arg, "flags")),
     511             :     SYSCALL(epoll_create1,           1,  S_RET(rdec),    S_NARG(arg, "flags")),
     512             :     SYSCALL(dup3,                    3,  S_RET(rdec),    S_NARG(fd, "oldfd"),           S_NARG(fd, "newfd"),             S_NARG(arg, "flags")),
     513             :     SYSCALL(pipe2,                   2,  S_RET(rdec),    S_NARG(ptr, "fildes"),         S_NARG(arg, "flags")),
     514             :     SYSCALL(inotify_init1,           1,  S_RET(rdec),    S_NARG(arg, "flags")),
     515             :     SYSCALL(preadv,                  5,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "iov"),              S_NARG(dec, "iovcnt"),            S_NARG(arg, "pos_l"),        S_NARG(arg, "pos_h")),
     516             :     SYSCALL(pwritev,                 5,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "iov"),              S_NARG(dec, "iovcnt"),            S_NARG(arg, "pos_l"),        S_NARG(arg, "pos_h")),
     517             :     SYSCALL(rt_tgsigqueueinfo,       4,  S_RET(rdec),    S_NARG(arg, "tgid"),           S_NARG(arg, "pid"),              S_NARG(signum, "sig"),            S_NARG(ptr, "uinfo")),
     518             :     SYSCALL(perf_event_open,         5,  S_RET(rdec),    S_NARG(ptr, "attr_uptr"),      S_NARG(dec, "pid"),              S_NARG(dec, "cpu"),               S_NARG(fd, "group_fd"),      S_NARG(arg, "flags")),
     519             :     SYSCALL(recvmmsg,                5,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "msg"),              S_NARG(dec, "vlen"),              S_NARG(arg, "flags"),        S_NARG(ptr, "timeout")),
     520             :     SYSCALL(fanotify_init,           2,  S_RET(rdec),    S_NARG(arg, "flags"),          S_NARG(arg, "event_f_flags")),
     521             :     SYSCALL(fanotify_mark,           5,  S_RET(rdec),    S_NARG(fd, "fanotify_fd"),     S_NARG(arg, "flags"),            S_NARG(arg, "mask"),              S_UARG(fd),                  S_NARG(cstr, "pathname")),
     522             :     SYSCALL(prlimit64,               4,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(arg, "resource"),         S_NARG(ptr, "new_rlim"),          S_NARG(ptr, "old_rlim")),
     523             :     SYSCALL(name_to_handle_at,       5,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(ptr, "handle"),            S_NARG(ptr, "mnt_id"),       S_NARG(arg, "flag")),
     524             :     SYSCALL(open_by_handle_at,       3,  S_RET(rdec),    S_NARG(fd, "mountdirfd"),      S_NARG(ptr, "handle"),           S_NARG(arg, "flags")),
     525             :     SYSCALL(clock_adjtime,           2,  S_RET(rdec),    S_NARG(arg, "which_clock"),    S_NARG(ptr, "tx")),
     526             :     SYSCALL(syncfs,                  2,  S_RET(rdec),    S_UARG(fd)),
     527             :     SYSCALL(sendmmsg,                4,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "msg"),              S_NARG(dec, "vlen"),              S_NARG(arg, "flags")),
     528             :     SYSCALL(setns,                   2,  S_RET(rdec),    S_UARG(fd),                    S_NARG(arg, "nstype")),
     529             :     SYSCALL(getcpu,                  3,  S_RET(rdec),    S_NARG(ptr, "cpu"),            S_NARG(ptr, "node"),             S_NARG(ptr, "cache")),
     530             :     SYSCALL(process_vm_readv,        6,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "local_iov"),        S_NARG(dec, "liovcnt"),           S_NARG(ptr, "remote_iov"),   S_NARG(dec, "riovcnt"),      S_NARG(arg, "flags")),
     531             :     SYSCALL(process_vm_writev,       6,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "local_iov"),        S_NARG(dec, "liovcnt"),           S_NARG(ptr, "remote_iov"),   S_NARG(dec, "riovcnt"),      S_NARG(arg, "flags")),
     532             :     SYSCALL(kcmp,                    5,  S_RET(rdec),    S_NARG(arg, "pid1"),           S_NARG(arg, "pid2"),             S_NARG(arg, "type"),              S_NARG(arg, "idx1"),         S_NARG(arg, "idx2")),
     533             :     SYSCALL(finit_module,            3,  S_RET(rdec),    S_UARG(fd),                    S_NARG(cstr, "param_values"),    S_NARG(arg, "flags")),
     534             : #ifdef SYS_sched_setattr
     535             :     SYSCALL(sched_setattr,           3,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "attr"),             S_NARG(arg, "flags")),
     536             : #endif // SYS_sched_setattr
     537             : #ifdef SYS_sched_getattr
     538             :     SYSCALL(sched_getattr,           4,  S_RET(rdec),    S_NARG(dec, "pid"),            S_NARG(ptr, "attr"),             S_NARG(dec, "size"),              S_NARG(arg, "flags")),
     539             : #endif // SYS_sched_getattr
     540             : #ifdef SYS_renameat2
     541             :     SYSCALL(renameat2,               5,  S_RET(rdec),    S_NARG(atfd, "olddfd"),        S_NARG(cstr, "oldpath"),         S_NARG(atfd, "newdfd"),           S_NARG(cstr, "newpath"),     S_NARG(arg, "flags")),
     542             : #endif // SYS_renameat2
     543             : #ifdef SYS_seccomp
     544             :     SYSCALL(seccomp,                 3,  S_RET(rdec),    S_NARG(arg, "op"),             S_NARG(arg, "flags"),            S_NARG(ptr, "uargs")),
     545             : #endif // SYS_seccomp
     546             : #ifdef SYS_getrandom
     547             :     SYSCALL(getrandom,               3,  S_RET(rdec),    S_NARG(ptr, "buf"),            S_NARG(arg, "count"),            S_NARG(arg, "flags")),
     548             : #endif // SYS_getrandom
     549             : #ifdef SYS_memfd_create
     550             :     SYSCALL(memfd_create,            2,  S_RET(rdec),    S_NARG(cstr, "pathname"),      S_NARG(arg, "flags")),
     551             : #endif // SYS_memfd_create
     552             : #ifdef SYS_kexec_file_load
     553             :     SYSCALL(kexec_file_load,         5,  S_RET(rdec),    S_NARG(fd, "kernel_fd"),       S_NARG(fd, "initrd_fd"),         S_NARG(arg, "cmdline_len"),       S_NARG(cstr, "cmdline"),     S_NARG(arg, "flags")),
     554             : #endif // SYS_kexec_file_load
     555             : 
     556             : #ifdef SYS_bpf
     557             :     SYSCALL(bpf,                     2,  S_RET(rdec),    S_NARG(arg, "cmd"),            S_NARG(ptr, "attr"),             S_NARG(arg, "size")),
     558             : #endif // SYS_bpf
     559             : 
     560             : #ifdef SYS_execveat
     561             :     SYSCALL(execveat,                5,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(ptr, "argv"),              S_NARG(ptr, "envp"),         S_NARG(arg, "flags")),
     562             : #endif // SYS_execveat
     563             : 
     564             : #ifdef SYS_userfaultfd
     565             :     SYSCALL(userfaultfd,             2,  S_RET(rdec),    S_NARG(arg, "flags")),
     566             : #endif // SYS_userfaultfd
     567             : 
     568             : #ifdef SYS_membarrier
     569             :     SYSCALL(membarrier,              2,  S_RET(rdec),    S_NARG(arg, "cmd"),            S_NARG(arg, "flags")),
     570             : #endif // SYS_membarrier
     571             : 
     572             : #ifdef SYS_mlock2
     573             :     SYSCALL(mlock2,                  3,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(arg, "flags")),
     574             : #endif // SYS_mlock2
     575             : #ifdef SYS_copy_file_range
     576             :     SYSCALL(copy_file_range,         6,  S_RET(rdec),    S_NARG(fd, "fd_in"),           S_NARG(ptr, "off_in"),           S_NARG(fd, "fd_out"),             S_NARG(ptr, "off_out"),      S_NARG(dec, "length"),       S_NARG(arg, "flags")),
     577             : #endif
     578             : #ifdef SYS_preadv2
     579             :     SYSCALL(preadv2,                 6,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "iov"),              S_NARG(arg, "vlen"),              S_NARG(arg, "pos_l"),        S_NARG(arg, "pos_h"),          S_NARG(arg, "flags")),
     580             : #endif // SYS_preadv2
     581             : 
     582             : #ifdef SYS_pwritev2
     583             :     SYSCALL(pwritev2,                6,  S_RET(rdec),    S_UARG(fd),                    S_NARG(ptr, "iov"),              S_NARG(arg, "vlen"),              S_NARG(arg, "pos_l"),        S_NARG(arg, "pos_h"),          S_NARG(arg, "flags")),
     584             : #endif // SYS_pwritev2
     585             : #ifdef SYS_pkey_mprotect
     586             :     SYSCALL(pkey_mprotect,           4,  S_RET(rdec),    S_NARG(ptr, "addr"),           S_NARG(dec, "length"),           S_NARG(mmap_prot, "prot"),        S_NARG(dec, "pkey")),
     587             :     SYSCALL(pkey_alloc,              2,  S_RET(rdec),    S_NARG(arg, "flags"),          S_NARG(arg, "init_val")),
     588             :     SYSCALL(pkey_free,               1,  S_RET(rdec),    S_NARG(dec, "pkey")),
     589             : #endif
     590             : #ifdef SYS_statx
     591             :     SYSCALL(statx,                   5,  S_RET(rdec),    S_NARG(atfd, "dfd"),           S_NARG(cstr, "pathname"),        S_NARG(arg, "flags"),             S_NARG(arg, "mask"),         S_NARG(ptr, "buffer")),
     592             : #endif // SYS_statx
     593             : 
     594             : #ifdef SYS_io_pgetevents
     595             :     SYSCALL(io_pgetevents,           6,  S_RET(rdec),    S_NARG(ptr, "ctx_id"),         S_NARG(dec, "min_nr"),           S_NARG(dec, "nr"),                S_NARG(ptr, "events"),       S_NARG(ptr, "timeout"),      S_NARG(ptr, "sig")),
     596             : #endif // SYS_io_pgetevents
     597             : 
     598             : #ifdef SYS_rseq
     599             :     SYSCALL(rseq,                    4,  S_RET(rdec),    S_NARG(ptr, "rseq"),           S_NARG(dec, "rseq_len"),         S_NARG(arg, "flags"),             S_NARG(signum, "sig"))
     600             : #endif // SYS_rseq
     601             : };
     602             : 
     603             : static const struct syscall_info unknown_syscall = {
     604             :     .s_name = "unknown_syscall",
     605             :     .s_nargs = MAX_SYSCALL_ARGS,
     606             :     .s_return_type = S_RET(rdec),
     607             :     .s_args = {
     608             :         S_NARG(arg, "arg0"),
     609             :         S_NARG(arg, "arg1"),
     610             :         S_NARG(arg, "arg2"),
     611             :         S_NARG(arg, "arg3"),
     612             :         S_NARG(arg, "arg4"),
     613             :         S_NARG(arg, "arg5"),
     614             :     }
     615             : };
     616             : 
     617             : static const struct syscall_info open_with_o_creat = {
     618             :     .s_name = "open",
     619             :     .s_nargs = 3,
     620             :     .s_return_type = S_RET(rdec),
     621             :         .s_args = {
     622             :             S_NARG(cstr, "pathname"),
     623             :             S_NARG(open_flags, "flags"),
     624             :             S_NARG(octal_mode, "mode")
     625             :         }
     626             : };
     627             : 
     628             : static const struct syscall_info openat_with_o_creat = {
     629             :     .s_name = "openat",
     630             :     .s_nargs = 4,
     631             :     .s_return_type = S_RET(rdec),
     632             :         .s_args = {
     633             :             S_NARG(atfd, "dfd"),
     634             :             S_NARG(cstr, "pathname"),
     635             :             S_NARG(open_flags, "flags"),
     636             :             S_NARG(octal_mode, "mode")
     637             :         }
     638             : };
     639             : 
     640             : static bool
     641       21556 : requires_mode_arg(int flags) {
     642             : 
     643       21556 :     if((flags & O_CREAT) == O_CREAT) {
     644             :         return true;
     645             :     }
     646             : 
     647             : #ifdef O_TMPFILE
     648        5662 :     if ((flags & O_TMPFILE) == O_TMPFILE) {
     649           0 :         return true;
     650             :     }
     651             : #endif
     652             : 
     653             :     return false;
     654             : }
     655             : 
     656             : #include <signal.h>
     657             : 
     658             : /**
     659             :  * get_syscall_info - Return a syscall descriptor
     660             :  *
     661             :  * This function returns a pointer to a syscall_info structure that
     662             :  * appropriately describes the system call identified by 'syscall_number'.
     663             :  */
     664             : const struct syscall_info*
     665     2930238 : get_syscall_info(const long syscall_number, const long* argv) {
     666             : 
     667     2930238 :     if(syscall_number < 0 ||
     668             :        syscall_number >= (long) ARRAY_SIZE(syscall_table)) {
     669             :         return &unknown_syscall;
     670             :     }
     671             : 
     672     2930238 :     if(syscall_table[syscall_number].s_name == NULL) {
     673             :         return &unknown_syscall;
     674             :     }
     675             : 
     676     2930238 :     if(argv == NULL) {
     677     1758156 :         return &syscall_table[syscall_number];
     678             :     }
     679             : #ifdef SYS_open
     680     1172082 :     if(syscall_number == SYS_open && requires_mode_arg(argv[1])) {
     681             :         return &open_with_o_creat;
     682             :     }
     683             : #endif
     684     1172082 :     if(syscall_number == SYS_openat && requires_mode_arg(argv[2])) {
     685             :         return &openat_with_o_creat;
     686             :     }
     687             : 
     688     1156188 :     return &syscall_table[syscall_number];
     689             : }
     690             : 
     691             : struct named_syscall_entry {
     692             :     const char* s_name;
     693             :     const struct syscall_info* s_info;
     694             : };
     695             : 
     696             : #define SYSCALL_BY_NAME(id)            \
     697             : {                                      \
     698             :     .s_name = #id,                     \
     699             :     .s_info = &syscall_table[SYS_##id] \
     700             : }
     701             : 
     702             : /** Linux syscalls ordered by name */
     703             : const struct named_syscall_entry syscalls_by_name[] = {
     704             : #ifdef SYS__sysctl
     705             :     SYSCALL_BY_NAME(_sysctl),
     706             : #endif
     707             :     SYSCALL_BY_NAME(accept),
     708             :     SYSCALL_BY_NAME(accept4),
     709             : #ifdef SYS_access
     710             :     SYSCALL_BY_NAME(access),
     711             : #endif
     712             :     SYSCALL_BY_NAME(acct),
     713             :     SYSCALL_BY_NAME(add_key),
     714             :     SYSCALL_BY_NAME(adjtimex),
     715             : #ifdef SYS_afs_syscall
     716             :     SYSCALL_BY_NAME(afs_syscall),
     717             : #endif
     718             : #ifdef SYS_alarm
     719             :     SYSCALL_BY_NAME(alarm),
     720             : #endif
     721             : #ifdef SYS_arch_prctl
     722             :     SYSCALL_BY_NAME(arch_prctl),
     723             : #endif // SYS_arch_prctl
     724             :     SYSCALL_BY_NAME(bind),
     725             : #ifdef SYS_bpf
     726             :     SYSCALL_BY_NAME(bpf),
     727             : #endif // SYS_bpf
     728             :     SYSCALL_BY_NAME(brk),
     729             :     SYSCALL_BY_NAME(capget),
     730             :     SYSCALL_BY_NAME(capset),
     731             :     SYSCALL_BY_NAME(chdir),
     732             : #ifdef SYS_chmod
     733             :     SYSCALL_BY_NAME(chmod),
     734             : #endif
     735             : #ifdef SYS_chown
     736             :     SYSCALL_BY_NAME(chown),
     737             : #endif
     738             :     SYSCALL_BY_NAME(chroot),
     739             :     SYSCALL_BY_NAME(clock_adjtime),
     740             :     SYSCALL_BY_NAME(clock_getres),
     741             :     SYSCALL_BY_NAME(clock_gettime),
     742             :     SYSCALL_BY_NAME(clock_nanosleep),
     743             :     SYSCALL_BY_NAME(clock_settime),
     744             :     SYSCALL_BY_NAME(clone),
     745             :     SYSCALL_BY_NAME(close),
     746             :     SYSCALL_BY_NAME(connect),
     747             : #ifdef SYS_copy_file_range
     748             :     SYSCALL_BY_NAME(copy_file_range),
     749             : #endif // SYS_copy_file_range
     750             : #ifdef SYS_creat
     751             :     SYSCALL_BY_NAME(creat),
     752             : #endif
     753             : #ifdef SYS_create_module
     754             :     SYSCALL_BY_NAME(create_module),
     755             : #endif
     756             :     SYSCALL_BY_NAME(delete_module),
     757             :     SYSCALL_BY_NAME(dup),
     758             : #ifdef SYS_dup2
     759             :     SYSCALL_BY_NAME(dup2),
     760             : #endif
     761             :     SYSCALL_BY_NAME(dup3),
     762             : #ifdef SYS_epoll_create
     763             :     SYSCALL_BY_NAME(epoll_create),
     764             : #endif
     765             :     SYSCALL_BY_NAME(epoll_create1),
     766             :     SYSCALL_BY_NAME(epoll_ctl),
     767             : #ifdef SYS_epoll_ctl_old
     768             :     SYSCALL_BY_NAME(epoll_ctl_old),
     769             : #endif // SYS_epoll_ctl_old
     770             :     SYSCALL_BY_NAME(epoll_pwait),
     771             : #ifdef SYS_epoll_wait
     772             :     SYSCALL_BY_NAME(epoll_wait),
     773             : #endif
     774             : #ifdef SYS_epoll_wait_old
     775             :     SYSCALL_BY_NAME(epoll_wait_old),
     776             : #endif // SYS_epoll_wait_old
     777             : #ifdef SYS_eventfd
     778             :     SYSCALL_BY_NAME(eventfd),
     779             : #endif
     780             :     SYSCALL_BY_NAME(eventfd2),
     781             :     SYSCALL_BY_NAME(execve),
     782             : #ifdef SYS_execveat
     783             :     SYSCALL_BY_NAME(execveat),
     784             : #endif // SYS_execveat
     785             :     SYSCALL_BY_NAME(exit),
     786             :     SYSCALL_BY_NAME(exit_group),
     787             :     SYSCALL_BY_NAME(faccessat),
     788             : #ifdef SYS_faccessat2
     789             :     SYSCALL_BY_NAME(faccessat2),
     790             : #endif
     791             :     SYSCALL_BY_NAME(fadvise64),
     792             :     SYSCALL_BY_NAME(fallocate),
     793             :     SYSCALL_BY_NAME(fanotify_init),
     794             :     SYSCALL_BY_NAME(fanotify_mark),
     795             :     SYSCALL_BY_NAME(fchdir),
     796             :     SYSCALL_BY_NAME(fchmod),
     797             :     SYSCALL_BY_NAME(fchmodat),
     798             :     SYSCALL_BY_NAME(fchown),
     799             :     SYSCALL_BY_NAME(fchownat),
     800             :     SYSCALL_BY_NAME(fcntl),
     801             :     SYSCALL_BY_NAME(fdatasync),
     802             :     SYSCALL_BY_NAME(fgetxattr),
     803             :     SYSCALL_BY_NAME(finit_module),
     804             :     SYSCALL_BY_NAME(flistxattr),
     805             :     SYSCALL_BY_NAME(flock),
     806             : #ifdef SYS_fork
     807             :     SYSCALL_BY_NAME(fork),
     808             : #endif
     809             :     SYSCALL_BY_NAME(fremovexattr),
     810             :     SYSCALL_BY_NAME(fsetxattr),
     811             :     SYSCALL_BY_NAME(fstat),
     812             :     SYSCALL_BY_NAME(fstatfs),
     813             :     SYSCALL_BY_NAME(fsync),
     814             :     SYSCALL_BY_NAME(ftruncate),
     815             :     SYSCALL_BY_NAME(futex),
     816             : #ifdef SYS_futimesat
     817             :     SYSCALL_BY_NAME(futimesat),
     818             : #endif
     819             : #ifdef SYS_get_kernel_syms
     820             :     SYSCALL_BY_NAME(get_kernel_syms),
     821             : #endif
     822             :     SYSCALL_BY_NAME(get_mempolicy),
     823             :     SYSCALL_BY_NAME(get_robust_list),
     824             : #ifdef SYS_get_thread_area
     825             :     SYSCALL_BY_NAME(get_thread_area),
     826             : #endif // SYS_get_thread_area
     827             :     SYSCALL_BY_NAME(getcpu),
     828             :     SYSCALL_BY_NAME(getcwd),
     829             : #ifdef SYS_getdents
     830             :     SYSCALL_BY_NAME(getdents),
     831             : #endif
     832             :     SYSCALL_BY_NAME(getdents64),
     833             :     SYSCALL_BY_NAME(getegid),
     834             :     SYSCALL_BY_NAME(geteuid),
     835             :     SYSCALL_BY_NAME(getgid),
     836             :     SYSCALL_BY_NAME(getgroups),
     837             :     SYSCALL_BY_NAME(getitimer),
     838             :     SYSCALL_BY_NAME(getpeername),
     839             :     SYSCALL_BY_NAME(getpgid),
     840             : #ifdef SYS_getpgrp
     841             :     SYSCALL_BY_NAME(getpgrp),
     842             : #endif
     843             :     SYSCALL_BY_NAME(getpid),
     844             : #ifdef SYS_getpmsg
     845             :     SYSCALL_BY_NAME(getpmsg),
     846             : #endif
     847             :     SYSCALL_BY_NAME(getppid),
     848             :     SYSCALL_BY_NAME(getpriority),
     849             :     SYSCALL_BY_NAME(getrandom),
     850             :     SYSCALL_BY_NAME(getresgid),
     851             :     SYSCALL_BY_NAME(getresuid),
     852             :     SYSCALL_BY_NAME(getrlimit),
     853             :     SYSCALL_BY_NAME(getrusage),
     854             :     SYSCALL_BY_NAME(getsid),
     855             :     SYSCALL_BY_NAME(getsockname),
     856             :     SYSCALL_BY_NAME(getsockopt),
     857             :     SYSCALL_BY_NAME(gettid),
     858             :     SYSCALL_BY_NAME(gettimeofday),
     859             :     SYSCALL_BY_NAME(getuid),
     860             :     SYSCALL_BY_NAME(getxattr),
     861             :     SYSCALL_BY_NAME(init_module),
     862             :     SYSCALL_BY_NAME(inotify_add_watch),
     863             : #ifdef SYS_inotify_init
     864             :     SYSCALL_BY_NAME(inotify_init),
     865             : #endif
     866             :     SYSCALL_BY_NAME(inotify_init1),
     867             :     SYSCALL_BY_NAME(inotify_rm_watch),
     868             :     SYSCALL_BY_NAME(io_cancel),
     869             :     SYSCALL_BY_NAME(io_destroy),
     870             :     SYSCALL_BY_NAME(io_getevents),
     871             : #ifdef SYS_io_pgetevents
     872             :     SYSCALL_BY_NAME(io_pgetevents),
     873             : #endif // SYS_io_pgetevents
     874             :     SYSCALL_BY_NAME(io_setup),
     875             :     SYSCALL_BY_NAME(io_submit),
     876             :     SYSCALL_BY_NAME(ioctl),
     877             : #ifdef SYS_ioperm
     878             :     SYSCALL_BY_NAME(ioperm),
     879             : #endif
     880             : #ifdef SYS_iopl
     881             :     SYSCALL_BY_NAME(iopl),
     882             : #endif
     883             :     SYSCALL_BY_NAME(ioprio_get),
     884             :     SYSCALL_BY_NAME(ioprio_set),
     885             :     SYSCALL_BY_NAME(kcmp),
     886             : #ifdef SYS_kexec_file_load
     887             :     SYSCALL_BY_NAME(kexec_file_load),
     888             : #endif
     889             :     SYSCALL_BY_NAME(kexec_load),
     890             :     SYSCALL_BY_NAME(keyctl),
     891             :     SYSCALL_BY_NAME(kill),
     892             : #ifdef SYS_lchown
     893             :     SYSCALL_BY_NAME(lchown),
     894             : #endif
     895             :     SYSCALL_BY_NAME(lgetxattr),
     896             : #ifdef SYS_link
     897             :     SYSCALL_BY_NAME(link),
     898             : #endif
     899             :     SYSCALL_BY_NAME(linkat),
     900             :     SYSCALL_BY_NAME(listen),
     901             :     SYSCALL_BY_NAME(listxattr),
     902             :     SYSCALL_BY_NAME(llistxattr),
     903             :     SYSCALL_BY_NAME(lookup_dcookie),
     904             :     SYSCALL_BY_NAME(lremovexattr),
     905             :     SYSCALL_BY_NAME(lseek),
     906             :     SYSCALL_BY_NAME(lsetxattr),
     907             : #ifdef SYS_lstat
     908             :     SYSCALL_BY_NAME(lstat),
     909             : #endif
     910             :     SYSCALL_BY_NAME(madvise),
     911             :     SYSCALL_BY_NAME(mbind),
     912             : #ifdef SYS_membarrier
     913             :     SYSCALL_BY_NAME(membarrier),
     914             : #endif // SYS_membarrier
     915             :     SYSCALL_BY_NAME(memfd_create),
     916             :     SYSCALL_BY_NAME(migrate_pages),
     917             :     SYSCALL_BY_NAME(mincore),
     918             : #ifdef SYS_mkdir
     919             :     SYSCALL_BY_NAME(mkdir),
     920             : #endif
     921             :     SYSCALL_BY_NAME(mkdirat),
     922             : #ifdef SYS_mknod
     923             :     SYSCALL_BY_NAME(mknod),
     924             : #endif
     925             :     SYSCALL_BY_NAME(mknodat),
     926             :     SYSCALL_BY_NAME(mlock),
     927             : #ifdef SYS_mlock2
     928             :     SYSCALL_BY_NAME(mlock2),
     929             : #endif // SYS_mlock2
     930             :     SYSCALL_BY_NAME(mlockall),
     931             :     SYSCALL_BY_NAME(mmap),
     932             : #ifdef SYS_modify_ldt
     933             :     SYSCALL_BY_NAME(modify_ldt),
     934             : #endif
     935             :     SYSCALL_BY_NAME(mount),
     936             :     SYSCALL_BY_NAME(move_pages),
     937             :     SYSCALL_BY_NAME(mprotect),
     938             :     SYSCALL_BY_NAME(mq_getsetattr),
     939             :     SYSCALL_BY_NAME(mq_notify),
     940             :     SYSCALL_BY_NAME(mq_open),
     941             :     SYSCALL_BY_NAME(mq_timedreceive),
     942             :     SYSCALL_BY_NAME(mq_timedsend),
     943             :     SYSCALL_BY_NAME(mq_unlink),
     944             :     SYSCALL_BY_NAME(mremap),
     945             : #ifdef SYS_msgctl
     946             :     SYSCALL_BY_NAME(msgctl),
     947             : #endif // SYS_msgctl
     948             : #ifdef SYS_msgget
     949             :     SYSCALL_BY_NAME(msgget),
     950             : #endif // SYS_msgget
     951             : #ifdef SYS_msgrcv
     952             :     SYSCALL_BY_NAME(msgrcv),
     953             : #endif // SYS_msgrcv
     954             : #ifdef SYS_msgsnd
     955             :     SYSCALL_BY_NAME(msgsnd),
     956             : #endif // SYS_msgsnd
     957             :     SYSCALL_BY_NAME(msync),
     958             :     SYSCALL_BY_NAME(munlock),
     959             :     SYSCALL_BY_NAME(munlockall),
     960             :     SYSCALL_BY_NAME(munmap),
     961             :     SYSCALL_BY_NAME(name_to_handle_at),
     962             :     SYSCALL_BY_NAME(nanosleep),
     963             :     SYSCALL_BY_NAME(newfstatat),
     964             :     SYSCALL_BY_NAME(nfsservctl),
     965             : #ifdef SYS_open
     966             :     SYSCALL_BY_NAME(open),
     967             : #endif
     968             :     SYSCALL_BY_NAME(open_by_handle_at),
     969             :     SYSCALL_BY_NAME(openat),
     970             : #ifdef SYS_pause
     971             :     SYSCALL_BY_NAME(pause),
     972             : #endif
     973             :     SYSCALL_BY_NAME(perf_event_open),
     974             :     SYSCALL_BY_NAME(personality),
     975             : #ifdef SYS_pipe
     976             :     SYSCALL_BY_NAME(pipe),
     977             : #endif
     978             :     SYSCALL_BY_NAME(pipe2),
     979             :     SYSCALL_BY_NAME(pivot_root),
     980             : #ifdef SYS_poll
     981             :     SYSCALL_BY_NAME(poll),
     982             : #endif
     983             :     SYSCALL_BY_NAME(ppoll),
     984             :     SYSCALL_BY_NAME(prctl),
     985             :     SYSCALL_BY_NAME(pread64),
     986             :     SYSCALL_BY_NAME(preadv),
     987             : #ifdef SYS_preadv2
     988             :     SYSCALL_BY_NAME(preadv2),
     989             : #endif // SYS_preadv2
     990             : #ifdef SYS_pkey_mprotect
     991             :     SYSCALL_BY_NAME(pkey_mprotect),
     992             : #endif // SYS_pkey_mprotect
     993             : #ifdef SYS_pkey_alloc
     994             :     SYSCALL_BY_NAME(pkey_alloc),
     995             : #endif // SYS_pkey_alloc
     996             : #ifdef SYS_pkey_free
     997             :     SYSCALL_BY_NAME(pkey_free),
     998             : #endif // SYS_pkey_free
     999             :     SYSCALL_BY_NAME(prlimit64),
    1000             :     SYSCALL_BY_NAME(process_vm_readv),
    1001             :     SYSCALL_BY_NAME(process_vm_writev),
    1002             :     SYSCALL_BY_NAME(pselect6),
    1003             :     SYSCALL_BY_NAME(ptrace),
    1004             : #ifdef SYS_putpmsg
    1005             :     SYSCALL_BY_NAME(putpmsg),
    1006             : #endif
    1007             :     SYSCALL_BY_NAME(pwrite64),
    1008             :     SYSCALL_BY_NAME(pwritev),
    1009             : #ifdef SYS_pwritev2
    1010             :     SYSCALL_BY_NAME(pwritev2),
    1011             : #endif // SYS_pwritev2
    1012             : #ifdef SYS_query_module
    1013             :     SYSCALL_BY_NAME(query_module),
    1014             : #endif
    1015             :     SYSCALL_BY_NAME(quotactl),
    1016             :     SYSCALL_BY_NAME(read),
    1017             :     SYSCALL_BY_NAME(readahead),
    1018             : #ifdef SYS_readlink
    1019             :     SYSCALL_BY_NAME(readlink),
    1020             : #endif
    1021             :     SYSCALL_BY_NAME(readlinkat),
    1022             :     SYSCALL_BY_NAME(readv),
    1023             :     SYSCALL_BY_NAME(reboot),
    1024             :     SYSCALL_BY_NAME(recvfrom),
    1025             :     SYSCALL_BY_NAME(recvmmsg),
    1026             :     SYSCALL_BY_NAME(recvmsg),
    1027             :     SYSCALL_BY_NAME(remap_file_pages),
    1028             :     SYSCALL_BY_NAME(removexattr),
    1029             : #ifdef SYS_rename
    1030             :     SYSCALL_BY_NAME(rename),
    1031             : #endif
    1032             :     SYSCALL_BY_NAME(renameat),
    1033             :     SYSCALL_BY_NAME(renameat2),
    1034             :     SYSCALL_BY_NAME(request_key),
    1035             :     SYSCALL_BY_NAME(restart_syscall),
    1036             : #ifdef SYS_rmdir
    1037             :     SYSCALL_BY_NAME(rmdir),
    1038             : #endif
    1039             : #ifdef SYS_rseq
    1040             :     SYSCALL_BY_NAME(rseq),
    1041             : #endif // SYS_rseq
    1042             :     SYSCALL_BY_NAME(rt_sigaction),
    1043             :     SYSCALL_BY_NAME(rt_sigpending),
    1044             :     SYSCALL_BY_NAME(rt_sigprocmask),
    1045             :     SYSCALL_BY_NAME(rt_sigqueueinfo),
    1046             :     SYSCALL_BY_NAME(rt_sigreturn),
    1047             :     SYSCALL_BY_NAME(rt_sigsuspend),
    1048             :     SYSCALL_BY_NAME(rt_sigtimedwait),
    1049             :     SYSCALL_BY_NAME(rt_tgsigqueueinfo),
    1050             :     SYSCALL_BY_NAME(sched_get_priority_max),
    1051             :     SYSCALL_BY_NAME(sched_get_priority_min),
    1052             :     SYSCALL_BY_NAME(sched_getaffinity),
    1053             :     SYSCALL_BY_NAME(sched_getattr),
    1054             :     SYSCALL_BY_NAME(sched_getparam),
    1055             :     SYSCALL_BY_NAME(sched_getscheduler),
    1056             :     SYSCALL_BY_NAME(sched_rr_get_interval),
    1057             :     SYSCALL_BY_NAME(sched_setaffinity),
    1058             :     SYSCALL_BY_NAME(sched_setattr),
    1059             :     SYSCALL_BY_NAME(sched_setparam),
    1060             :     SYSCALL_BY_NAME(sched_setscheduler),
    1061             :     SYSCALL_BY_NAME(sched_yield),
    1062             :     SYSCALL_BY_NAME(seccomp),
    1063             : #ifdef SYS_security
    1064             :     SYSCALL_BY_NAME(security),
    1065             : #endif // SYS_security
    1066             : #ifdef SYS_select
    1067             :     SYSCALL_BY_NAME(select),
    1068             : #endif
    1069             : #ifdef SYS_semctl
    1070             :     SYSCALL_BY_NAME(semctl),
    1071             : #endif // SYS_semctl
    1072             : #ifdef SYS_semget
    1073             :     SYSCALL_BY_NAME(semget),
    1074             : #endif // SYS_semget
    1075             : #ifdef SYS_semop
    1076             :     SYSCALL_BY_NAME(semop),
    1077             : #endif // SYS_semop
    1078             : #ifdef SYS_semtimedop
    1079             :     SYSCALL_BY_NAME(semtimedop),
    1080             : #endif // SYS_semtimedop
    1081             :     SYSCALL_BY_NAME(sendfile),
    1082             :     SYSCALL_BY_NAME(sendmmsg),
    1083             :     SYSCALL_BY_NAME(sendmsg),
    1084             :     SYSCALL_BY_NAME(sendto),
    1085             :     SYSCALL_BY_NAME(set_mempolicy),
    1086             :     SYSCALL_BY_NAME(set_robust_list),
    1087             : #ifdef SYS_set_thread_area
    1088             :     SYSCALL_BY_NAME(set_thread_area),
    1089             : #endif // SYS_set_thread_area
    1090             :     SYSCALL_BY_NAME(set_tid_address),
    1091             :     SYSCALL_BY_NAME(setdomainname),
    1092             :     SYSCALL_BY_NAME(setfsgid),
    1093             :     SYSCALL_BY_NAME(setfsuid),
    1094             :     SYSCALL_BY_NAME(setgid),
    1095             :     SYSCALL_BY_NAME(setgroups),
    1096             :     SYSCALL_BY_NAME(sethostname),
    1097             :     SYSCALL_BY_NAME(setitimer),
    1098             :     SYSCALL_BY_NAME(setns),
    1099             :     SYSCALL_BY_NAME(setpgid),
    1100             :     SYSCALL_BY_NAME(setpriority),
    1101             :     SYSCALL_BY_NAME(setregid),
    1102             :     SYSCALL_BY_NAME(setresgid),
    1103             :     SYSCALL_BY_NAME(setresuid),
    1104             :     SYSCALL_BY_NAME(setreuid),
    1105             :     SYSCALL_BY_NAME(setrlimit),
    1106             :     SYSCALL_BY_NAME(setsid),
    1107             :     SYSCALL_BY_NAME(setsockopt),
    1108             :     SYSCALL_BY_NAME(settimeofday),
    1109             :     SYSCALL_BY_NAME(setuid),
    1110             :     SYSCALL_BY_NAME(setxattr),
    1111             : #ifdef SYS_shmat
    1112             :     SYSCALL_BY_NAME(shmat),
    1113             : #endif // SYS_shmat
    1114             : #ifdef SYS_shmctl
    1115             :     SYSCALL_BY_NAME(shmctl),
    1116             : #endif // SYS_shmctl
    1117             : #ifdef SYS_shmdt
    1118             :     SYSCALL_BY_NAME(shmdt),
    1119             : #endif // SYS_shmdt
    1120             : #ifdef SYS_shmget
    1121             :     SYSCALL_BY_NAME(shmget),
    1122             : #endif // SYS_shmget
    1123             :     SYSCALL_BY_NAME(shutdown),
    1124             :     SYSCALL_BY_NAME(sigaltstack),
    1125             : #ifdef SYS_signalfd
    1126             :     SYSCALL_BY_NAME(signalfd),
    1127             : #endif
    1128             :     SYSCALL_BY_NAME(signalfd4),
    1129             :     SYSCALL_BY_NAME(socket),
    1130             :     SYSCALL_BY_NAME(socketpair),
    1131             :     SYSCALL_BY_NAME(splice),
    1132             : #ifdef SYS_stat
    1133             :     SYSCALL_BY_NAME(stat),
    1134             : #endif
    1135             :     SYSCALL_BY_NAME(statfs),
    1136             : #ifdef SYS_statx
    1137             :     SYSCALL_BY_NAME(statx),
    1138             : #endif // SYS_statx
    1139             :     SYSCALL_BY_NAME(swapoff),
    1140             :     SYSCALL_BY_NAME(swapon),
    1141             : #ifdef SYS_symlink
    1142             :     SYSCALL_BY_NAME(symlink),
    1143             : #endif
    1144             :     SYSCALL_BY_NAME(symlinkat),
    1145             :     SYSCALL_BY_NAME(sync),
    1146             : #ifdef SYS_sync_file_range
    1147             :     SYSCALL_BY_NAME(sync_file_range),
    1148             : #endif // SYS_sync_file_range
    1149             :     SYSCALL_BY_NAME(syncfs),
    1150             : #ifdef SYS_sysfs
    1151             :     SYSCALL_BY_NAME(sysfs),
    1152             : #endif
    1153             :     SYSCALL_BY_NAME(sysinfo),
    1154             :     SYSCALL_BY_NAME(syslog),
    1155             :     SYSCALL_BY_NAME(tee),
    1156             :     SYSCALL_BY_NAME(tgkill),
    1157             : #ifdef SYS_time
    1158             :     SYSCALL_BY_NAME(time),
    1159             : #endif
    1160             :     SYSCALL_BY_NAME(timer_create),
    1161             :     SYSCALL_BY_NAME(timer_delete),
    1162             :     SYSCALL_BY_NAME(timer_getoverrun),
    1163             :     SYSCALL_BY_NAME(timer_gettime),
    1164             :     SYSCALL_BY_NAME(timer_settime),
    1165             :     SYSCALL_BY_NAME(timerfd_create),
    1166             :     SYSCALL_BY_NAME(timerfd_gettime),
    1167             :     SYSCALL_BY_NAME(timerfd_settime),
    1168             :     SYSCALL_BY_NAME(times),
    1169             :     SYSCALL_BY_NAME(tkill),
    1170             :     SYSCALL_BY_NAME(truncate),
    1171             : #ifdef SYS_tuxcall
    1172             :     SYSCALL_BY_NAME(tuxcall),
    1173             : #endif
    1174             :     SYSCALL_BY_NAME(umask),
    1175             :     SYSCALL_BY_NAME(umount2),
    1176             :     SYSCALL_BY_NAME(uname),
    1177             : #ifdef SYS_unlink
    1178             :     SYSCALL_BY_NAME(unlink),
    1179             : #endif
    1180             :     SYSCALL_BY_NAME(unlinkat),
    1181             :     SYSCALL_BY_NAME(unshare),
    1182             : #ifdef SYS_uselib
    1183             :     SYSCALL_BY_NAME(uselib),
    1184             : #endif
    1185             :     SYSCALL_BY_NAME(userfaultfd),
    1186             : #ifdef SYS_ustat
    1187             :     SYSCALL_BY_NAME(ustat),
    1188             : #endif
    1189             : #ifdef SYS_utime
    1190             :     SYSCALL_BY_NAME(utime),
    1191             : #endif
    1192             :     SYSCALL_BY_NAME(utimensat),
    1193             : #ifdef SYS_utimes
    1194             :     SYSCALL_BY_NAME(utimes),
    1195             : #endif
    1196             : #ifdef SYS_vfork
    1197             :     SYSCALL_BY_NAME(vfork),
    1198             : #endif
    1199             :     SYSCALL_BY_NAME(vhangup),
    1200             :     SYSCALL_BY_NAME(vmsplice),
    1201             : #ifdef SYS_vserver
    1202             :     SYSCALL_BY_NAME(vserver),
    1203             : #endif // SYS_vserver
    1204             :     SYSCALL_BY_NAME(wait4),
    1205             :     SYSCALL_BY_NAME(waitid),
    1206             :     SYSCALL_BY_NAME(write),
    1207             :     SYSCALL_BY_NAME(writev),
    1208             : };
    1209             : 
    1210             : static int
    1211        3458 : compare_named_entries(const void* k, const void* e) {
    1212        3458 :     const char* name = (const char*) k;
    1213        3458 :     struct named_syscall_entry* entry = (struct named_syscall_entry*) e;
    1214        3458 :     return strcmp(name, entry->s_name);
    1215             : }
    1216             : 
    1217             : const struct syscall_info*
    1218         494 : get_syscall_info_by_name(const char* syscall_name) {
    1219             : 
    1220         494 :     struct named_syscall_entry* res = bsearch(
    1221             :             syscall_name, &syscalls_by_name[0], ARRAY_SIZE(syscalls_by_name),
    1222             :             sizeof(struct named_syscall_entry), compare_named_entries);
    1223             : 
    1224         494 :     if(res == NULL) {
    1225             :         return &unknown_syscall;
    1226             :     }
    1227             : 
    1228         494 :     return res->s_info;
    1229             : }
    1230             : 
    1231             : #define RETURN_TYPE(scinfo) (scinfo)->s_return_type.r_type
    1232             : 
    1233             : bool
    1234           0 : syscall_never_returns(long syscall_number) {
    1235           0 :     return RETURN_TYPE(get_syscall_info(syscall_number, NULL)) == rnone;
    1236             : }
    1237             : 
    1238             : 
    1239             : #undef SYSCALL
    1240             : #undef S_NOARGS
    1241             : #undef S_UARG
    1242             : #undef S_NARG
    1243             : #undef S_RET
    1244             : #undef SYSCALL_BY_NAME
    1245             : #undef ARRAY_SIZE
    1246             : 
    1247             : // clang-format on

Generated by: LCOV version 1.16