am a69103ff: Fix the SYSCALLS.TXT documentation and remove a dead script.

* commit 'a69103ffe4b3d55f5bab7e7bfba36ccecddfa4da':
  Fix the SYSCALLS.TXT documentation and remove a dead script.
This commit is contained in:
Elliott Hughes 2013-04-03 12:35:49 -07:00 committed by Android Git Automerger
commit 57148994df
2 changed files with 258 additions and 444 deletions

View File

@ -1,13 +1,11 @@
# this file is used to list all the syscalls that will be supported by # This file is used to automatically generate bionic's the system calls stubs.
# the Bionic C library. It is used to automatically generate the syscall
# stubs, the list of syscall constants (__NR_xxxx) and the content of <linux/_unistd.h>
# #
# each non comment line has the following format: # Each non comment line has the following format:
# #
# return_type func_name[:syscall_name[:call_id]]([parameter_list]) (syscall_number|"stub") # return_type func_name[:syscall_name[:call_id]]([parameter_list]) (1|-1|"stub")
# #
# note that: # Note that:
# - syscall_name correspond to the name of the syscall, which may differ from # - 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() # 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) # function, which is not the same as the standard C exit() function which calls it)
# The call_id parameter, given that func_name and syscall_name have # The call_id parameter, given that func_name and syscall_name have
@ -18,302 +16,306 @@
# - each parameter type is assumed to be stored on 32 bits, there is no plan to support # - each parameter type is assumed to be stored on 32 bits, there is no plan to support
# 64-bit architectures at the moment # 64-bit architectures at the moment
# #
# - it there is "stub" instead of a syscall number, the tool will not generate any # - the final field can be "1", meaning: generate a stub for each architecture,
# assembler template for the syscall; it's up to the bionic implementation to provide # taking the constants from the kernel header files.
# a relevant C stub
# #
# - additionally, if the syscall number is different amoung ARM, and x86, MIPS use: # - the final field can be "stub" meaning: do not generate any stubs ---
# return_type funcname[:syscall_name](parameters) arm_number,x86_number,mips_number # in this case, a hand-written custom stub must be provided.
# TODO: replace this with something like "custom" or "none", or remove
# it entirely.
#
# - the final field can be a three-element list of 1s and -1 meaning:
# this system call is only available on some of the architectures (1),
# and no stub should be generated for those architectures marked with -1.
# the order is arm,x86,mips.
# TODO: replace this with something more readable like "-arm,-mips" (meaning x86 only).
# #
# This file is processed by a python script named gensyscalls.py. # This file is processed by a python script named gensyscalls.py.
# #
# The checksyscalls.py script can check that the syscall numbers here are
# correct by comparing them to the numbers in the Linux kernel headers.
#
# process management # process management
void _exit:exit_group (int) 248,252,246 void _exit:exit_group (int) 1
void _exit_thread:exit (int) 1 void _exit_thread:exit (int) 1
pid_t __fork:fork (void) 2 pid_t __fork:fork (void) 1
pid_t _waitpid:waitpid (pid_t, int*, int, struct rusage*) -1,7,7 pid_t _waitpid:waitpid (pid_t, int*, int, struct rusage*) -1,1,1
int __waitid:waitid(int, pid_t, struct siginfo_t*, int,void*) 280,284,278 int __waitid:waitid(int, pid_t, struct siginfo_t*, int,void*) 1
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage) 114 pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage) 1
# NOTE: this system call is never called directly, but we list it there # NOTE: this system call is never called directly, but we list it there
# to have __NR_clone properly defined. # to have __NR_clone properly defined.
# #
pid_t __sys_clone:clone (int, void*, int*, void*, int*) 120 pid_t __sys_clone:clone (int, void*, int*, void*, int*) 1
int execve (const char*, char* const*, char* const*) 11 int execve (const char*, char* const*, char* const*) 1
int __setuid:setuid32 (uid_t) 213,213,-1 int __setuid:setuid32 (uid_t) 1,1,-1
int __setuid:setuid (uid_t) -1,-1,23 int __setuid:setuid (uid_t) -1,-1,1
uid_t getuid:getuid32 () 199,199,-1 uid_t getuid:getuid32 () 1,1,-1
uid_t getuid:getuid () -1,-1,24 uid_t getuid:getuid () -1,-1,1
gid_t getgid:getgid32 () 200,200,-1 gid_t getgid:getgid32 () 1,1,-1
gid_t getgid:getgid () -1,-1,47 gid_t getgid:getgid () -1,-1,1
uid_t geteuid:geteuid32 () 201,201,-1 uid_t geteuid:geteuid32 () 1,1,-1
uid_t geteuid:geteuid () -1,-1,49 uid_t geteuid:geteuid () -1,-1,1
gid_t getegid:getegid32 () 202,202,-1 gid_t getegid:getegid32 () 1,1,-1
gid_t getegid:getegid () -1,-1,50 gid_t getegid:getegid () -1,-1,1
uid_t getresuid:getresuid32 (uid_t *ruid, uid_t *euid, uid_t *suid) 209,209,-1 uid_t getresuid:getresuid32 (uid_t *ruid, uid_t *euid, uid_t *suid) 1,1,-1
uid_t getresuid:getresuid (uid_t *ruid, uid_t *euid, uid_t *suid) -1,-1,186 uid_t getresuid:getresuid (uid_t *ruid, uid_t *euid, uid_t *suid) -1,-1,1
gid_t getresgid:getresgid32 (gid_t *rgid, gid_t *egid, gid_t *sgid) 211,211,-1 gid_t getresgid:getresgid32 (gid_t *rgid, gid_t *egid, gid_t *sgid) 1,1,-1
gid_t getresgid:getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid) -1,-1,191 gid_t getresgid:getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid) -1,-1,1
pid_t gettid() 224,224,222 pid_t gettid() 1
ssize_t readahead(int, off64_t, size_t) 225,225,223 ssize_t readahead(int, off64_t, size_t) 1
int getgroups:getgroups32(int, gid_t *) 205,205,-1 int getgroups:getgroups32(int, gid_t *) 1,1,-1
int getgroups:getgroups(int, gid_t *) -1,-1,80 int getgroups:getgroups(int, gid_t *) -1,-1,1
pid_t getpgid(pid_t) 132 pid_t getpgid(pid_t) 1
pid_t getppid() 64 pid_t getppid() 1
pid_t getsid(pid_t) 147,147,151 pid_t getsid(pid_t) 1
pid_t setsid() 66 pid_t setsid() 1
int setgid:setgid32(gid_t) 214,214,-1 int setgid:setgid32(gid_t) 1,1,-1
int setgid:setgid(gid_t) -1,-1,46 int setgid:setgid(gid_t) -1,-1,1
int seteuid:seteuid32(uid_t) stub int seteuid:seteuid32(uid_t) stub
int __setreuid:setreuid32(uid_t, uid_t) 203,203,-1 int __setreuid:setreuid32(uid_t, uid_t) 1,1,-1
int __setreuid:setreuid(uid_t, uid_t) -1,-1,70 int __setreuid:setreuid(uid_t, uid_t) -1,-1,1
int __setresuid:setresuid32(uid_t, uid_t, uid_t) 208,208,-1 int __setresuid:setresuid32(uid_t, uid_t, uid_t) 1,1,-1
int __setresuid:setresuid(uid_t, uid_t, uid_t) -1,-1,185 int __setresuid:setresuid(uid_t, uid_t, uid_t) -1,-1,1
int setresgid:setresgid32(gid_t, gid_t, gid_t) 210,210,-1 int setresgid:setresgid32(gid_t, gid_t, gid_t) 1,1,-1
int setresgid:setresgid(gid_t, gid_t, gid_t) -1,-1,190 int setresgid:setresgid(gid_t, gid_t, gid_t) -1,-1,1
void* __brk:brk(void*) 45 void* __brk:brk(void*) 1
# see comments in arch-arm/bionic/kill.S to understand why we don't generate an ARM stub for kill/tkill # see comments in arch-arm/bionic/kill.S to understand why we don't generate an ARM stub for kill/tkill
int kill(pid_t, int) -1,37,37 int kill(pid_t, int) -1,1,1
int tkill(pid_t tid, int sig) -1,238,236 int tkill(pid_t tid, int sig) -1,1,1
int tgkill(pid_t tgid, pid_t tid, int sig) -1,270,266 int tgkill(pid_t tgid, pid_t tid, int sig) -1,1,1
int __ptrace:ptrace(int request, int pid, void* addr, void* data) 26 int __ptrace:ptrace(int request, int pid, void* addr, void* data) 1
int __set_thread_area:set_thread_area(void* user_desc) -1,243,283 int __set_thread_area:set_thread_area(void* user_desc) -1,1,1
int __getpriority:getpriority(int, int) 96 int __getpriority:getpriority(int, int) 1
int setpriority(int, int, int) 97 int setpriority(int, int, int) 1
int setrlimit(int resource, const struct rlimit *rlp) 75 int setrlimit(int resource, const struct rlimit *rlp) 1
int getrlimit:ugetrlimit(int resource, struct rlimit *rlp) 191,191,-1 int getrlimit:ugetrlimit(int resource, struct rlimit *rlp) 1,1,-1
int getrlimit:getrlimit(int resource, struct rlimit *rlp) -1,-1,76 int getrlimit:getrlimit(int resource, struct rlimit *rlp) -1,-1,1
int getrusage(int who, struct rusage* r_usage) 77 int getrusage(int who, struct rusage* r_usage) 1
int setgroups:setgroups32(int, const gid_t *) 206,206,-1 int setgroups:setgroups32(int, const gid_t *) 1,1,-1
int setgroups:setgroups(int, const gid_t *) -1,-1,81 int setgroups:setgroups(int, const gid_t *) -1,-1,1
pid_t getpgrp(void) stub pid_t getpgrp(void) stub
int setpgid(pid_t, pid_t) 57 int setpgid(pid_t, pid_t) 1
pid_t vfork(void) 190,-1,-1 pid_t vfork(void) 1,-1,-1
int setregid:setregid32(gid_t, gid_t) 204,204,-1 int setregid:setregid32(gid_t, gid_t) 1,1,-1
int setregid:setregid(gid_t, gid_t) -1,-1,71 int setregid:setregid(gid_t, gid_t) -1,-1,1
int chroot(const char *) 61 int chroot(const char *) 1
# IMPORTANT: Even though <sys/prctl.h> declares prctl(int,...), the syscall stub must take 6 arguments # IMPORTANT: Even though <sys/prctl.h> declares prctl(int,...), the syscall stub must take 6 arguments
# to match the kernel implementation. # to match the kernel implementation.
int prctl(int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5) 172,172,192 int prctl(int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5) 1
int capget(cap_user_header_t header, cap_user_data_t data) 184,184,204 int capget(cap_user_header_t header, cap_user_data_t data) 1
int capset(cap_user_header_t header, const cap_user_data_t data) 185,185,205 int capset(cap_user_header_t header, const cap_user_data_t data) 1
int sigaltstack(const stack_t*, stack_t*) 186,186,206 int sigaltstack(const stack_t*, stack_t*) 1
int acct(const char* filepath) 51 int acct(const char* filepath) 1
# file descriptors # file descriptors
ssize_t read (int, void*, size_t) 3 ssize_t read (int, void*, size_t) 1
ssize_t write (int, const void*, size_t) 4 ssize_t write (int, const void*, size_t) 1
ssize_t pread64 (int, void *, size_t, off64_t) 180,180,200 ssize_t pread64 (int, void *, size_t, off64_t) 1
ssize_t pwrite64 (int, void *, size_t, off64_t) 181,181,201 ssize_t pwrite64 (int, void *, size_t, off64_t) 1
int __open:open (const char*, int, mode_t) 5 int __open:open (const char*, int, mode_t) 1
int __openat:openat (int, const char*, int, mode_t) 322,295,288 int __openat:openat (int, const char*, int, mode_t) 1
int close (int) 6 int close (int) 1
int creat(const char*, mode_t) stub int creat(const char*, mode_t) stub
off_t lseek(int, off_t, int) 19 off_t lseek(int, off_t, int) 1
int __llseek:_llseek (int, unsigned long, unsigned long, loff_t*, int) 140 int __llseek:_llseek (int, unsigned long, unsigned long, loff_t*, int) 1
pid_t getpid () 20 pid_t getpid () 1
void * mmap(void *, size_t, int, int, int, long) stub void * mmap(void *, size_t, int, int, int, long) stub
void * __mmap2:mmap2(void*, size_t, int, int, int, long) 192,192,210 void * __mmap2:mmap2(void*, size_t, int, int, int, long) 1
int munmap(void *, size_t) 91 int munmap(void *, size_t) 1
void * mremap(void *, size_t, size_t, unsigned long) 163,163,167 void * mremap(void *, size_t, size_t, unsigned long) 1
int msync(const void *, size_t, int) 144 int msync(const void *, size_t, int) 1
int mprotect(const void *, size_t, int) 125 int mprotect(const void *, size_t, int) 1
int madvise(const void *, size_t, int) 220,219,218 int madvise(const void *, size_t, int) 1
int mlock(const void *addr, size_t len) 150,150,154 int mlock(const void *addr, size_t len) 1
int munlock(const void *addr, size_t len) 151,151,155 int munlock(const void *addr, size_t len) 1
int mlockall(int flags) 152,152,156 int mlockall(int flags) 1
int munlockall() 153,153,157 int munlockall() 1
int mincore(void* start, size_t length, unsigned char* vec) 219,218,217 int mincore(void* start, size_t length, unsigned char* vec) 1
int __ioctl:ioctl(int, int, void *) 54 int __ioctl:ioctl(int, int, void *) 1
int readv(int, const struct iovec *, int) 145 int readv(int, const struct iovec *, int) 1
int writev(int, const struct iovec *, int) 146 int writev(int, const struct iovec *, int) 1
int __fcntl:fcntl(int, int, void*) 55 int __fcntl:fcntl(int, int, void*) 1
int flock(int, int) 143 int flock(int, int) 1
int fchmod(int, mode_t) 94 int fchmod(int, mode_t) 1
int dup(int) 41 int dup(int) 1
int pipe(int *) 42,42,-1 int pipe(int *) 1,1,-1
int pipe2(int *, int) 359,331,328 int pipe2(int *, int) 1
int dup2(int, int) 63 int dup2(int, int) 1
int select:_newselect(int, struct fd_set *, struct fd_set *, struct fd_set *, struct timeval *) 142 int select:_newselect(int, struct fd_set *, struct fd_set *, struct fd_set *, struct timeval *) 1
int ftruncate(int, off_t) 93 int ftruncate(int, off_t) 1
int ftruncate64(int, off64_t) 194,194,212 int ftruncate64(int, off64_t) 1
int getdents:getdents64(unsigned int, struct dirent *, unsigned int) 217,220,219 int getdents:getdents64(unsigned int, struct dirent *, unsigned int) 1
int fsync(int) 118 int fsync(int) 1
int fdatasync(int) 148,148,152 int fdatasync(int) 1
int fchown:fchown32(int, uid_t, gid_t) 207,207,-1 int fchown:fchown32(int, uid_t, gid_t) 1,1,-1
int fchown:fchown(int, uid_t, gid_t) -1,-1,95 int fchown:fchown(int, uid_t, gid_t) -1,-1,1
void sync(void) 36 void sync(void) 1
int __fcntl64:fcntl64(int, int, void *) 221,221,220 int __fcntl64:fcntl64(int, int, void *) 1
int __fstatfs64:fstatfs64(int, size_t, struct statfs *) 267,269,256 int __fstatfs64:fstatfs64(int, size_t, struct statfs *) 1
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count) 187,187,207 ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count) 1
int fstatat:fstatat64(int dirfd, const char *path, struct stat *buf, int flags) 327,300,293 int fstatat:fstatat64(int dirfd, const char *path, struct stat *buf, int flags) 1
int mkdirat(int dirfd, const char *pathname, mode_t mode) 323,296,289 int mkdirat(int dirfd, const char *pathname, mode_t mode) 1
int fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags) 325,298,291 int fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags) 1
int fchmodat(int dirfd, const char *path, mode_t mode, int flags) 333,306,299 int fchmodat(int dirfd, const char *path, mode_t mode, int flags) 1
int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) 329,302,295 int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) 1
int fsetxattr(int, const char *, const void *, size_t, int) 228,228,226 int fsetxattr(int, const char *, const void *, size_t, int) 1
ssize_t fgetxattr(int, const char *, void *, size_t) 231,231,229 ssize_t fgetxattr(int, const char *, void *, size_t) 1
ssize_t flistxattr(int, char *, size_t) 234,234,232 ssize_t flistxattr(int, char *, size_t) 1
int fremovexattr(int, const char *) 237,237,235 int fremovexattr(int, const char *) 1
# file system # file system
int link (const char*, const char*) 9 int link (const char*, const char*) 1
int unlink (const char*) 10 int unlink (const char*) 1
int unlinkat (int, const char *, int) 328,301,294 int unlinkat (int, const char *, int) 1
int chdir (const char*) 12 int chdir (const char*) 1
int mknod (const char*, mode_t, dev_t) 14 int mknod (const char*, mode_t, dev_t) 1
int chmod (const char*,mode_t) 15 int chmod (const char*,mode_t) 1
int chown:chown32(const char *, uid_t, gid_t) 212,212,-1 int chown:chown32(const char *, uid_t, gid_t) 1,1,-1
int chown:chown(const char *, uid_t, gid_t) -1,-1,202 int chown:chown(const char *, uid_t, gid_t) -1,-1,1
int lchown:lchown32 (const char*, uid_t, gid_t) 198,198,-1 int lchown:lchown32 (const char*, uid_t, gid_t) 1,1,-1
int lchown:lchown (const char*, uid_t, gid_t) -1,-1,16 int lchown:lchown (const char*, uid_t, gid_t) -1,-1,1
int mount (const char*, const char*, const char*, unsigned long, const void*) 21 int mount (const char*, const char*, const char*, unsigned long, const void*) 1
int umount(const char*) stub int umount(const char*) stub
int umount2 (const char*, int) 52 int umount2 (const char*, int) 1
int fstat:fstat64(int, struct stat*) 197,197,215 int fstat:fstat64(int, struct stat*) 1
int stat:stat64(const char *, struct stat *) 195,195,213 int stat:stat64(const char *, struct stat *) 1
int lstat:lstat64(const char *, struct stat *) 196,196,214 int lstat:lstat64(const char *, struct stat *) 1
int mkdir(const char *, mode_t) 39 int mkdir(const char *, mode_t) 1
int readlink(const char *, char *, size_t) 85 int readlink(const char *, char *, size_t) 1
int rmdir(const char *) 40 int rmdir(const char *) 1
int rename(const char *, const char *) 38 int rename(const char *, const char *) 1
int __getcwd:getcwd(char * buf, size_t size) 183,183,203 int __getcwd:getcwd(char * buf, size_t size) 1
int access(const char *, int) 33 int access(const char *, int) 1
int faccessat(int, const char *, int, int) 334,307,300 int faccessat(int, const char *, int, int) 1
int symlink(const char *, const char *) 83 int symlink(const char *, const char *) 1
int fchdir(int) 133 int fchdir(int) 1
int truncate(const char*, off_t) 92 int truncate(const char*, off_t) 1
int setxattr(const char *, const char *, const void *, size_t, int) 226,226,224 int setxattr(const char *, const char *, const void *, size_t, int) 1
int lsetxattr(const char *, const char *, const void *, size_t, int) 227,227,225 int lsetxattr(const char *, const char *, const void *, size_t, int) 1
ssize_t getxattr(const char *, const char *, void *, size_t) 229,229,227 ssize_t getxattr(const char *, const char *, void *, size_t) 1
ssize_t lgetxattr(const char *, const char *, void *, size_t) 230,230,228 ssize_t lgetxattr(const char *, const char *, void *, size_t) 1
ssize_t listxattr(const char *, char *, size_t) 232,232,230 ssize_t listxattr(const char *, char *, size_t) 1
ssize_t llistxattr(const char *, char *, size_t) 233,233,231 ssize_t llistxattr(const char *, char *, size_t) 1
int removexattr(const char *, const char *) 235,235,233 int removexattr(const char *, const char *) 1
int lremovexattr(const char *, const char *) 236,236,234 int lremovexattr(const char *, const char *) 1
int __statfs64:statfs64(const char *, size_t, struct statfs *) 266,268,255 int __statfs64:statfs64(const char *, size_t, struct statfs *) 1
long unshare(unsigned long) 337,310,303 long unshare(unsigned long) 1
# time # time
int pause () 29 int pause () 1
int gettimeofday(struct timeval*, struct timezone*) 78 int gettimeofday(struct timeval*, struct timezone*) 1
int settimeofday(const struct timeval*, const struct timezone*) 79 int settimeofday(const struct timeval*, const struct timezone*) 1
clock_t times(struct tms *) 43 clock_t times(struct tms *) 1
int nanosleep(const struct timespec *, struct timespec *) 162,162,166 int nanosleep(const struct timespec *, struct timespec *) 1
int clock_gettime(clockid_t clk_id, struct timespec *tp) 263,265,263 int clock_gettime(clockid_t clk_id, struct timespec *tp) 1
int clock_settime(clockid_t clk_id, const struct timespec *tp) 262,264,262 int clock_settime(clockid_t clk_id, const struct timespec *tp) 1
int clock_getres(clockid_t clk_id, struct timespec *res) 264,266,264 int clock_getres(clockid_t clk_id, struct timespec *res) 1
int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *req, struct timespec *rem) 265,267,265 int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *req, struct timespec *rem) 1
int getitimer(int, const struct itimerval *) 105 int getitimer(int, const struct itimerval *) 1
int setitimer(int, const struct itimerval *, struct itimerval *) 104 int setitimer(int, const struct itimerval *, struct itimerval *) 1
int __timer_create:timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid) 257,259,257 int __timer_create:timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid) 1
int __timer_settime:timer_settime(timer_t, int, const struct itimerspec*, struct itimerspec*) 258,260,258 int __timer_settime:timer_settime(timer_t, int, const struct itimerspec*, struct itimerspec*) 1
int __timer_gettime:timer_gettime(timer_t, struct itimerspec*) 259,261,259 int __timer_gettime:timer_gettime(timer_t, struct itimerspec*) 1
int __timer_getoverrun:timer_getoverrun(timer_t) 260,262,260 int __timer_getoverrun:timer_getoverrun(timer_t) 1
int __timer_delete:timer_delete(timer_t) 261,263,261 int __timer_delete:timer_delete(timer_t) 1
int utimes(const char*, const struct timeval tvp[2]) 269,271,267 int utimes(const char*, const struct timeval tvp[2]) 1
int utimensat(int, const char *, const struct timespec times[2], int) 348,320,316 int utimensat(int, const char *, const struct timespec times[2], int) 1
# signals # signals
int sigaction(int, const struct sigaction *, struct sigaction *) 67 int sigaction(int, const struct sigaction *, struct sigaction *) 1
int sigprocmask(int, const sigset_t *, sigset_t *) 126 int sigprocmask(int, const sigset_t *, sigset_t *) 1
int __sigsuspend:sigsuspend(int unused1, int unused2, unsigned mask) 72,72,-1 int __sigsuspend:sigsuspend(int unused1, int unused2, unsigned mask) 1,1,-1
int __sigsuspend:sigsuspend(const sigset_t *mask) -1,-1,72 int __sigsuspend:sigsuspend(const sigset_t *mask) -1,-1,1
int __rt_sigaction:rt_sigaction (int sig, const struct sigaction *act, struct sigaction *oact, size_t sigsetsize) 174,174,194 int __rt_sigaction:rt_sigaction (int sig, const struct sigaction *act, struct sigaction *oact, size_t sigsetsize) 1
int __rt_sigprocmask:rt_sigprocmask (int how, const sigset_t *set, sigset_t *oset, size_t sigsetsize) 175,175,195 int __rt_sigprocmask:rt_sigprocmask (int how, const sigset_t *set, sigset_t *oset, size_t sigsetsize) 1
int __rt_sigtimedwait:rt_sigtimedwait(const sigset_t *set, struct siginfo_t *info, struct timespec_t *timeout, size_t sigset_size) 177,177,197 int __rt_sigtimedwait:rt_sigtimedwait(const sigset_t *set, struct siginfo_t *info, struct timespec_t *timeout, size_t sigset_size) 1
int sigpending(sigset_t *) 73 int sigpending(sigset_t *) 1
int signalfd4(int fd, const sigset_t *mask, size_t sizemask, int flags) 355,327,324 int signalfd4(int fd, const sigset_t *mask, size_t sizemask, int flags) 1
# sockets # sockets
int socket(int, int, int) 281,-1,183 int socket(int, int, int) 1,-1,1
int socketpair(int, int, int, int*) 288,-1,184 int socketpair(int, int, int, int*) 1,-1,1
int bind(int, struct sockaddr *, int) 282,-1,169 int bind(int, struct sockaddr *, int) 1,-1,1
int connect(int, struct sockaddr *, socklen_t) 283,-1,170 int connect(int, struct sockaddr *, socklen_t) 1,-1,1
int listen(int, int) 284,-1,174 int listen(int, int) 1,-1,1
int accept(int, struct sockaddr *, socklen_t *) 285,-1,168 int accept(int, struct sockaddr *, socklen_t *) 1,-1,1
int getsockname(int, struct sockaddr *, socklen_t *) 286,-1,172 int getsockname(int, struct sockaddr *, socklen_t *) 1,-1,1
int getpeername(int, struct sockaddr *, socklen_t *) 287,-1,171 int getpeername(int, struct sockaddr *, socklen_t *) 1,-1,1
int sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t) 290,-1,180 int sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t) 1,-1,1
int recvfrom(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) 292,-1,176 int recvfrom(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) 1,-1,1
int shutdown(int, int) 293,-1,182 int shutdown(int, int) 1,-1,1
int setsockopt(int, int, int, const void *, socklen_t) 294,-1,181 int setsockopt(int, int, int, const void *, socklen_t) 1,-1,1
int getsockopt(int, int, int, void *, socklen_t *) 295,-1,173 int getsockopt(int, int, int, void *, socklen_t *) 1,-1,1
int sendmsg(int, const struct msghdr *, unsigned int) 296,-1,179 int sendmsg(int, const struct msghdr *, unsigned int) 1,-1,1
int recvmsg(int, struct msghdr *, unsigned int) 297,-1,177 int recvmsg(int, struct msghdr *, unsigned int) 1,-1,1
# sockets for x86. These are done as an "indexed" call to socketcall syscall. # sockets for x86. These are done as an "indexed" call to socketcall syscall.
int socket:socketcall:1 (int, int, int) -1,102,-1 int socket:socketcall:1 (int, int, int) -1,1,-1
int bind:socketcall:2 (int, struct sockaddr *, int) -1,102,-1 int bind:socketcall:2 (int, struct sockaddr *, int) -1,1,-1
int connect:socketcall:3(int, struct sockaddr *, socklen_t) -1,102,-1 int connect:socketcall:3(int, struct sockaddr *, socklen_t) -1,1,-1
int listen:socketcall:4(int, int) -1,102,-1 int listen:socketcall:4(int, int) -1,1,-1
int accept:socketcall:5(int, struct sockaddr *, socklen_t *) -1,102,-1 int accept:socketcall:5(int, struct sockaddr *, socklen_t *) -1,1,-1
int getsockname:socketcall:6(int, struct sockaddr *, socklen_t *) -1,102,-1 int getsockname:socketcall:6(int, struct sockaddr *, socklen_t *) -1,1,-1
int getpeername:socketcall:7(int, struct sockaddr *, socklen_t *) -1,102,-1 int getpeername:socketcall:7(int, struct sockaddr *, socklen_t *) -1,1,-1
int socketpair:socketcall:8(int, int, int, int*) -1,102,-1 int socketpair:socketcall:8(int, int, int, int*) -1,1,-1
int sendto:socketcall:11(int, const void *, size_t, int, const struct sockaddr *, socklen_t) -1,102,-1 int sendto:socketcall:11(int, const void *, size_t, int, const struct sockaddr *, socklen_t) -1,1,-1
int recvfrom:socketcall:12(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) -1,102,-1 int recvfrom:socketcall:12(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) -1,1,-1
int shutdown:socketcall:13(int, int) -1,102,-1 int shutdown:socketcall:13(int, int) -1,1,-1
int setsockopt:socketcall:14(int, int, int, const void *, socklen_t) -1,102,-1 int setsockopt:socketcall:14(int, int, int, const void *, socklen_t) -1,1,-1
int getsockopt:socketcall:15(int, int, int, void *, socklen_t *) -1,102,-1 int getsockopt:socketcall:15(int, int, int, void *, socklen_t *) -1,1,-1
int sendmsg:socketcall:16(int, const struct msghdr *, unsigned int) -1,102,-1 int sendmsg:socketcall:16(int, const struct msghdr *, unsigned int) -1,1,-1
int recvmsg:socketcall:17(int, struct msghdr *, unsigned int) -1,102,-1 int recvmsg:socketcall:17(int, struct msghdr *, unsigned int) -1,1,-1
# scheduler & real-time # scheduler & real-time
int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param) 156,156,160 int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param) 1
int sched_getscheduler(pid_t pid) 157,157,161 int sched_getscheduler(pid_t pid) 1
int sched_yield(void) 158,158,162 int sched_yield(void) 1
int sched_setparam(pid_t pid, const struct sched_param *param) 154,154,158 int sched_setparam(pid_t pid, const struct sched_param *param) 1
int sched_getparam(pid_t pid, struct sched_param *param) 155,155,159 int sched_getparam(pid_t pid, struct sched_param *param) 1
int sched_get_priority_max(int policy) 159,159,163 int sched_get_priority_max(int policy) 1
int sched_get_priority_min(int policy) 160,160,164 int sched_get_priority_min(int policy) 1
int sched_rr_get_interval(pid_t pid, struct timespec *interval) 161,161,165 int sched_rr_get_interval(pid_t pid, struct timespec *interval) 1
int sched_setaffinity(pid_t pid, size_t setsize, const cpu_set_t* set) 241,241,239 int sched_setaffinity(pid_t pid, size_t setsize, const cpu_set_t* set) 1
int __sched_getaffinity:sched_getaffinity(pid_t pid, size_t setsize, cpu_set_t* set) 242,242,240 int __sched_getaffinity:sched_getaffinity(pid_t pid, size_t setsize, cpu_set_t* set) 1
int __getcpu:getcpu(unsigned *cpu, unsigned *node, void *unused) 345,318,312 int __getcpu:getcpu(unsigned *cpu, unsigned *node, void *unused) 1
# io priorities # io priorities
int ioprio_set(int which, int who, int ioprio) 314,289,314 int ioprio_set(int which, int who, int ioprio) 1
int ioprio_get(int which, int who) 315,290,315 int ioprio_get(int which, int who) 1
# other # other
int uname(struct utsname *) 122 int uname(struct utsname *) 1
mode_t umask(mode_t) 60 mode_t umask(mode_t) 1
int __reboot:reboot(int, int, int, void *) 88 int __reboot:reboot(int, int, int, void *) 1
int __syslog:syslog(int, char *, int) 103 int __syslog:syslog(int, char *, int) 1
int init_module(void *, unsigned long, const char *) 128 int init_module(void *, unsigned long, const char *) 1
int delete_module(const char*, unsigned int) 129 int delete_module(const char*, unsigned int) 1
int klogctl:syslog(int, char *, int) 103 int klogctl:syslog(int, char *, int) 1
int sysinfo(struct sysinfo *) 116 int sysinfo(struct sysinfo *) 1
int personality(unsigned long) 136 int personality(unsigned long) 1
long perf_event_open(struct perf_event_attr *attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags) 364,336,333 long perf_event_open(struct perf_event_attr *attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags) 1
# futex # futex
int futex(void *, int, int, void *, void *, int) 240,240,238 int futex(void *, int, int, void *, void *, int) 1
# epoll # epoll
int epoll_create(int size) 250,254,248 int epoll_create(int size) 1
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 251,255,249 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 1
int epoll_wait(int epfd, struct epoll_event *events, int max, int timeout) 252,256,250 int epoll_wait(int epfd, struct epoll_event *events, int max, int timeout) 1
int inotify_init(void) 316,291,284 int inotify_init(void) 1
int inotify_add_watch(int, const char *, unsigned int) 317,292,285 int inotify_add_watch(int, const char *, unsigned int) 1
int inotify_rm_watch(int, unsigned int) 318,293,286 int inotify_rm_watch(int, unsigned int) 1
int poll(struct pollfd *, unsigned int, long) 168,168,188 int poll(struct pollfd *, unsigned int, long) 1
int eventfd:eventfd2(unsigned int, int) 356,328,325 int eventfd:eventfd2(unsigned int, int) 1
# ARM-specific ARM_NR_BASE == 0x0f0000 == 983040 # ARM-specific ARM_NR_BASE == 0x0f0000 == 983040
int __set_tls:__ARM_NR_set_tls(void*) 983045,-1,-1 int __set_tls:__ARM_NR_set_tls(void*) 1,-1,-1
int cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) 983042,-1,-1 int cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) 1,-1,-1
# MIPS-specific # MIPS-specific
int _flush_cache:cacheflush(char *addr, const int nbytes, const int op) -1,-1,147 int _flush_cache:cacheflush(char *addr, const int nbytes, const int op) -1,-1,1
int syscall(int number,...) -1,-1,0 int syscall(int number,...) -1,-1,1

View File

@ -1,188 +0,0 @@
#!/usr/bin/python
#
# this tool is used to check that the syscall numbers that are in
# SYSCALLS.TXT correspond to those found in the Linux kernel sources
# for the arm, i386 and mips architectures
#
import sys, re, string, os, commands
from bionic_utils import *
# change this if necessary
syscalls_txt = "SYSCALLS.TXT"
def usage():
print "usage: checksyscalls [options] [kernel_headers_rootdir]"
print " options: -v enable verbose mode"
sys.exit(1)
linux_root = None
syscalls_file = None
def parse_command_line(args):
global linux_root, syscalls_file, verbose
program = args[0]
args = args[1:]
while len(args) > 0 and args[0][0] == "-":
option = args[0][1:]
args = args[1:]
if option == "v":
D_setlevel(1)
else:
usage()
if len(args) > 2:
usage()
if len(args) == 0:
linux_root = find_kernel_headers()
if linux_root == None:
print "Could not locate original or system kernel headers root directory."
print "Please specify one when calling this program, i.e. 'checksyscalls <headers-directory>'"
sys.exit(1)
print "using the following kernel headers root: '%s'" % linux_root
else:
linux_root = args[0]
if not os.path.isdir(linux_root):
print "the directory '%s' does not exist. aborting\n" % headers_root
sys.exit(1)
parse_command_line(sys.argv)
syscalls_file = find_file_from_upwards(None, syscalls_txt)
if not syscalls_file:
print "could not locate the %s file. Aborting" % syscalls_txt
sys.exit(1)
print "parsing %s" % syscalls_file
# read the syscalls description file
#
parser = SysCallsTxtParser()
parser.parse_file(syscalls_file)
syscalls = parser.syscalls
re_nr_line = re.compile( r"#define __NR_(\w*)\s*\(__NR_SYSCALL_BASE\+\s*(\w*)\)" )
re_nr_clock_line = re.compile( r"#define __NR_(\w*)\s*\(__NR_timer_create\+(\w*)\)" )
re_arm_nr_line = re.compile( r"#define __ARM_NR_(\w*)\s*\(__ARM_NR_BASE\+\s*(\w*)\)" )
re_x86_line = re.compile( r"#define __NR_(\w*)\s*([0-9]*)" )
re_mips_line = re.compile( r"#define __NR_(\w*)\s*\(__NR_Linux\s*\+\s*([0-9]*)\)" )
# now read the Linux arm header
def process_nr_line(line,dict):
m = re_mips_line.match(line)
if m:
if dict["Linux"]==4000:
dict[m.group(1)] = int(m.group(2))
return
m = re_nr_line.match(line)
if m:
dict[m.group(1)] = int(m.group(2))
return
m = re_nr_clock_line.match(line)
if m:
dict[m.group(1)] = int(m.group(2)) + 259
return
m = re_arm_nr_line.match(line)
if m:
offset_str = m.group(2)
#print "%s = %s" % (m.group(1), offset_str)
base = 10
if offset_str.lower().startswith("0x"):
# Processing something similar to
# #define __ARM_NR_cmpxchg (__ARM_NR_BASE+0x00fff0)
base = 16
dict["ARM_"+m.group(1)] = int(offset_str, base) + 0x0f0000
return
m = re_x86_line.match(line)
if m:
# try block because the ARM header has some #define _NR_XXXXX /* nothing */
try:
#print "%s = %s" % (m.group(1), m.group(2))
dict[m.group(1)] = int(m.group(2))
except:
pass
return
def process_header(header_file,dict):
fp = open(header_file)
D("reading "+header_file)
for line in fp.xreadlines():
line = line.strip()
if not line: continue
process_nr_line(line,dict)
fp.close()
arm_dict = {}
x86_dict = {}
mips_dict = {}
# remove trailing slash from the linux_root, if any
if linux_root[-1] == '/':
linux_root = linux_root[:-1]
arm_unistd = find_arch_header(linux_root, "arm", "unistd.h")
if not arm_unistd:
print "WEIRD: Could not locate the ARM unistd.h kernel header file,"
print "maybe using a different set of kernel headers might help."
sys.exit(1)
# on recent kernels, asm-i386 and asm-x64_64 have been merged into asm-x86
# with two distinct unistd_32.h and unistd_64.h definition files.
# take care of this here
#
x86_unistd = find_arch_header(linux_root, "i386", "unistd.h")
if not x86_unistd:
x86_unistd = find_arch_header(linux_root, "x86", "unistd_32.h")
if not x86_unistd:
print "WEIRD: Could not locate the i386/x86 unistd.h header file,"
print "maybe using a different set of kernel headers might help."
sys.exit(1)
mips_unistd = find_arch_header(linux_root, "mips", "unistd.h")
if not mips_unistd:
print "WEIRD: Could not locate the Mips unistd.h kernel header file,"
print "maybe using a different set of kernel headers might help."
sys.exit(1)
process_header( arm_unistd, arm_dict )
process_header( x86_unistd, x86_dict )
process_header( mips_unistd, mips_dict )
# now perform the comparison
errors = 0
def check_syscalls(archname, idname, arch_dict):
errors = 0
for sc in syscalls:
sc_name = sc["name"]
sc_id = sc[idname]
if sc_id == -1:
sc_id = sc["common"]
if sc_id >= 0:
if not arch_dict.has_key(sc_name):
print "error: %s syscall %s not defined, should be %d" % (archname, sc_name, sc_id)
errors += 1
elif arch_dict[sc_name] != sc_id:
print "error: %s syscall %s should be %d instead of %d" % (archname, sc_name, arch_dict[sc_name], sc_id)
errors += 1
return errors
errors += check_syscalls("arm", "armid", arm_dict)
errors += check_syscalls("x86", "x86id", x86_dict)
errors += check_syscalls("mips", "mipsid", mips_dict)
if errors == 0:
print "congratulations, everything's fine !!"
else:
print "correct %d errors !!" % errors