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