Reland "Remove the return type from the syscall lists and parser."
It's not used, so it's just noise.
The previous attempt missed the call to grep in the .bp file that also
needed to be updated.
Bug: http://b/395691391
Bug: http://b/395732439
Change-Id: Ia0cc2e1882280e87a569acbaace9d84e753aad80
diff --git a/libc/Android.bp b/libc/Android.bp
index a5bc482..7b902dc 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -2395,7 +2395,7 @@
name: "generate_app_zygote_blocklist",
out: ["SECCOMP_BLOCKLIST_APP_ZYGOTE.TXT"],
srcs: ["SECCOMP_BLOCKLIST_APP.TXT"],
- cmd: "grep -v '^int[ \t]*setresgid' $(in) > $(out)",
+ cmd: "grep -v '^setresgid' $(in) > $(out)",
}
filegroup {
diff --git a/libc/SECCOMP_ALLOWLIST_APP.TXT b/libc/SECCOMP_ALLOWLIST_APP.TXT
index 80b15b2..a46a33c 100644
--- a/libc/SECCOMP_ALLOWLIST_APP.TXT
+++ b/libc/SECCOMP_ALLOWLIST_APP.TXT
@@ -4,59 +4,59 @@
# This file is processed by a python script named genseccomp.py.
# Needed for debugging 32-bit Chrome
-int pipe(int pipefd[2]) lp32
+pipe(int pipefd[2]) lp32
# b/34651972
-int access(const char *pathname, int mode) lp32
-int stat64(const char*, struct stat64*) lp32
+access(const char *pathname, int mode) lp32
+stat64(const char*, struct stat64*) lp32
# b/34813887
-int open(const char *path, int oflag, ... ) lp32,x86_64
-int getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count) lp32,x86_64
+open(const char *path, int oflag, ... ) lp32,x86_64
+getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count) lp32,x86_64
# b/34719286
-int eventfd(unsigned int initval, int flags) lp32
+eventfd(unsigned int initval, int flags) lp32
# b/34817266
-int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout) lp32
+epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout) lp32
# b/34908783
-int epoll_create(int size) lp32
+epoll_create(int size) lp32
# b/34979910
-int creat(const char *pathname, mode_t mode) lp32
-int unlink(const char *pathname) lp32
+creat(const char *pathname, mode_t mode) lp32
+unlink(const char *pathname) lp32
# b/35059702
-int lstat64(const char*, struct stat64*) lp32
+lstat64(const char*, struct stat64*) lp32
# b/35217603
-int fcntl(int fd, int cmd, ... /* arg */ ) lp32
-pid_t fork() lp32
-int poll(struct pollfd *fds, nfds_t nfds, int timeout) lp32
+fcntl(int fd, int cmd, ... /* arg */ ) lp32
+fork() lp32
+poll(struct pollfd *fds, nfds_t nfds, int timeout) lp32
# b/35906875
-int inotify_init() lp32
-uid_t getuid() lp32
+inotify_init() lp32
+getuid() lp32
# b/36435222
-int remap_file_pages(void *addr, size_t size, int prot, size_t pgoff, int flags) lp32
+remap_file_pages(void *addr, size_t size, int prot, size_t pgoff, int flags) lp32
# b/36449658
-int rename(const char *oldpath, const char *newpath) lp32
+rename(const char *oldpath, const char *newpath) lp32
# b/36726183. Note arm does not support mmap
-void* mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) x86
+mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) x86
# b/37769298
-int dup2(int oldfd, int newfd) lp32
+dup2(int oldfd, int newfd) lp32
# b/62779795
-int compat_select:_newselect(int n, unsigned long* inp, unsigned long* outp, unsigned long* exp, struct timeval* timeout) lp32
+compat_select:_newselect(int n, unsigned long* inp, unsigned long* outp, unsigned long* exp, struct timeval* timeout) lp32
# b/62090571
-int mkdir(const char *pathname, mode_t mode) lp32
+mkdir(const char *pathname, mode_t mode) lp32
# Not used by bionic in U because riscv64 doesn't have it, but still
# used by legacy apps (http://b/254179267).
-int renameat(int, const char*, int, const char*) arm,x86,arm64,x86_64
+renameat(int, const char*, int, const char*) arm,x86,arm64,x86_64
diff --git a/libc/SECCOMP_ALLOWLIST_COMMON.TXT b/libc/SECCOMP_ALLOWLIST_COMMON.TXT
index 5594910..b921aae 100644
--- a/libc/SECCOMP_ALLOWLIST_COMMON.TXT
+++ b/libc/SECCOMP_ALLOWLIST_COMMON.TXT
@@ -4,78 +4,78 @@
# This file is processed by a python script named genseccomp.py.
# Syscalls needed to boot android
-int pivot_root(const char*, const char*) lp64
-int ioprio_get(int, int) lp64
-int ioprio_set(int, int, int) lp64
+pivot_root(const char*, const char*) lp64
+ioprio_get(int, int) lp64
+ioprio_set(int, int, int) lp64
# Syscalls used internally by bionic, but not exposed directly.
-pid_t gettid() all
-int futex(int*, int, int, const timespec*, int*, int) all
-pid_t clone(int (*)(void*), void*, int, void*, ...) all
-int sigreturn(unsigned long) lp32
-int rt_sigreturn(unsigned long) all
-int rt_tgsigqueueinfo(pid_t, pid_t, int, siginfo_t*) all
-int restart_syscall() all
+gettid() all
+futex(int*, int, int, const timespec*, int*, int) all
+clone(int (*)(void*), void*, int, void*, ...) all
+sigreturn(unsigned long) lp32
+rt_sigreturn(unsigned long) all
+rt_tgsigqueueinfo(pid_t, pid_t, int, siginfo_t*) all
+restart_syscall() all
# The public API doesn't set errno, so we call this via inline assembler.
-int riscv_hwprobe(riscv_hwprobe*, size_t, size_t, unsigned long*, unsigned) riscv64
+riscv_hwprobe(riscv_hwprobe*, size_t, size_t, unsigned long*, unsigned) riscv64
# vfork is used by bionic (and java.lang.ProcessBuilder) on some
# architectures. (The others use clone(2) directly instead.)
-pid_t vfork() arm,x86,x86_64
+vfork() arm,x86,x86_64
# Needed for performance tools.
-int perf_event_open(perf_event_attr*, pid_t, int, int, unsigned long) all
+perf_event_open(perf_event_attr*, pid_t, int, int, unsigned long) all
# Needed for strace.
-int tkill(int, int) all
+tkill(int, int) all
# Needed for a CTS test of seccomp (b/34763393).
-int seccomp(unsigned, unsigned, void*) all
+seccomp(unsigned, unsigned, void*) all
# TODO: remove these now we've updated the toolchain (http://b/229989971).
-int open(const char*, int, ...) arm,x86,x86_64
-int stat64(const char*, stat64*) arm,x86
-ssize_t readlink(const char*, char*, size_t) arm,x86,x86_64
-int stat(const char*, stat*) arm,x86,x86_64
+open(const char*, int, ...) arm,x86,x86_64
+stat64(const char*, stat64*) arm,x86
+readlink(const char*, char*, size_t) arm,x86,x86_64
+stat(const char*, stat*) arm,x86,x86_64
#
# (Potentially) useful new syscalls which we don't yet use in bionic.
#
# Since Linux 2.5, not in glibc.
-int io_setup(unsigned, aio_context_t*) all
-int io_destroy(aio_context_t) all
-int io_submit(aio_context_t, long, iocb**) all
-int io_getevents(aio_context_t, long, long, io_event*, timespec*) all
-int io_cancel(aio_context_t, iocb*, io_event*) all
+io_setup(unsigned, aio_context_t*) all
+io_destroy(aio_context_t) all
+io_submit(aio_context_t, long, iocb**) all
+io_getevents(aio_context_t, long, long, io_event*, timespec*) all
+io_cancel(aio_context_t, iocb*, io_event*) all
# Since Linux 3.19, not in glibc (and not really needed to implement fexecve).
-int execveat(int, const char*, char* const*, char* const*, int) all
+execveat(int, const char*, char* const*, char* const*, int) all
# Since Linux 4.3, not in glibc. Probed for and conditionally used by ART.
-int membarrier(int, int) all
-int userfaultfd(int) all
+membarrier(int, int) all
+userfaultfd(int) all
# Since Linux 5.1, not in glibc. Not used by bionic, and not likely ever
# to be (because the last thing anyone needs is a new 32-bit ABI in the
# 2020s!) but http://b/138781460 showed cuttlefish needed at least the
# clock_gettime64 syscall.
-int clock_gettime64(clockid_t, timespec64*) lp32
-int clock_settime64(clockid_t, const timespec64*) lp32
-int clock_adjtime64(clockid_t, timex64*) lp32
-int clock_getres_time64(clockid_t, timespec64*) lp32
-int clock_nanosleep_time64(clockid_t, int, const timespec64*, timespec*) lp32
-int timer_gettime64(__kernel_timer_t, itimerspec64*) lp32
-int timer_settime64(__kernel_timer_t, int, const itimerspec64*, itimerspec64*) lp32
-int timerfd_gettime64(int, itimerspec64*) lp32
-int timerfd_settime64(int, int, const itimerspec64*, itimerspec64*) lp32
-int utimensat_time64(int, const char*, const timespec64[2], int) lp32
-int pselect6_time64(int, fd_set*, fd_set*, timespec64*, void*) lp32
-int ppoll_time64(pollfd*, unsigned int, timespec64*, const sigset64_t*, size_t) lp32
-int recvmmsg_time64(int, mmsghdr*, unsigned int, int, const timespec64*) lp32
-int rt_sigtimedwait_time64(const sigset64_t*, siginfo_t*, const timespec64*, size_t) lp32
-int futex_time64(int*, int, int, const timespec64*, int*, int) lp32
-int sched_rr_get_interval_time64(pid_t, timespec64*) lp32
+clock_gettime64(clockid_t, timespec64*) lp32
+clock_settime64(clockid_t, const timespec64*) lp32
+clock_adjtime64(clockid_t, timex64*) lp32
+clock_getres_time64(clockid_t, timespec64*) lp32
+clock_nanosleep_time64(clockid_t, int, const timespec64*, timespec*) lp32
+timer_gettime64(__kernel_timer_t, itimerspec64*) lp32
+timer_settime64(__kernel_timer_t, int, const itimerspec64*, itimerspec64*) lp32
+timerfd_gettime64(int, itimerspec64*) lp32
+timerfd_settime64(int, int, const itimerspec64*, itimerspec64*) lp32
+utimensat_time64(int, const char*, const timespec64[2], int) lp32
+pselect6_time64(int, fd_set*, fd_set*, timespec64*, void*) lp32
+ppoll_time64(pollfd*, unsigned int, timespec64*, const sigset64_t*, size_t) lp32
+recvmmsg_time64(int, mmsghdr*, unsigned int, int, const timespec64*) lp32
+rt_sigtimedwait_time64(const sigset64_t*, siginfo_t*, const timespec64*, size_t) lp32
+futex_time64(int*, int, int, const timespec64*, int*, int) lp32
+sched_rr_get_interval_time64(pid_t, timespec64*) lp32
# Since Linux 5.3, not in glibc. Not used by bionic, but increasingly
# likely to be useful as new features are added. In particular, cgroups
# support seems potentially useful for Android (though the struct that
# changes size over time is obviously problematic).
-pid_t clone3(clone_args*, size_t) all
+clone3(clone_args*, size_t) all
diff --git a/libc/SECCOMP_ALLOWLIST_SYSTEM.TXT b/libc/SECCOMP_ALLOWLIST_SYSTEM.TXT
index 756affe..ac90aac 100644
--- a/libc/SECCOMP_ALLOWLIST_SYSTEM.TXT
+++ b/libc/SECCOMP_ALLOWLIST_SYSTEM.TXT
@@ -3,4 +3,4 @@
#
# This file is processed by a python script named genseccomp.py.
-int bpf(int cmd, union bpf_attr *attr, unsigned int size) all
+bpf(int cmd, union bpf_attr *attr, unsigned int size) all
diff --git a/libc/SECCOMP_BLOCKLIST_APP.TXT b/libc/SECCOMP_BLOCKLIST_APP.TXT
index b9ecc02..5c317cf 100644
--- a/libc/SECCOMP_BLOCKLIST_APP.TXT
+++ b/libc/SECCOMP_BLOCKLIST_APP.TXT
@@ -11,40 +11,40 @@
# before uid change, including capset and setresuid. This is because the seccomp
# filter must be installed while the process still has CAP_SYS_ADMIN; changing
# the uid would remove that capability.
-int setgid32(gid_t) lp32
-int setgid(gid_t) lp64
-int setuid32(uid_t) lp32
-int setuid(uid_t) lp64
-int setregid32(gid_t, gid_t) lp32
-int setregid(gid_t, gid_t) lp64
-int setreuid32(uid_t, uid_t) lp32
-int setreuid(uid_t, uid_t) lp64
-int setresgid32(gid_t, gid_t, gid_t) lp32
-int setresgid(gid_t, gid_t, gid_t) lp64
+setgid32(gid_t) lp32
+setgid(gid_t) lp64
+setuid32(uid_t) lp32
+setuid(uid_t) lp64
+setregid32(gid_t, gid_t) lp32
+setregid(gid_t, gid_t) lp64
+setreuid32(uid_t, uid_t) lp32
+setreuid(uid_t, uid_t) lp64
+setresgid32(gid_t, gid_t, gid_t) lp32
+setresgid(gid_t, gid_t, gid_t) lp64
# setresuid is explicitly allowed, see above.
-int setfsgid32(gid_t) lp32
-int setfsgid(gid_t) lp64
-int setfsuid32(uid_t) lp32
-int setfsuid(uid_t) lp64
-int setgroups32(int, const gid_t*) lp32
-int setgroups(int, const gid_t*) lp64
+setfsgid32(gid_t) lp32
+setfsgid(gid_t) lp64
+setfsuid32(uid_t) lp32
+setfsuid(uid_t) lp64
+setgroups32(int, const gid_t*) lp32
+setgroups(int, const gid_t*) lp64
# Syscalls to modify times.
-int adjtimex(struct timex*) all
-int clock_adjtime(clockid_t, struct timex*) all
-int clock_settime(clockid_t, const struct timespec*) all
-int settimeofday(const struct timeval*, const struct timezone*) all
+adjtimex(struct timex*) all
+clock_adjtime(clockid_t, struct timex*) all
+clock_settime(clockid_t, const struct timespec*) all
+settimeofday(const struct timeval*, const struct timezone*) all
-int acct(const char* filepath) all
-int syslog(int, char*, int) all
-int chroot(const char*) all
+acct(const char* filepath) all
+syslog(int, char*, int) all
+chroot(const char*) all
-int init_module(void*, unsigned long, const char*) all
-int delete_module(const char*, unsigned int) all
-int mount(const char*, const char*, const char*, unsigned long, const void*) all
-int umount2(const char*, int) all
-int swapon(const char*, int) all
-int swapoff(const char*) all
-int setdomainname(const char*, size_t) all
-int sethostname(const char*, size_t) all
-int reboot(int, int, int, void*) all
+init_module(void*, unsigned long, const char*) all
+delete_module(const char*, unsigned int) all
+mount(const char*, const char*, const char*, unsigned long, const void*) all
+umount2(const char*, int) all
+swapon(const char*, int) all
+swapoff(const char*) all
+setdomainname(const char*, size_t) all
+sethostname(const char*, size_t) all
+reboot(int, int, int, void*) all
diff --git a/libc/SECCOMP_BLOCKLIST_COMMON.TXT b/libc/SECCOMP_BLOCKLIST_COMMON.TXT
index 22c9844..0c6e1ae 100644
--- a/libc/SECCOMP_BLOCKLIST_COMMON.TXT
+++ b/libc/SECCOMP_BLOCKLIST_COMMON.TXT
@@ -6,5 +6,5 @@
#
# This file is processed by a python script named genseccomp.py.
-int swapon(const char*, int) all
-int swapoff(const char*) all
+swapon(const char*, int) all
+swapoff(const char*) all
diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT
index 1506e13..7c09e88 100644
--- a/libc/SYSCALLS.TXT
+++ b/libc/SYSCALLS.TXT
@@ -2,7 +2,7 @@
#
# Each non-blank, non-comment line has the following format:
#
-# return_type func_name[|alias_list][:syscall_name[:socketcall_id]]([parameter_list]) arch_list
+# func_name[|alias_list][:syscall_name[:socketcall_id]]([parameter_list]) arch_list
#
# where:
# arch_list ::= "all" | arches
@@ -16,6 +16,8 @@
#
# - alias_list is optional comma separated list of function aliases.
#
+# - No return type is specified.
+#
# - The call_id parameter, given that func_name and syscall_name have
# been provided, allows the user to specify dispatch style syscalls.
# For example, socket() syscall on i386 actually becomes:
@@ -27,359 +29,359 @@
# genrules in Android.bp.
# Calls that have historical 16-bit variants camping on the best names (CONFIG_UID16).
-uid_t getuid:getuid32() lp32
-uid_t getuid:getuid() lp64
-gid_t getgid:getgid32() lp32
-gid_t getgid:getgid() lp64
-uid_t geteuid:geteuid32() lp32
-uid_t geteuid:geteuid() lp64
-gid_t getegid:getegid32() lp32
-gid_t getegid:getegid() lp64
-uid_t getresuid:getresuid32(uid_t* ruid, uid_t* euid, uid_t* suid) lp32
-uid_t getresuid:getresuid(uid_t* ruid, uid_t* euid, uid_t* suid) lp64
-gid_t getresgid:getresgid32(gid_t* rgid, gid_t* egid, gid_t* sgid) lp32
-gid_t getresgid:getresgid(gid_t* rgid, gid_t* egid, gid_t* sgid) lp64
-int getgroups:getgroups32(int, gid_t*) lp32
-int getgroups:getgroups(int, gid_t*) lp64
-int setgid:setgid32(gid_t) lp32
-int setgid:setgid(gid_t) lp64
-int setuid:setuid32(uid_t) lp32
-int setuid:setuid(uid_t) lp64
-int setreuid:setreuid32(uid_t, uid_t) lp32
-int setreuid:setreuid(uid_t, uid_t) lp64
-int setresuid:setresuid32(uid_t, uid_t, uid_t) lp32
-int setresuid:setresuid(uid_t, uid_t, uid_t) lp64
-int setresgid:setresgid32(gid_t, gid_t, gid_t) lp32
-int setresgid:setresgid(gid_t, gid_t, gid_t) lp64
-int setfsgid:setfsgid32(gid_t) lp32
-int setfsgid:setfsgid(gid_t) lp64
-int setfsuid:setfsuid32(uid_t) lp32
-int setfsuid:setfsuid(uid_t) lp64
+getuid:getuid32() lp32
+getuid:getuid() lp64
+getgid:getgid32() lp32
+getgid:getgid() lp64
+geteuid:geteuid32() lp32
+geteuid:geteuid() lp64
+getegid:getegid32() lp32
+getegid:getegid() lp64
+getresuid:getresuid32(uid_t* ruid, uid_t* euid, uid_t* suid) lp32
+getresuid:getresuid(uid_t* ruid, uid_t* euid, uid_t* suid) lp64
+getresgid:getresgid32(gid_t* rgid, gid_t* egid, gid_t* sgid) lp32
+getresgid:getresgid(gid_t* rgid, gid_t* egid, gid_t* sgid) lp64
+getgroups:getgroups32(int, gid_t*) lp32
+getgroups:getgroups(int, gid_t*) lp64
+setgid:setgid32(gid_t) lp32
+setgid:setgid(gid_t) lp64
+setuid:setuid32(uid_t) lp32
+setuid:setuid(uid_t) lp64
+setreuid:setreuid32(uid_t, uid_t) lp32
+setreuid:setreuid(uid_t, uid_t) lp64
+setresuid:setresuid32(uid_t, uid_t, uid_t) lp32
+setresuid:setresuid(uid_t, uid_t, uid_t) lp64
+setresgid:setresgid32(gid_t, gid_t, gid_t) lp32
+setresgid:setresgid(gid_t, gid_t, gid_t) lp64
+setfsgid:setfsgid32(gid_t) lp32
+setfsgid:setfsgid(gid_t) lp64
+setfsuid:setfsuid32(uid_t) lp32
+setfsuid:setfsuid(uid_t) lp64
-ssize_t readahead(int, off64_t, size_t) all
-pid_t getpgid(pid_t) all
-pid_t getppid() all
-pid_t getsid(pid_t) all
-pid_t setsid() all
-int kill(pid_t, int) all
-int tgkill(pid_t tgid, pid_t tid, int sig) all
+readahead(int, off64_t, size_t) all
+getpgid(pid_t) all
+getppid() all
+getsid(pid_t) all
+setsid() all
+kill(pid_t, int) all
+tgkill(pid_t tgid, pid_t tid, int sig) all
-void* __brk:brk(void*) all
-int execve(const char*, char* const*, char* const*) all
-int __ptrace:ptrace(int request, int pid, void* addr, void* data) all
+__brk:brk(void*) all
+execve(const char*, char* const*, char* const*) all
+__ptrace:ptrace(int request, int pid, void* addr, void* data) all
# <sys/resource.h>
-int getrusage(int, struct rusage*) all
-int __getpriority:getpriority(int, id_t) all
-int setpriority(int, id_t, int) all
+getrusage(int, struct rusage*) all
+__getpriority:getpriority(int, id_t) all
+setpriority(int, id_t, int) all
# On LP64, rlimit and rlimit64 are the same.
# On 32-bit systems we use prlimit64 to implement the rlimit64 functions.
-int getrlimit:ugetrlimit(int, struct rlimit*) lp32
-int getrlimit|getrlimit64(int, struct rlimit*) lp64
-int setrlimit(int, const struct rlimit*) lp32
-int setrlimit|setrlimit64(int, const struct rlimit*) lp64
-int prlimit64|prlimit(pid_t, int, struct rlimit64*, const struct rlimit64*) lp64
-int prlimit64(pid_t, int, struct rlimit64*, const struct rlimit64*) lp32
+getrlimit:ugetrlimit(int, struct rlimit*) lp32
+getrlimit|getrlimit64(int, struct rlimit*) lp64
+setrlimit(int, const struct rlimit*) lp32
+setrlimit|setrlimit64(int, const struct rlimit*) lp64
+prlimit64|prlimit(pid_t, int, struct rlimit64*, const struct rlimit64*) lp64
+prlimit64(pid_t, int, struct rlimit64*, const struct rlimit64*) lp32
-int setgroups:setgroups32(int, const gid_t*) lp32
-int setgroups:setgroups(int, const gid_t*) lp64
-int setpgid(pid_t, pid_t) all
-int setregid:setregid32(gid_t, gid_t) lp32
-int setregid:setregid(gid_t, gid_t) lp64
-int chroot(const char*) all
-int prctl(int, unsigned long, unsigned long, unsigned long, unsigned long) all
-int capget(cap_user_header_t header, cap_user_data_t data) all
-int capset(cap_user_header_t header, const cap_user_data_t data) all
-int sigaltstack(const stack_t*, stack_t*) all
-int acct(const char* filepath) all
+setgroups:setgroups32(int, const gid_t*) lp32
+setgroups:setgroups(int, const gid_t*) lp64
+setpgid(pid_t, pid_t) all
+setregid:setregid32(gid_t, gid_t) lp32
+setregid:setregid(gid_t, gid_t) lp64
+chroot(const char*) all
+prctl(int, unsigned long, unsigned long, unsigned long, unsigned long) all
+capget(cap_user_header_t header, cap_user_data_t data) all
+capset(cap_user_header_t header, const cap_user_data_t data) all
+sigaltstack(const stack_t*, stack_t*) all
+acct(const char* filepath) all
# file descriptors
-ssize_t read(int, void*, size_t) all
-ssize_t write(int, const void*, size_t) all
-ssize_t pread64(int, void*, size_t, off64_t) lp32
-ssize_t pread64|pread(int, void*, size_t, off_t) lp64
-ssize_t pwrite64(int, void*, size_t, off64_t) lp32
-ssize_t pwrite64|pwrite(int, void*, size_t, off_t) lp64
+read(int, void*, size_t) all
+write(int, const void*, size_t) all
+pread64(int, void*, size_t, off64_t) lp32
+pread64|pread(int, void*, size_t, off_t) lp64
+pwrite64(int, void*, size_t, off64_t) lp32
+pwrite64|pwrite(int, void*, size_t, off_t) lp64
# On LP32, preadv/pwritev don't use off64_t --- they use pairs of 32-bit
# arguments to avoid problems on architectures like arm32 where 64-bit arguments
# must be in a register pair starting with an even-numbered register.
# See linux/fs/read_write.c and https://lwn.net/Articles/311630/.
# Note that there's an unused always-0 second long even on LP64!
-ssize_t __preadv64:preadv(int, const struct iovec*, int, long, long) all
-ssize_t __pwritev64:pwritev(int, const struct iovec*, int, long, long) all
-ssize_t __preadv64v2:preadv2(int, const struct iovec*, int, long, long, int) all
-ssize_t __pwritev64v2:pwritev2(int, const struct iovec*, int, long, long, int) all
+__preadv64:preadv(int, const struct iovec*, int, long, long) all
+__pwritev64:pwritev(int, const struct iovec*, int, long, long) all
+__preadv64v2:preadv2(int, const struct iovec*, int, long, long, int) all
+__pwritev64v2:pwritev2(int, const struct iovec*, int, long, long, int) all
-int __close:close(int) all
-int close_range(unsigned int, unsigned int, int) all
-ssize_t copy_file_range(int, off64_t*, int, off64_t*, size_t, unsigned int) all
-pid_t __getpid:getpid() all
-int memfd_create(const char*, unsigned) all
-int munmap(void*, size_t) all
-int msync(const void*, size_t, int) all
-int mprotect(const void*, size_t, int) all
-int madvise(void*, size_t, int) all
-ssize_t process_madvise(int, const struct iovec*, size_t, int, unsigned int) all
-int mlock(const void* addr, size_t len) all
-int mlock2(const void* addr, size_t len, int flags) all
-int munlock(const void* addr, size_t len) all
-int mlockall(int flags) all
-int mseal(void*, size_t, unsigned long) lp64
-int munlockall() all
-int mincore(void* start, size_t length, unsigned char* vec) all
-int __ioctl:ioctl(int, int, void*) all
-ssize_t readv(int, const struct iovec*, int) all
-ssize_t writev(int, const struct iovec*, int) all
-int __fcntl64:fcntl64(int, int, void*) lp32
-int __fcntl:fcntl(int, int, void*) lp64
-int flock(int, int) all
-int __fchmod:fchmod(int, mode_t) all
-int __pipe2:pipe2(int*, int) all
-int __dup:dup(int) all
-int __dup3:dup3(int, int, int) all
-int fsync(int) all
-int fdatasync(int) all
-int fchown:fchown32(int, uid_t, gid_t) lp32
-int fchown:fchown(int, uid_t, gid_t) lp64
-void sync(void) all
-int syncfs(int) all
-int __fsetxattr:fsetxattr(int, const char*, const void*, size_t, int) all
-ssize_t __fgetxattr:fgetxattr(int, const char*, void*, size_t) all
-ssize_t __flistxattr:flistxattr(int, char*, size_t) all
-int fremovexattr(int, const char*) all
+__close:close(int) all
+close_range(unsigned int, unsigned int, int) all
+copy_file_range(int, off64_t*, int, off64_t*, size_t, unsigned int) all
+__getpid:getpid() all
+memfd_create(const char*, unsigned) all
+munmap(void*, size_t) all
+msync(const void*, size_t, int) all
+mprotect(const void*, size_t, int) all
+madvise(void*, size_t, int) all
+process_madvise(int, const struct iovec*, size_t, int, unsigned int) all
+mlock(const void* addr, size_t len) all
+mlock2(const void* addr, size_t len, int flags) all
+munlock(const void* addr, size_t len) all
+mlockall(int flags) all
+mseal(void*, size_t, unsigned long) lp64
+munlockall() all
+mincore(void* start, size_t length, unsigned char* vec) all
+__ioctl:ioctl(int, int, void*) all
+readv(int, const struct iovec*, int) all
+writev(int, const struct iovec*, int) all
+__fcntl64:fcntl64(int, int, void*) lp32
+__fcntl:fcntl(int, int, void*) lp64
+flock(int, int) all
+__fchmod:fchmod(int, mode_t) all
+__pipe2:pipe2(int*, int) all
+__dup:dup(int) all
+__dup3:dup3(int, int, int) all
+fsync(int) all
+fdatasync(int) all
+fchown:fchown32(int, uid_t, gid_t) lp32
+fchown:fchown(int, uid_t, gid_t) lp64
+sync(void) all
+syncfs(int) all
+__fsetxattr:fsetxattr(int, const char*, const void*, size_t, int) all
+__fgetxattr:fgetxattr(int, const char*, void*, size_t) all
+__flistxattr:flistxattr(int, char*, size_t) all
+fremovexattr(int, const char*) all
-int __getdents64:getdents64(unsigned int, struct dirent*, unsigned int) all
+__getdents64:getdents64(unsigned int, struct dirent*, unsigned int) all
-int __openat:openat(int, const char*, int, mode_t) all
-int __faccessat:faccessat(int, const char*, int) all
-int __fchmodat:fchmodat(int, const char*, mode_t) all
-int fchownat(int, const char*, uid_t, gid_t, int) all
-int fstatat64|fstatat:fstatat64(int, const char*, struct stat*, int) lp32
-int fstatat64|fstatat:newfstatat(int, const char*, struct stat*, int) lp64
-int linkat(int, const char*, int, const char*, int) all
-int mkdirat(int, const char*, mode_t) all
-int mknodat(int, const char*, mode_t, dev_t) all
-ssize_t readlinkat(int, const char*, char*, size_t) all
-int renameat2(int, const char*, int, const char*, unsigned) all
-int symlinkat(const char*, int, const char*) all
-int unlinkat(int, const char*, int) all
-int utimensat(int, const char*, const struct timespec times[2], int) all
+__openat:openat(int, const char*, int, mode_t) all
+__faccessat:faccessat(int, const char*, int) all
+__fchmodat:fchmodat(int, const char*, mode_t) all
+fchownat(int, const char*, uid_t, gid_t, int) all
+fstatat64|fstatat:fstatat64(int, const char*, struct stat*, int) lp32
+fstatat64|fstatat:newfstatat(int, const char*, struct stat*, int) lp64
+linkat(int, const char*, int, const char*, int) all
+mkdirat(int, const char*, mode_t) all
+mknodat(int, const char*, mode_t, dev_t) all
+readlinkat(int, const char*, char*, size_t) all
+renameat2(int, const char*, int, const char*, unsigned) all
+symlinkat(const char*, int, const char*) all
+unlinkat(int, const char*, int) all
+utimensat(int, const char*, const struct timespec times[2], int) all
# Paired off_t/off64_t system calls. On 64-bit systems,
# sizeof(off_t) == sizeof(off64_t), so there we emit two symbols that are
# aliases. On 32-bit systems, we have two different system calls.
# That means that every system call in this section should take three lines.
-off_t lseek(int, off_t, int) lp32
-int __llseek:_llseek(int, unsigned long, unsigned long, off64_t*, int) lp32
-off_t lseek|lseek64(int, off_t, int) lp64
-ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count) lp32
-ssize_t sendfile64(int out_fd, int in_fd, off64_t* offset, size_t count) lp32
-ssize_t sendfile|sendfile64(int out_fd, int in_fd, off_t* offset, size_t count) lp64
-int truncate(const char*, off_t) lp32
-int truncate64(const char*, off64_t) lp32
-int truncate|truncate64(const char*, off_t) lp64
+lseek(int, off_t, int) lp32
+__llseek:_llseek(int, unsigned long, unsigned long, off64_t*, int) lp32
+lseek|lseek64(int, off_t, int) lp64
+sendfile(int out_fd, int in_fd, off_t* offset, size_t count) lp32
+sendfile64(int out_fd, int in_fd, off64_t* offset, size_t count) lp32
+sendfile|sendfile64(int out_fd, int in_fd, off_t* offset, size_t count) lp64
+truncate(const char*, off_t) lp32
+truncate64(const char*, off64_t) lp32
+truncate|truncate64(const char*, off_t) lp64
# (fallocate only gets two lines because there is no 32-bit variant.)
-int fallocate64:fallocate(int, int, off64_t, off64_t) lp32
-int fallocate|fallocate64(int, int, off_t, off_t) lp64
+fallocate64:fallocate(int, int, off64_t, off64_t) lp32
+fallocate|fallocate64(int, int, off_t, off_t) lp64
# (ftruncate only gets two lines because 32-bit bionic only uses the 64-bit call.)
-int ftruncate64(int, off64_t) lp32
-int ftruncate|ftruncate64(int, off_t) lp64
+ftruncate64(int, off64_t) lp32
+ftruncate|ftruncate64(int, off_t) lp64
# (mmap only gets two lines because 32-bit bionic only uses the 64-bit call.)
-void* __mmap2:mmap2(void*, size_t, int, int, int, long) lp32
-void* mmap|mmap64(void*, size_t, int, int, int, off_t) lp64
+__mmap2:mmap2(void*, size_t, int, int, int, long) lp32
+mmap|mmap64(void*, size_t, int, int, int, off_t) lp64
# mremap is in C++ for 32-bit so we can add the PTRDIFF_MAX check.
-void* __mremap:mremap(void*, size_t, size_t, int, void*) lp32
-void* mremap(void*, size_t, size_t, int, void*) lp64
+__mremap:mremap(void*, size_t, size_t, int, void*) lp32
+mremap(void*, size_t, size_t, int, void*) lp64
# posix_fadvise64 is awkward: arm has shuffled arguments,
# the POSIX functions don't set errno, and no architecture has posix_fadvise.
-int __arm_fadvise64_64:arm_fadvise64_64(int, int, off64_t, off64_t) arm
-int __fadvise64:fadvise64_64(int, off64_t, off64_t, int) x86
-int __fadvise64:fadvise64(int, off64_t, off64_t, int) lp64
+__arm_fadvise64_64:arm_fadvise64_64(int, int, off64_t, off64_t) arm
+__fadvise64:fadvise64_64(int, off64_t, off64_t, int) x86
+__fadvise64:fadvise64(int, off64_t, off64_t, int) lp64
-int __fstatfs64:fstatfs64(int, size_t, struct statfs*) lp32
-int __fstatfs:fstatfs(int, struct statfs*) lp64
-int __statfs64:statfs64(const char*, size_t, struct statfs*) lp32
-int __statfs:statfs(const char*, struct statfs*) lp64
+__fstatfs64:fstatfs64(int, size_t, struct statfs*) lp32
+__fstatfs:fstatfs(int, struct statfs*) lp64
+__statfs64:statfs64(const char*, size_t, struct statfs*) lp32
+__statfs:statfs(const char*, struct statfs*) lp64
-int fstat64|fstat:fstat64(int, struct stat*) lp32
-int fstat64|fstat:fstat(int, struct stat*) lp64
+fstat64|fstat:fstat64(int, struct stat*) lp32
+fstat64|fstat:fstat(int, struct stat*) lp64
# file system
-int chdir(const char*) all
-int mount(const char*, const char*, const char*, unsigned long, const void*) all
-int umount2(const char*, int) all
-int __getcwd:getcwd(char* buf, size_t size) all
-int fchdir(int) all
-int setxattr(const char*, const char*, const void*, size_t, int) all
-int lsetxattr(const char*, const char*, const void*, size_t, int) all
-ssize_t getxattr(const char*, const char*, void*, size_t) all
-ssize_t lgetxattr(const char*, const char*, void*, size_t) all
-ssize_t listxattr(const char*, char*, size_t) all
-ssize_t llistxattr(const char*, char*, size_t) all
-int removexattr(const char*, const char*) all
-int lremovexattr(const char*, const char*) all
-int statx(int, const char*, int, unsigned, struct statx*) all
-int swapon(const char*, int) all
-int swapoff(const char*) all
+chdir(const char*) all
+mount(const char*, const char*, const char*, unsigned long, const void*) all
+umount2(const char*, int) all
+__getcwd:getcwd(char* buf, size_t size) all
+fchdir(int) all
+setxattr(const char*, const char*, const void*, size_t, int) all
+lsetxattr(const char*, const char*, const void*, size_t, int) all
+getxattr(const char*, const char*, void*, size_t) all
+lgetxattr(const char*, const char*, void*, size_t) all
+listxattr(const char*, char*, size_t) all
+llistxattr(const char*, char*, size_t) all
+removexattr(const char*, const char*) all
+lremovexattr(const char*, const char*) all
+statx(int, const char*, int, unsigned, struct statx*) all
+swapon(const char*, int) all
+swapoff(const char*) all
# time
-int settimeofday(const struct timeval*, const struct timezone*) all
-clock_t times(struct tms*) all
-int nanosleep(const struct timespec*, struct timespec*) all
-int clock_settime(clockid_t, const struct timespec*) all
-int __clock_nanosleep:clock_nanosleep(clockid_t, int, const struct timespec*, struct timespec*) all
-int getitimer(int, struct itimerval*) all
-int setitimer(int, const struct itimerval*, struct itimerval*) all
-int __timer_create:timer_create(clockid_t clockid, struct sigevent* evp, __kernel_timer_t* timerid) all
-int __timer_settime:timer_settime(__kernel_timer_t, int, const struct itimerspec*, struct itimerspec*) all
-int __timer_gettime:timer_gettime(__kernel_timer_t, struct itimerspec*) all
-int __timer_getoverrun:timer_getoverrun(__kernel_timer_t) all
-int __timer_delete:timer_delete(__kernel_timer_t) all
-int timerfd_create(clockid_t, int) all
-int timerfd_settime(int, int, const struct itimerspec*, struct itimerspec*) all
-int timerfd_gettime(int, struct itimerspec*) all
-int adjtimex(struct timex*) all
-int clock_adjtime(clockid_t, struct timex*) all
+settimeofday(const struct timeval*, const struct timezone*) all
+times(struct tms*) all
+nanosleep(const struct timespec*, struct timespec*) all
+clock_settime(clockid_t, const struct timespec*) all
+__clock_nanosleep:clock_nanosleep(clockid_t, int, const struct timespec*, struct timespec*) all
+getitimer(int, struct itimerval*) all
+setitimer(int, const struct itimerval*, struct itimerval*) all
+__timer_create:timer_create(clockid_t clockid, struct sigevent* evp, __kernel_timer_t* timerid) all
+__timer_settime:timer_settime(__kernel_timer_t, int, const struct itimerspec*, struct itimerspec*) all
+__timer_gettime:timer_gettime(__kernel_timer_t, struct itimerspec*) all
+__timer_getoverrun:timer_getoverrun(__kernel_timer_t) all
+__timer_delete:timer_delete(__kernel_timer_t) all
+timerfd_create(clockid_t, int) all
+timerfd_settime(int, int, const struct itimerspec*, struct itimerspec*) all
+timerfd_gettime(int, struct itimerspec*) all
+adjtimex(struct timex*) all
+clock_adjtime(clockid_t, struct timex*) all
# signals
-int __sigaction:sigaction(int, const struct sigaction*, struct sigaction*) lp32
-int __rt_sigaction:rt_sigaction(int, const struct sigaction*, struct sigaction*, size_t) all
-int __rt_sigpending:rt_sigpending(sigset64_t*, size_t) all
-int __rt_sigprocmask:rt_sigprocmask(int, const sigset64_t*, sigset64_t*, size_t) all
-int __rt_sigsuspend:rt_sigsuspend(const sigset64_t*, size_t) all
-int __rt_sigtimedwait:rt_sigtimedwait(const sigset64_t*, siginfo_t*, const timespec*, size_t) all
-int __rt_sigqueueinfo:rt_sigqueueinfo(pid_t, int, siginfo_t*) all
-int __signalfd4:signalfd4(int, const sigset64_t*, size_t, int) all
+__sigaction:sigaction(int, const struct sigaction*, struct sigaction*) lp32
+__rt_sigaction:rt_sigaction(int, const struct sigaction*, struct sigaction*, size_t) all
+__rt_sigpending:rt_sigpending(sigset64_t*, size_t) all
+__rt_sigprocmask:rt_sigprocmask(int, const sigset64_t*, sigset64_t*, size_t) all
+__rt_sigsuspend:rt_sigsuspend(const sigset64_t*, size_t) all
+__rt_sigtimedwait:rt_sigtimedwait(const sigset64_t*, siginfo_t*, const timespec*, size_t) all
+__rt_sigqueueinfo:rt_sigqueueinfo(pid_t, int, siginfo_t*) all
+__signalfd4:signalfd4(int, const sigset64_t*, size_t, int) all
# sockets
-int __socket:socket(int, int, int) arm,lp64
-int __socketpair:socketpair(int, int, int, int*) arm,lp64
-int bind(int, struct sockaddr*, socklen_t) arm,lp64
-int __connect:connect(int, struct sockaddr*, socklen_t) arm,lp64
-int listen(int, int) arm,lp64
-int __accept4:accept4(int, struct sockaddr*, socklen_t*, int) arm,lp64
-int getsockname(int, struct sockaddr*, socklen_t*) arm,lp64
-int getpeername(int, struct sockaddr*, socklen_t*) arm,lp64
-ssize_t __sendto:sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t) arm,lp64
-ssize_t recvfrom(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) arm,lp64
-int shutdown(int, int) arm,lp64
-int setsockopt(int, int, int, const void*, socklen_t) arm,lp64
-int getsockopt(int, int, int, void*, socklen_t*) arm,lp64
-ssize_t __recvmsg:recvmsg(int, struct msghdr*, unsigned int) arm,lp64
-ssize_t __sendmsg:sendmsg(int, const struct msghdr*, unsigned int) arm,lp64
-int __recvmmsg:recvmmsg(int, struct mmsghdr*, unsigned int, int, const struct timespec*) arm,lp64
-int __sendmmsg:sendmmsg(int, struct mmsghdr*, unsigned int, int) arm,lp64
+__socket:socket(int, int, int) arm,lp64
+__socketpair:socketpair(int, int, int, int*) arm,lp64
+bind(int, struct sockaddr*, socklen_t) arm,lp64
+__connect:connect(int, struct sockaddr*, socklen_t) arm,lp64
+listen(int, int) arm,lp64
+__accept4:accept4(int, struct sockaddr*, socklen_t*, int) arm,lp64
+getsockname(int, struct sockaddr*, socklen_t*) arm,lp64
+getpeername(int, struct sockaddr*, socklen_t*) arm,lp64
+__sendto:sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t) arm,lp64
+recvfrom(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) arm,lp64
+shutdown(int, int) arm,lp64
+setsockopt(int, int, int, const void*, socklen_t) arm,lp64
+getsockopt(int, int, int, void*, socklen_t*) arm,lp64
+__recvmsg:recvmsg(int, struct msghdr*, unsigned int) arm,lp64
+__sendmsg:sendmsg(int, const struct msghdr*, unsigned int) arm,lp64
+__recvmmsg:recvmmsg(int, struct mmsghdr*, unsigned int, int, const struct timespec*) arm,lp64
+__sendmmsg:sendmmsg(int, struct mmsghdr*, unsigned int, int) arm,lp64
# sockets for x86. These are done as an "indexed" call to socketcall syscall.
-int __socket:socketcall:1(int, int, int) x86
-int bind:socketcall:2(int, struct sockaddr*, int) x86
-int __connect:socketcall:3(int, struct sockaddr*, socklen_t) x86
-int listen:socketcall:4(int, int) x86
-int getsockname:socketcall:6(int, struct sockaddr*, socklen_t*) x86
-int getpeername:socketcall:7(int, struct sockaddr*, socklen_t*) x86
-int __socketpair:socketcall:8(int, int, int, int*) x86
-ssize_t __sendto:socketcall:11(int, const void*, size_t, int, const struct sockaddr*, socklen_t) x86
-ssize_t recvfrom:socketcall:12(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) x86
-int shutdown:socketcall:13(int, int) x86
-int setsockopt:socketcall:14(int, int, int, const void*, socklen_t) x86
-int getsockopt:socketcall:15(int, int, int, void*, socklen_t*) x86
-int __sendmsg:socketcall:16(int, const struct msghdr*, unsigned int) x86
-int __recvmsg:socketcall:17(int, struct msghdr*, unsigned int) x86
-int __accept4:socketcall:18(int, struct sockaddr*, socklen_t*, int) x86
-int __recvmmsg:socketcall:19(int, struct mmsghdr*, unsigned int, int, const struct timespec*) x86
-int __sendmmsg:socketcall:20(int, struct mmsghdr*, unsigned int, int) x86
+__socket:socketcall:1(int, int, int) x86
+bind:socketcall:2(int, struct sockaddr*, int) x86
+__connect:socketcall:3(int, struct sockaddr*, socklen_t) x86
+listen:socketcall:4(int, int) x86
+getsockname:socketcall:6(int, struct sockaddr*, socklen_t*) x86
+getpeername:socketcall:7(int, struct sockaddr*, socklen_t*) x86
+__socketpair:socketcall:8(int, int, int, int*) x86
+__sendto:socketcall:11(int, const void*, size_t, int, const struct sockaddr*, socklen_t) x86
+recvfrom:socketcall:12(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) x86
+shutdown:socketcall:13(int, int) x86
+setsockopt:socketcall:14(int, int, int, const void*, socklen_t) x86
+getsockopt:socketcall:15(int, int, int, void*, socklen_t*) x86
+__sendmsg:socketcall:16(int, const struct msghdr*, unsigned int) x86
+__recvmsg:socketcall:17(int, struct msghdr*, unsigned int) x86
+__accept4:socketcall:18(int, struct sockaddr*, socklen_t*, int) x86
+__recvmmsg:socketcall:19(int, struct mmsghdr*, unsigned int, int, const struct timespec*) x86
+__sendmmsg:socketcall:20(int, struct mmsghdr*, unsigned int, int) x86
# scheduler & real-time
-int sched_get_priority_max(int policy) all
-int sched_get_priority_min(int policy) all
-int __sched_getaffinity:sched_getaffinity(pid_t, size_t, cpu_set_t*) all
-int sched_getattr(pid_t, sched_attr*, unsigned, unsigned) all
-int sched_getparam(pid_t, sched_param*) all
-int sched_getscheduler(pid_t) all
-int sched_rr_get_interval(pid_t, timespec*) all
-int sched_setaffinity(pid_t, size_t, const cpu_set_t*) all
-int sched_setattr(pid_t, sched_attr*, unsigned) all
-int sched_setparam(pid_t, const sched_param*) all
-int sched_setscheduler(pid_t, int, const sched_param*) all
-int sched_yield(void) all
+sched_get_priority_max(int policy) all
+sched_get_priority_min(int policy) all
+__sched_getaffinity:sched_getaffinity(pid_t, size_t, cpu_set_t*) all
+sched_getattr(pid_t, sched_attr*, unsigned, unsigned) all
+sched_getparam(pid_t, sched_param*) all
+sched_getscheduler(pid_t) all
+sched_rr_get_interval(pid_t, timespec*) all
+sched_setaffinity(pid_t, size_t, const cpu_set_t*) all
+sched_setattr(pid_t, sched_attr*, unsigned) all
+sched_setparam(pid_t, const sched_param*) all
+sched_setscheduler(pid_t, int, const sched_param*) all
+sched_yield(void) all
# other
-int uname(struct utsname*) all
-mode_t umask(mode_t) all
-int __reboot:reboot(int, int, int, void*) all
-int init_module(void*, unsigned long, const char*) all
-int delete_module(const char*, unsigned int) all
-int klogctl:syslog(int, char*, int) all
-int sysinfo(struct sysinfo*) all
-int personality(unsigned long) all
+uname(struct utsname*) all
+umask(mode_t) all
+__reboot:reboot(int, int, int, void*) all
+init_module(void*, unsigned long, const char*) all
+delete_module(const char*, unsigned int) all
+klogctl:syslog(int, char*, int) all
+sysinfo(struct sysinfo*) all
+personality(unsigned long) all
-int setns(int, int) all
-int unshare(int) all
+setns(int, int) all
+unshare(int) all
-int __getcpu:getcpu(unsigned*, unsigned*, void*) all
+__getcpu:getcpu(unsigned*, unsigned*, void*) all
-int bpf(int, union bpf_attr *, unsigned int) all
+bpf(int, union bpf_attr *, unsigned int) all
-ssize_t tee(int, int, size_t, unsigned int) all
-ssize_t splice(int, off64_t*, int, off64_t*, size_t, unsigned int) all
-ssize_t vmsplice(int, const struct iovec*, size_t, unsigned int) all
+tee(int, int, size_t, unsigned int) all
+splice(int, off64_t*, int, off64_t*, size_t, unsigned int) all
+vmsplice(int, const struct iovec*, size_t, unsigned int) all
-int __epoll_create1:epoll_create1(int) all
-int epoll_ctl(int, int op, int, struct epoll_event*) all
-int __epoll_pwait:epoll_pwait(int, struct epoll_event*, int, int, const sigset64_t*, size_t) all
-int __epoll_pwait2:epoll_pwait2(int, struct epoll_event*, int, const timespec64*, const sigset64_t*, size_t) all
+__epoll_create1:epoll_create1(int) all
+epoll_ctl(int, int op, int, struct epoll_event*) all
+__epoll_pwait:epoll_pwait(int, struct epoll_event*, int, int, const sigset64_t*, size_t) all
+__epoll_pwait2:epoll_pwait2(int, struct epoll_event*, int, const timespec64*, const sigset64_t*, size_t) all
-int __eventfd:eventfd2(unsigned int, int) all
+__eventfd:eventfd2(unsigned int, int) all
-void _exit|_Exit:exit_group(int) all
-void __exit:exit(int) all
+_exit|_Exit:exit_group(int) all
+__exit:exit(int) all
-int inotify_init1(int) all
-int inotify_add_watch(int, const char*, unsigned int) all
-int inotify_rm_watch(int, unsigned int) all
+inotify_init1(int) all
+inotify_add_watch(int, const char*, unsigned int) all
+inotify_rm_watch(int, unsigned int) all
-int __pselect6:pselect6(int, fd_set*, fd_set*, fd_set*, timespec*, void*) all
-int __ppoll:ppoll(pollfd*, unsigned int, timespec*, const sigset64_t*, size_t) all
+__pselect6:pselect6(int, fd_set*, fd_set*, fd_set*, timespec*, void*) all
+__ppoll:ppoll(pollfd*, unsigned int, timespec*, const sigset64_t*, size_t) all
-ssize_t process_vm_readv(pid_t, const struct iovec*, unsigned long, const struct iovec*, unsigned long, unsigned long) all
-ssize_t process_vm_writev(pid_t, const struct iovec*, unsigned long, const struct iovec*, unsigned long, unsigned long) all
+process_vm_readv(pid_t, const struct iovec*, unsigned long, const struct iovec*, unsigned long, unsigned long) all
+process_vm_writev(pid_t, const struct iovec*, unsigned long, const struct iovec*, unsigned long, unsigned long) all
-int quotactl(int, const char*, int, char*) all
+quotactl(int, const char*, int, char*) all
-int __set_tid_address:set_tid_address(int*) all
+__set_tid_address:set_tid_address(int*) all
-int setdomainname(const char*, size_t) all
-int sethostname(const char*, size_t) all
+setdomainname(const char*, size_t) all
+sethostname(const char*, size_t) all
-int sync_file_range(int, off64_t, off64_t, unsigned int) x86,lp64
-int __sync_file_range2:sync_file_range2(int, unsigned int, off64_t, off64_t) arm
+sync_file_range(int, off64_t, off64_t, unsigned int) x86,lp64
+__sync_file_range2:sync_file_range2(int, unsigned int, off64_t, off64_t) arm
-pid_t wait4(pid_t, int*, int, struct rusage*) all
-int __waitid:waitid(int, pid_t, siginfo_t*, int, void*) all
+wait4(pid_t, int*, int, struct rusage*) all
+__waitid:waitid(int, pid_t, siginfo_t*, int, void*) all
# ARM-specific
-int __set_tls:__ARM_NR_set_tls(void*) arm
-int cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) arm
+__set_tls:__ARM_NR_set_tls(void*) arm
+cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) arm
# riscv64-specific
-int __riscv_flush_icache:riscv_flush_icache(void*, void*, unsigned long) riscv64
+__riscv_flush_icache:riscv_flush_icache(void*, void*, unsigned long) riscv64
# x86-specific
-int __set_thread_area:set_thread_area(void*) x86
-long arch_prctl(int, unsigned long) x86_64
+__set_thread_area:set_thread_area(void*) x86
+arch_prctl(int, unsigned long) x86_64
# vdso stuff.
-int __clock_getres:clock_getres(clockid_t, struct timespec*) all
-int __clock_gettime:clock_gettime(clockid_t, struct timespec*) all
-int __gettimeofday:gettimeofday(struct timeval*, struct timezone*) all
+__clock_getres:clock_getres(clockid_t, struct timespec*) all
+__clock_gettime:clock_gettime(clockid_t, struct timespec*) all
+__gettimeofday:gettimeofday(struct timeval*, struct timezone*) all
# <sys/random.h>
-ssize_t getrandom(void*, size_t, unsigned) all
+getrandom(void*, size_t, unsigned) all
# <sys/pidfd.h>
-int __pidfd_open:pidfd_open(pid_t, unsigned int) all
-int __pidfd_getfd:pidfd_getfd(int, int, unsigned int) all
-int pidfd_send_signal(int, int, siginfo_t*, unsigned int) all
+__pidfd_open:pidfd_open(pid_t, unsigned int) all
+__pidfd_getfd:pidfd_getfd(int, int, unsigned int) all
+pidfd_send_signal(int, int, siginfo_t*, unsigned int) all
diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py
index 6eb0d5e..aa4f1cb 100755
--- a/libc/tools/gensyscalls.py
+++ b/libc/tools/gensyscalls.py
@@ -338,8 +338,11 @@
def parse_line(self, line):
""" parse a syscall spec line.
- line processing, format is
- return type func_name[|alias_list][:syscall_name[:socketcall_id]] ( [paramlist] ) architecture_list
+ format is one syscall per line:
+
+ func_name[|alias_list][:syscall_name[:socketcall_id]] ( [paramlist] ) architecture_list
+
+ with no line breaking/continuation allowed.
"""
pos_lparen = line.find('(')
E = self.E
@@ -352,12 +355,7 @@
E("missing or misplaced right parenthesis in '%s'" % line)
return
- return_type = line[:pos_lparen].strip().split()
- if len(return_type) < 2:
- E("missing return type in '%s'" % line)
- return
-
- syscall_func = return_type[-1]
+ syscall_func = line[:pos_lparen]
socketcall_id = -1
pos_colon = syscall_func.find(':')