2013-09-24 09:30:25 +02:00
|
|
|
# This file is used to automatically generate bionic's system call stubs.
|
2009-03-04 04:28:35 +01:00
|
|
|
#
|
2013-09-24 09:30:25 +02:00
|
|
|
# Each non-blank, non-comment line has the following format:
|
2009-03-04 04:28:35 +01:00
|
|
|
#
|
2013-10-04 19:03:17 +02:00
|
|
|
# return_type func_name[|alias_list][:syscall_name[:socketcall_id]]([parameter_list]) arch_list
|
2009-03-04 04:28:35 +01:00
|
|
|
#
|
2013-09-24 09:30:25 +02:00
|
|
|
# where:
|
2013-10-16 03:18:58 +02:00
|
|
|
# arch_list ::= "all" | arch+
|
2014-02-06 01:59:23 +01:00
|
|
|
# arch ::= "arm" | "arm64" | "mips" | "mips64" | "x86" | "x86_64"
|
2013-09-24 09:30:25 +02:00
|
|
|
#
|
|
|
|
# Note:
|
2013-04-03 19:08:09 +02:00
|
|
|
# - syscall_name corresponds to the name of the syscall, which may differ from
|
2009-03-04 04:28:35 +01:00
|
|
|
# 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)
|
2013-09-24 09:30:25 +02:00
|
|
|
#
|
2013-10-04 19:03:17 +02:00
|
|
|
# - alias_list is optional comma separated list of function aliases.
|
|
|
|
#
|
2013-09-24 09:30:25 +02:00
|
|
|
# - The call_id parameter, given that func_name and syscall_name have
|
2009-03-04 04:28:35 +01:00
|
|
|
# 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)).
|
|
|
|
#
|
2013-09-24 09:30:25 +02:00
|
|
|
# - Each parameter type is assumed to be stored in 32 bits.
|
2009-03-04 04:28:35 +01:00
|
|
|
#
|
2013-04-03 19:08:09 +02:00
|
|
|
# This file is processed by a python script named gensyscalls.py.
|
2009-03-04 04:28:35 +01:00
|
|
|
|
2013-09-24 09:30:25 +02:00
|
|
|
int execve(const char*, char* const*, char* const*) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
2013-09-24 09:30:25 +02:00
|
|
|
uid_t getuid:getuid32() arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
uid_t getuid:getuid() arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
gid_t getgid:getgid32() arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
gid_t getgid:getgid() arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
uid_t geteuid:geteuid32() arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
uid_t geteuid:geteuid() arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
gid_t getegid:getegid32() arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
gid_t getegid:getegid() arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
uid_t getresuid:getresuid32(uid_t* ruid, uid_t* euid, uid_t* suid) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
uid_t getresuid:getresuid(uid_t* ruid, uid_t* euid, uid_t* suid) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
gid_t getresgid:getresgid32(gid_t* rgid, gid_t* egid, gid_t* sgid) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
gid_t getresgid:getresgid(gid_t* rgid, gid_t* egid, gid_t* sgid) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
ssize_t readahead(int, off64_t, size_t) all
|
|
|
|
int getgroups:getgroups32(int, gid_t*) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int getgroups:getgroups(int, gid_t*) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
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) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setgid:setgid(gid_t) arm64,mips,mips64,x86_64
|
2013-10-10 02:35:36 +02:00
|
|
|
int setuid:setuid32(uid_t) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setuid:setuid(uid_t) arm64,mips,mips64,x86_64
|
2013-10-10 02:35:36 +02:00
|
|
|
int setreuid:setreuid32(uid_t, uid_t) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setreuid:setreuid(uid_t, uid_t) arm64,mips,mips64,x86_64
|
2013-10-10 02:35:36 +02:00
|
|
|
int setresuid:setresuid32(uid_t, uid_t, uid_t) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setresuid:setresuid(uid_t, uid_t, uid_t) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
int setresgid:setresgid32(gid_t, gid_t, gid_t) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setresgid:setresgid(gid_t, gid_t, gid_t) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
void* __brk:brk(void*) all
|
2013-12-03 02:44:53 +01:00
|
|
|
int kill(pid_t, int) all
|
|
|
|
int tgkill(pid_t tgid, pid_t tid, int sig) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int __ptrace:ptrace(int request, int pid, void* addr, void* data) all
|
Fix <sys/resource.h>.
The situation here is a bit confusing. On 64-bit, rlimit and rlimit64 are
the same, and so getrlimit/getrlimit64, setrlimit/setrlimit64,
and prlimit/prlimit64 are all the same. On 32-bit, rlimit and rlimit64 are
different. 32-bit architectures other than MIPS go one step further by having
an even more limited getrlimit system call, so arm and x86 need to use
ugetrlimit instead of getrlimit. Worse, the 32-bit architectures don't have
64-bit getrlimit- and setrlimit-equivalent system calls, and you have to use
prlimit64 instead. There's no 32-bit prlimit system call, so there's no
easy implementation of that --- what should we do if the result of prlimit64
won't fit in a struct rlimit? Since 32-bit survived without prlimit/prlimit64
for this long, I'm not going to bother implementing prlimit for 32-bit.
We need the rlimit64 functions to be able to build strace 4.8 out of the box.
Change-Id: I1903d913b23016a2fc3b9f452885ac730d71e001
2014-01-09 19:17:03 +01:00
|
|
|
|
|
|
|
# <sys/resource.h>
|
|
|
|
int getrusage(int, struct rusage*) all
|
2016-11-30 00:10:29 +01:00
|
|
|
int __getpriority:getpriority(int, id_t) all
|
|
|
|
int setpriority(int, id_t, int) all
|
Fix <sys/resource.h>.
The situation here is a bit confusing. On 64-bit, rlimit and rlimit64 are
the same, and so getrlimit/getrlimit64, setrlimit/setrlimit64,
and prlimit/prlimit64 are all the same. On 32-bit, rlimit and rlimit64 are
different. 32-bit architectures other than MIPS go one step further by having
an even more limited getrlimit system call, so arm and x86 need to use
ugetrlimit instead of getrlimit. Worse, the 32-bit architectures don't have
64-bit getrlimit- and setrlimit-equivalent system calls, and you have to use
prlimit64 instead. There's no 32-bit prlimit system call, so there's no
easy implementation of that --- what should we do if the result of prlimit64
won't fit in a struct rlimit? Since 32-bit survived without prlimit/prlimit64
for this long, I'm not going to bother implementing prlimit for 32-bit.
We need the rlimit64 functions to be able to build strace 4.8 out of the box.
Change-Id: I1903d913b23016a2fc3b9f452885ac730d71e001
2014-01-09 19:17:03 +01:00
|
|
|
# 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*) arm,x86
|
|
|
|
int getrlimit(int, struct rlimit*) mips
|
2014-02-06 01:59:23 +01:00
|
|
|
int getrlimit|getrlimit64(int, struct rlimit*) arm64,mips64,x86_64
|
Fix <sys/resource.h>.
The situation here is a bit confusing. On 64-bit, rlimit and rlimit64 are
the same, and so getrlimit/getrlimit64, setrlimit/setrlimit64,
and prlimit/prlimit64 are all the same. On 32-bit, rlimit and rlimit64 are
different. 32-bit architectures other than MIPS go one step further by having
an even more limited getrlimit system call, so arm and x86 need to use
ugetrlimit instead of getrlimit. Worse, the 32-bit architectures don't have
64-bit getrlimit- and setrlimit-equivalent system calls, and you have to use
prlimit64 instead. There's no 32-bit prlimit system call, so there's no
easy implementation of that --- what should we do if the result of prlimit64
won't fit in a struct rlimit? Since 32-bit survived without prlimit/prlimit64
for this long, I'm not going to bother implementing prlimit for 32-bit.
We need the rlimit64 functions to be able to build strace 4.8 out of the box.
Change-Id: I1903d913b23016a2fc3b9f452885ac730d71e001
2014-01-09 19:17:03 +01:00
|
|
|
int setrlimit(int, const struct rlimit*) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setrlimit|setrlimit64(int, const struct rlimit*) arm64,mips64,x86_64
|
|
|
|
int prlimit64|prlimit(pid_t, int, struct rlimit64*, const struct rlimit64*) arm64,mips64,x86_64
|
Fix <sys/resource.h>.
The situation here is a bit confusing. On 64-bit, rlimit and rlimit64 are
the same, and so getrlimit/getrlimit64, setrlimit/setrlimit64,
and prlimit/prlimit64 are all the same. On 32-bit, rlimit and rlimit64 are
different. 32-bit architectures other than MIPS go one step further by having
an even more limited getrlimit system call, so arm and x86 need to use
ugetrlimit instead of getrlimit. Worse, the 32-bit architectures don't have
64-bit getrlimit- and setrlimit-equivalent system calls, and you have to use
prlimit64 instead. There's no 32-bit prlimit system call, so there's no
easy implementation of that --- what should we do if the result of prlimit64
won't fit in a struct rlimit? Since 32-bit survived without prlimit/prlimit64
for this long, I'm not going to bother implementing prlimit for 32-bit.
We need the rlimit64 functions to be able to build strace 4.8 out of the box.
Change-Id: I1903d913b23016a2fc3b9f452885ac730d71e001
2014-01-09 19:17:03 +01:00
|
|
|
int prlimit64(pid_t, int, struct rlimit64*, const struct rlimit64*) arm,mips,x86
|
|
|
|
|
2013-09-24 09:30:25 +02:00
|
|
|
int setgroups:setgroups32(int, const gid_t*) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setgroups:setgroups(int, const gid_t*) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
int setpgid(pid_t, pid_t) all
|
|
|
|
int setregid:setregid32(gid_t, gid_t) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int setregid:setregid(gid_t, gid_t) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
int chroot(const char*) all
|
2014-07-19 00:55:41 +02:00
|
|
|
int prctl(int, unsigned long, unsigned long, unsigned long, unsigned long) all
|
2013-10-04 23:55:30 +02:00
|
|
|
long __arch_prctl:arch_prctl(int, unsigned long) x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
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
|
2009-03-04 04:28:35 +01:00
|
|
|
|
|
|
|
# file descriptors
|
2013-09-24 09:30:25 +02:00
|
|
|
ssize_t read(int, void*, size_t) all
|
|
|
|
ssize_t write(int, const void*, size_t) all
|
2013-11-06 22:10:37 +01:00
|
|
|
ssize_t pread64(int, void*, size_t, off64_t) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
ssize_t pread64|pread(int, void*, size_t, off_t) arm64,mips64,x86_64
|
2013-11-06 22:10:37 +01:00
|
|
|
ssize_t pwrite64(int, void*, size_t, off64_t) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
ssize_t pwrite64|pwrite(int, void*, size_t, off_t) arm64,mips64,x86_64
|
2015-08-26 22:27:43 +02:00
|
|
|
|
|
|
|
# On LP32, preadv/pwritev don't use off64_t --- they use pairs of 32-bit
|
|
|
|
# arguments to avoid problems on architectures like ARM 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/.
|
|
|
|
ssize_t __preadv64:preadv(int, const struct iovec*, int, long, long) arm,mips,x86
|
|
|
|
ssize_t preadv|preadv64(int, const struct iovec*, int, off_t) arm64,mips64,x86_64
|
|
|
|
ssize_t __pwritev64:pwritev(int, const struct iovec*, int, long, long) arm,mips,x86
|
|
|
|
ssize_t pwritev|pwritev64(int, const struct iovec*, int, off_t) arm64,mips64,x86_64
|
|
|
|
|
2015-04-23 06:40:38 +02:00
|
|
|
int ___close:close(int) all
|
2014-06-20 01:39:01 +02:00
|
|
|
pid_t __getpid:getpid() all
|
2013-09-24 09:30:25 +02:00
|
|
|
int munmap(void*, size_t) all
|
2015-11-03 11:14:08 +01:00
|
|
|
void* ___mremap:mremap(void*, size_t, size_t, int, void*) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int msync(const void*, size_t, int) all
|
|
|
|
int mprotect(const void*, size_t, int) all
|
2014-12-03 20:11:50 +01:00
|
|
|
int madvise(void*, size_t, int) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int mlock(const void* addr, size_t len) 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
|
2016-11-29 23:26:15 +01:00
|
|
|
ssize_t readv(int, const struct iovec*, int) all
|
|
|
|
ssize_t writev(int, const struct iovec*, int) all
|
2013-11-07 01:20:54 +01:00
|
|
|
int __fcntl64:fcntl64(int, int, void*) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int fcntl(int, int, void*) arm64,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
int flock(int, int) all
|
2015-02-03 20:27:25 +01:00
|
|
|
int ___fchmod:fchmod(int, mode_t) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int dup(int) all
|
|
|
|
int pipe2(int*, int) all
|
2013-10-23 18:48:29 +02:00
|
|
|
int dup3(int, int, int) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int fsync(int) all
|
|
|
|
int fdatasync(int) all
|
|
|
|
int fchown:fchown32(int, uid_t, gid_t) arm,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int fchown:fchown(int, uid_t, gid_t) arm64,mips,mips64,x86_64
|
2013-09-24 09:30:25 +02:00
|
|
|
void sync(void) all
|
2015-05-31 22:43:13 +02:00
|
|
|
int ___fsetxattr:fsetxattr(int, const char*, const void*, size_t, int) all
|
|
|
|
ssize_t ___fgetxattr:fgetxattr(int, const char*, void*, size_t) all
|
2015-06-06 20:23:26 +02:00
|
|
|
ssize_t ___flistxattr:flistxattr(int, char*, size_t) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int fremovexattr(int, const char*) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
2014-06-06 20:44:55 +02:00
|
|
|
int __getdents64:getdents64(unsigned int, struct dirent*, unsigned int) arm,arm64,mips,mips64,x86,x86_64
|
2014-02-06 01:59:23 +01:00
|
|
|
|
2013-10-22 22:28:46 +02:00
|
|
|
int __openat:openat(int, const char*, int, mode_t) all
|
Fix "faccessat ignores flags"
The kernel system call faccessat() does not have any flags arguments,
so passing flags to the kernel is currently ignored.
Fix the kernel system call so that no flags argument is passed in.
Ensure that we don't support AT_SYMLINK_NOFOLLOW. This non-POSIX
(http://pubs.opengroup.org/onlinepubs/9699919799/functions/access.html)
flag is a glibc extension, and has non-intuitive, error prone behavior.
For example, consider the following code:
symlink("foo.is.dangling", "foo");
if (faccessat(AT_FDCWD, "foo", R_OK, AT_SYMLINK_NOFOLLOW) == 0) {
int fd = openat(AT_FDCWD, "foo", O_RDONLY | O_NOFOLLOW);
}
The faccessat() call in glibc will return true, but an attempt to
open the dangling symlink will end up failing. GLIBC documents this
as returning the access mode of the symlink itself, which will
always return true for any symlink on Linux.
Some further discussions of this are at:
* http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003617.html
* http://permalink.gmane.org/gmane.linux.lib.musl.general/6952
AT_SYMLINK_NOFOLLOW seems broken by design. I suspect this is why this
function was never added to POSIX. (note that "access" is pretty much
broken by design too, since it introduces a race condition between
check and action). We shouldn't support this until it's clearly
documented by POSIX or we can have it produce intuitive results.
Don't support AT_EACCESS for now. Implementing it is complicated, and
pretty much useless on Android, since we don't have setuid binaries.
See http://git.musl-libc.org/cgit/musl/commit/?id=0a05eace163cee9b08571d2ff9d90f5e82d9c228
for how an implementation might look.
Bug: 18867827
Change-Id: I25b86c5020f3152ffa3ac3047f6c4152908d0e04
2015-02-24 22:40:43 +01:00
|
|
|
int ___faccessat:faccessat(int, const char*, int) all
|
2015-02-03 20:27:25 +01:00
|
|
|
int ___fchmodat:fchmodat(int, const char*, mode_t) all
|
2013-10-22 22:28:46 +02:00
|
|
|
int fchownat(int, const char*, uid_t, gid_t, int) all
|
Implement some of the missing LFS64 support.
This gives us:
* <dirent.h>
struct dirent64
readdir64, readdir64_r, alphasort64, scandir64
* <fcntl.h>
creat64, openat64, open64.
* <sys/stat.h>
struct stat64
fstat64, fstatat64, lstat64, stat64.
* <sys/statvfs.h>
struct statvfs64
statvfs64, fstatvfs64.
* <sys/vfs.h>
struct statfs64
statfs64, fstatfs64.
This also removes some of the incorrect #define hacks we've had in the
past (for stat64, for example, which we promised to clean up way back
in bug 8472078).
Bug: 11865851
Bug: 8472078
Change-Id: Ia46443521918519f2dfa64d4621027dfd13ac566
2014-01-18 03:42:49 +01:00
|
|
|
int fstatat64|fstatat:fstatat64(int, const char*, struct stat*, int) arm,mips,x86
|
2017-06-12 10:52:12 +02:00
|
|
|
int fstatat64|fstatat:newfstatat(int, const char*, struct stat*, int) arm64,x86_64
|
2013-10-22 22:28:46 +02:00
|
|
|
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 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
|
|
|
|
|
2013-10-18 01:56:40 +02:00
|
|
|
# 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) arm,mips,x86
|
|
|
|
int __llseek:_llseek(int, unsigned long, unsigned long, off64_t*, int) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
off_t lseek|lseek64(int, off_t, int) arm64,mips64,x86_64
|
2013-10-18 01:56:40 +02:00
|
|
|
int ftruncate64(int, off64_t) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int ftruncate|ftruncate64(int, off_t) arm64,mips64,x86_64
|
2013-10-18 01:56:40 +02:00
|
|
|
ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count) arm,mips,x86
|
|
|
|
ssize_t sendfile64(int out_fd, int in_fd, off64_t* offset, size_t count) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
ssize_t sendfile|sendfile64(int out_fd, int in_fd, off_t* offset, size_t count) arm64,mips64,x86_64
|
2013-10-18 01:56:40 +02:00
|
|
|
int truncate(const char*, off_t) arm,mips,x86
|
|
|
|
int truncate64(const char*, off64_t) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int truncate|truncate64(const char*, off_t) arm64,mips64,x86_64
|
2013-12-12 10:36:27 +01:00
|
|
|
# (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) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
void* mmap|mmap64(void*, size_t, int, int, int, off_t) arm64,mips64,x86_64
|
2014-02-04 01:20:46 +01:00
|
|
|
# (fallocate only gets two lines because there is no 32-bit variant.)
|
|
|
|
int fallocate64:fallocate(int, int, off64_t, off64_t) arm,mips,x86
|
2014-02-06 01:59:23 +01:00
|
|
|
int fallocate|fallocate64(int, int, off_t, off_t) arm64,mips64,x86_64
|
2013-10-18 01:56:40 +02:00
|
|
|
|
2014-09-11 02:39:00 +02:00
|
|
|
# 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
|
2014-09-11 19:10:08 +02:00
|
|
|
int __fadvise64:fadvise64_64(int, off64_t, off64_t, int) x86
|
|
|
|
int __fadvise64:fadvise64(int, off64_t, off64_t, int) arm64,mips,mips64,x86_64
|
2014-09-11 02:39:00 +02:00
|
|
|
|
Implement some of the missing LFS64 support.
This gives us:
* <dirent.h>
struct dirent64
readdir64, readdir64_r, alphasort64, scandir64
* <fcntl.h>
creat64, openat64, open64.
* <sys/stat.h>
struct stat64
fstat64, fstatat64, lstat64, stat64.
* <sys/statvfs.h>
struct statvfs64
statvfs64, fstatvfs64.
* <sys/vfs.h>
struct statfs64
statfs64, fstatfs64.
This also removes some of the incorrect #define hacks we've had in the
past (for stat64, for example, which we promised to clean up way back
in bug 8472078).
Bug: 11865851
Bug: 8472078
Change-Id: Ia46443521918519f2dfa64d4621027dfd13ac566
2014-01-18 03:42:49 +01:00
|
|
|
int __fstatfs64:fstatfs64(int, size_t, struct statfs*) arm,mips,x86
|
2015-03-18 23:46:48 +01:00
|
|
|
int __fstatfs:fstatfs(int, struct statfs*) arm64,mips64,x86_64
|
Implement some of the missing LFS64 support.
This gives us:
* <dirent.h>
struct dirent64
readdir64, readdir64_r, alphasort64, scandir64
* <fcntl.h>
creat64, openat64, open64.
* <sys/stat.h>
struct stat64
fstat64, fstatat64, lstat64, stat64.
* <sys/statvfs.h>
struct statvfs64
statvfs64, fstatvfs64.
* <sys/vfs.h>
struct statfs64
statfs64, fstatfs64.
This also removes some of the incorrect #define hacks we've had in the
past (for stat64, for example, which we promised to clean up way back
in bug 8472078).
Bug: 11865851
Bug: 8472078
Change-Id: Ia46443521918519f2dfa64d4621027dfd13ac566
2014-01-18 03:42:49 +01:00
|
|
|
int __statfs64:statfs64(const char*, size_t, struct statfs*) arm,mips,x86
|
2015-03-18 23:46:48 +01:00
|
|
|
int __statfs:statfs(const char*, struct statfs*) arm64,mips64,x86_64
|
Implement some of the missing LFS64 support.
This gives us:
* <dirent.h>
struct dirent64
readdir64, readdir64_r, alphasort64, scandir64
* <fcntl.h>
creat64, openat64, open64.
* <sys/stat.h>
struct stat64
fstat64, fstatat64, lstat64, stat64.
* <sys/statvfs.h>
struct statvfs64
statvfs64, fstatvfs64.
* <sys/vfs.h>
struct statfs64
statfs64, fstatfs64.
This also removes some of the incorrect #define hacks we've had in the
past (for stat64, for example, which we promised to clean up way back
in bug 8472078).
Bug: 11865851
Bug: 8472078
Change-Id: Ia46443521918519f2dfa64d4621027dfd13ac566
2014-01-18 03:42:49 +01:00
|
|
|
|
|
|
|
int fstat64|fstat:fstat64(int, struct stat*) arm,mips,x86
|
2017-06-12 10:52:12 +02:00
|
|
|
int fstat64|fstat:fstat(int, struct stat*) arm64,x86_64
|
Implement some of the missing LFS64 support.
This gives us:
* <dirent.h>
struct dirent64
readdir64, readdir64_r, alphasort64, scandir64
* <fcntl.h>
creat64, openat64, open64.
* <sys/stat.h>
struct stat64
fstat64, fstatat64, lstat64, stat64.
* <sys/statvfs.h>
struct statvfs64
statvfs64, fstatvfs64.
* <sys/vfs.h>
struct statfs64
statfs64, fstatfs64.
This also removes some of the incorrect #define hacks we've had in the
past (for stat64, for example, which we promised to clean up way back
in bug 8472078).
Bug: 11865851
Bug: 8472078
Change-Id: Ia46443521918519f2dfa64d4621027dfd13ac566
2014-01-18 03:42:49 +01:00
|
|
|
|
2009-03-04 04:28:35 +01:00
|
|
|
# file system
|
2013-09-24 09:30:25 +02:00
|
|
|
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 swapon(const char*, int) all
|
|
|
|
int swapoff(const char*) all
|
2012-01-13 13:45:16 +01:00
|
|
|
|
2009-03-04 04:28:35 +01:00
|
|
|
# time
|
2013-09-24 09:30:25 +02:00
|
|
|
int settimeofday(const struct timeval*, const struct timezone*) all
|
|
|
|
clock_t times(struct tms*) all
|
|
|
|
int nanosleep(const struct timespec*, struct timespec*) all
|
2014-10-12 17:50:47 +02:00
|
|
|
int clock_settime(clockid_t, const struct timespec*) all
|
|
|
|
int clock_getres(clockid_t, struct timespec*) all
|
2015-06-16 04:39:04 +02:00
|
|
|
int ___clock_nanosleep:clock_nanosleep(clockid_t, int, const struct timespec*, struct timespec*) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int getitimer(int, const struct itimerval*) all
|
|
|
|
int setitimer(int, const struct itimerval*, struct itimerval*) all
|
2014-03-05 00:58:02 +01:00
|
|
|
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
|
2013-09-24 09:30:25 +02:00
|
|
|
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
|
2016-01-28 02:13:51 +01:00
|
|
|
int adjtimex(struct timex*) all
|
2016-02-03 22:19:10 +01:00
|
|
|
int clock_adjtime(clockid_t, struct timex*) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
|
|
|
# signals
|
2013-10-17 07:27:54 +02:00
|
|
|
int __sigaction:sigaction(int, const struct sigaction*, struct sigaction*) arm,mips,x86
|
2013-10-16 03:01:56 +02:00
|
|
|
int __rt_sigaction:rt_sigaction(int, const struct sigaction*, struct sigaction*, size_t) all
|
2013-10-16 21:53:58 +02:00
|
|
|
int __rt_sigpending:rt_sigpending(sigset_t*, size_t) all
|
2013-10-16 03:01:56 +02:00
|
|
|
int __rt_sigprocmask:rt_sigprocmask(int, const sigset_t*, sigset_t*, size_t) all
|
|
|
|
int __rt_sigsuspend:rt_sigsuspend(const sigset_t*, size_t) all
|
2016-05-23 20:11:12 +02:00
|
|
|
int __rt_sigtimedwait:rt_sigtimedwait(const sigset_t*, siginfo_t*, const timespec*, size_t) all
|
2015-05-18 20:19:11 +02:00
|
|
|
int ___rt_sigqueueinfo:rt_sigqueueinfo(pid_t, int, siginfo_t*) all
|
2014-05-17 00:47:29 +02:00
|
|
|
int __signalfd4:signalfd4(int, const sigset_t*, size_t, int) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
|
|
|
# sockets
|
2014-05-19 22:39:57 +02:00
|
|
|
int __socket:socket(int, int, int) arm,arm64,mips,mips64,x86_64
|
2014-02-06 01:59:23 +01:00
|
|
|
int socketpair(int, int, int, int*) arm,arm64,mips,mips64,x86_64
|
2016-08-16 22:37:24 +02:00
|
|
|
int bind(int, struct sockaddr*, socklen_t) arm,arm64,mips,mips64,x86_64
|
2014-05-12 20:19:16 +02:00
|
|
|
int __connect:connect(int, struct sockaddr*, socklen_t) arm,arm64,mips,mips64,x86_64
|
2014-02-06 01:59:23 +01:00
|
|
|
int listen(int, int) arm,arm64,mips,mips64,x86_64
|
2014-05-19 22:39:57 +02:00
|
|
|
int __accept4:accept4(int, struct sockaddr*, socklen_t*, int) arm,arm64,mips,mips64,x86_64
|
2014-02-06 01:59:23 +01:00
|
|
|
int getsockname(int, struct sockaddr*, socklen_t*) arm,arm64,mips,mips64,x86_64
|
|
|
|
int getpeername(int, struct sockaddr*, socklen_t*) arm,arm64,mips,mips64,x86_64
|
|
|
|
int sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t) arm,arm64,mips,mips64,x86_64
|
|
|
|
int recvfrom(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) arm,arm64,mips,mips64,x86_64
|
|
|
|
int shutdown(int, int) arm,arm64,mips,mips64,x86_64
|
|
|
|
int setsockopt(int, int, int, const void*, socklen_t) arm,arm64,mips,mips64,x86_64
|
|
|
|
int getsockopt(int, int, int, void*, socklen_t*) arm,arm64,mips,mips64,x86_64
|
2016-08-16 22:37:24 +02:00
|
|
|
ssize_t recvmsg(int, struct msghdr*, unsigned int) arm,arm64,mips,mips64,x86_64
|
|
|
|
ssize_t sendmsg(int, const struct msghdr*, unsigned int) arm,arm64,mips,mips64,x86_64
|
2014-02-10 13:11:29 +01:00
|
|
|
int recvmmsg(int, struct mmsghdr*, unsigned int, int, const struct timespec*) arm,arm64,mips,mips64,x86_64
|
|
|
|
int sendmmsg(int, struct mmsghdr*, unsigned int, int) arm,arm64,mips,mips64,x86_64
|
2009-03-04 04:28:35 +01:00
|
|
|
|
|
|
|
# sockets for x86. These are done as an "indexed" call to socketcall syscall.
|
2014-05-19 22:39:57 +02:00
|
|
|
int __socket:socketcall:1(int, int, int) x86
|
2013-09-24 09:30:25 +02:00
|
|
|
int bind:socketcall:2(int, struct sockaddr*, int) x86
|
2014-05-12 20:19:16 +02:00
|
|
|
int __connect:socketcall:3(int, struct sockaddr*, socklen_t) x86
|
2013-09-24 09:30:25 +02:00
|
|
|
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
|
|
|
|
int sendto:socketcall:11(int, const void*, size_t, int, const struct sockaddr*, socklen_t) x86
|
|
|
|
int 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
|
2014-05-19 22:39:57 +02:00
|
|
|
int __accept4:socketcall:18(int, struct sockaddr*, socklen_t*, int) x86
|
2014-02-10 13:11:29 +01:00
|
|
|
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
|
2009-03-04 04:28:35 +01:00
|
|
|
|
|
|
|
# scheduler & real-time
|
2013-09-24 09:30:25 +02:00
|
|
|
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
|
2014-01-02 21:05:50 +01:00
|
|
|
int setns(int, int) all
|
|
|
|
int unshare(int) all
|
2013-09-24 09:30:25 +02:00
|
|
|
int __sched_getaffinity:sched_getaffinity(pid_t pid, size_t setsize, cpu_set_t* set) all
|
2014-01-02 21:05:50 +01:00
|
|
|
int __getcpu:getcpu(unsigned*, unsigned*, void*) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
|
|
|
# other
|
2013-09-24 09:30:25 +02:00
|
|
|
int uname(struct utsname*) all
|
|
|
|
mode_t umask(mode_t) all
|
2013-10-16 03:01:56 +02:00
|
|
|
int __reboot:reboot(int, int, int, void*) all
|
2013-09-24 09:30:25 +02:00
|
|
|
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
|
2009-03-04 04:28:35 +01:00
|
|
|
|
2014-06-25 01:32:01 +02:00
|
|
|
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
|
|
|
|
|
2013-10-23 18:48:29 +02:00
|
|
|
int epoll_create1(int) all
|
|
|
|
int epoll_ctl(int, int op, int, struct epoll_event*) all
|
2013-10-25 00:15:14 +02:00
|
|
|
int __epoll_pwait:epoll_pwait(int, struct epoll_event*, int, int, const sigset_t*, size_t) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
2013-10-23 18:48:29 +02:00
|
|
|
int eventfd:eventfd2(unsigned int, int) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
2014-04-09 02:14:01 +02:00
|
|
|
void _exit|_Exit:exit_group(int) all
|
2013-10-25 07:36:58 +02:00
|
|
|
void __exit:exit(int) all
|
|
|
|
|
2013-10-23 18:48:29 +02:00
|
|
|
int inotify_init1(int) all
|
|
|
|
int inotify_add_watch(int, const char*, unsigned int) all
|
|
|
|
int inotify_rm_watch(int, unsigned int) all
|
2009-03-04 04:28:35 +01:00
|
|
|
|
2013-10-25 00:15:14 +02:00
|
|
|
int __pselect6:pselect6(int, fd_set*, fd_set*, fd_set*, timespec*, void*) all
|
|
|
|
int __ppoll:ppoll(pollfd*, unsigned int, timespec*, const sigset_t*, size_t) all
|
2010-09-26 22:29:14 +02:00
|
|
|
|
2015-06-11 02:24:20 +02:00
|
|
|
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
|
|
|
|
|
2016-04-06 08:01:42 +02:00
|
|
|
int quotactl(int, const char*, int, char*) all
|
|
|
|
|
2013-11-19 22:31:58 +01:00
|
|
|
int __set_tid_address:set_tid_address(int*) all
|
|
|
|
|
2014-07-31 00:05:09 +02:00
|
|
|
int setfsgid(gid_t) all
|
|
|
|
int setfsuid(uid_t) all
|
|
|
|
|
2016-03-03 17:37:53 +01:00
|
|
|
int setdomainname(const char*, size_t) all
|
2014-11-08 01:07:13 +01:00
|
|
|
int sethostname(const char*, size_t) all
|
|
|
|
|
2016-04-05 20:56:03 +02:00
|
|
|
int __sync_file_range:sync_file_range(int, off64_t, off64_t, unsigned int) arm64,mips,mips64,x86,x86_64
|
|
|
|
int __sync_file_range2:sync_file_range2(int, unsigned int, off64_t, off64_t) arm
|
|
|
|
|
2013-10-25 07:36:58 +02:00
|
|
|
pid_t wait4(pid_t, int*, int, struct rusage*) all
|
|
|
|
int __waitid:waitid(int, pid_t, struct siginfo_t*, int, void*) all
|
|
|
|
|
2013-10-18 01:56:40 +02:00
|
|
|
# ARM-specific
|
2013-09-24 09:30:25 +02:00
|
|
|
int __set_tls:__ARM_NR_set_tls(void*) arm
|
|
|
|
int cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) arm
|
2012-01-28 02:51:42 +01:00
|
|
|
|
|
|
|
# MIPS-specific
|
2017-06-12 10:52:12 +02:00
|
|
|
int _flush_cache:cacheflush(char* addr, const int nbytes, const int op) mips
|
2014-05-13 01:11:06 +02:00
|
|
|
int __set_tls:set_thread_area(void*) mips,mips64
|
|
|
|
|
|
|
|
# x86-specific
|
|
|
|
int __set_thread_area:set_thread_area(void*) x86
|
2014-07-16 01:53:13 +02:00
|
|
|
|
|
|
|
# vdso stuff.
|
2017-05-30 16:00:41 +02:00
|
|
|
int __clock_gettime:clock_gettime(clockid_t, timespec*) all
|
|
|
|
int __gettimeofday:gettimeofday(timeval*, timezone*) all
|