# This file is used to automatically generate bionic's system call stubs.
#
# Each non-blank, non-comment line has the following format:
#
# return_type func_name[|alias_list][:syscall_name[:socketcall_id]]([parameter_list]) arch_list
#
# where:
#       arch_list ::= "all" | arches
#       arches    ::= arch |  arch "," arches
#       arch      ::= "arm" | "arm64" | "x86" | "x86_64" | "lp32" | "lp64"
#
# Note:
#      - syscall_name corresponds to the name of the syscall, which may differ from
#        the exported function name (example: the exit syscall is implemented by the _exit()
#        function, which is not the same as the standard C exit() function which calls it)
#
#      - alias_list is optional comma separated list of function aliases.
#
#      - 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:
#          socketcall(__NR_socket, 1, *(rest of args on stack)).
#
#      - Each parameter type is assumed to be stored in 32 bits.
#
# This file is processed by a python script named gensyscalls.py, run via
# genrules in Android.bp.

int     execve(const char*, char* const*, char* const*)  all

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
ssize_t readahead(int, off64_t, size_t)     all
int     getgroups:getgroups32(int, gid_t*)    lp32
int     getgroups:getgroups(int, gid_t*)      lp64
pid_t   getpgid(pid_t)             all
pid_t   getppid()                  all
pid_t   getsid(pid_t)              all
pid_t   setsid()                   all
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
void*   __brk:brk(void*)           all
int     kill(pid_t, int)           all
int     tgkill(pid_t tgid, pid_t tid, int sig)  all
int     __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
# 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

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
long    __arch_prctl:arch_prctl(int, unsigned long) x86_64
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

# 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

# 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

int         __close:close(int)  all
pid_t       __getpid:getpid()  all
int memfd_create(const char*, unsigned) all
int         munmap(void*, size_t)  all
void*       __mremap:mremap(void*, size_t, size_t, int, void*)  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         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

int __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
int readlinkat(int, const char*, char*, size_t)  all
int renameat(int, const char*, int, const char*)  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

# 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
int ftruncate64(int, off64_t) lp32
int ftruncate|ftruncate64(int, off_t) 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
# (mmap only gets two lines because we only used the 64-bit variant on 32-bit systems.)
void* __mmap2:mmap2(void*, size_t, int, int, int, long)   lp32
void* mmap|mmap64(void*, size_t, int, int, int, 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

# 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

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

int fstat64|fstat:fstat64(int, struct stat*) lp32
int 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

# 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

# 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

# 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

# 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

# scheduler & real-time
int sched_setscheduler(pid_t pid, int policy, const struct sched_param* param)  all
int sched_getscheduler(pid_t pid)  all
int sched_yield(void)  all
int sched_setparam(pid_t pid, const struct sched_param* param)  all
int sched_getparam(pid_t pid, struct sched_param* param)  all
int sched_get_priority_max(int policy)  all
int sched_get_priority_min(int policy)  all
int sched_rr_get_interval(pid_t pid, struct timespec* interval)  all
int sched_setaffinity(pid_t pid, size_t setsize, const cpu_set_t* set) all
int setns(int, int) all
int unshare(int) all
int __sched_getaffinity:sched_getaffinity(pid_t pid, size_t setsize, cpu_set_t* set)  all
int __getcpu:getcpu(unsigned*, unsigned*, 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

int     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

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 __eventfd:eventfd2(unsigned int, int)  all

void _exit|_Exit:exit_group(int)  all
void __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

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

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

int quotactl(int, const char*, int, char*)  all

int __set_tid_address:set_tid_address(int*)  all

int setfsgid(gid_t)  all
int setfsuid(uid_t)  all

int setdomainname(const char*, size_t)  all
int sethostname(const char*, size_t)  all

int __sync_file_range: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

pid_t wait4(pid_t, int*, int, struct rusage*)  all
int __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

# x86-specific
int     __set_thread_area:set_thread_area(void*) x86

# 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

# <sys/random.h>
ssize_t 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
