diff options
Diffstat (limited to 'libc/include/sys')
| -rw-r--r-- | libc/include/sys/atomics.h | 46 | ||||
| -rw-r--r-- | libc/include/sys/cdefs.h | 2 | ||||
| -rw-r--r-- | libc/include/sys/exec_elf.h | 2 | ||||
| -rw-r--r-- | libc/include/sys/linux-syscalls.h | 6 | ||||
| -rw-r--r-- | libc/include/sys/linux-unistd.h | 250 | ||||
| -rw-r--r-- | libc/include/sys/personality.h | 50 |
6 files changed, 54 insertions, 302 deletions
diff --git a/libc/include/sys/atomics.h b/libc/include/sys/atomics.h index d3fa145..3ada8de 100644 --- a/libc/include/sys/atomics.h +++ b/libc/include/sys/atomics.h @@ -33,10 +33,48 @@ __BEGIN_DECLS -extern int __atomic_cmpxchg(int old, int _new, volatile int *ptr); -extern int __atomic_swap(int _new, volatile int *ptr); -extern int __atomic_dec(volatile int *ptr); -extern int __atomic_inc(volatile int *ptr); +/* Note: atomic operations that were exported by the C library didn't + * provide any memory barriers, which created potential issues on + * multi-core devices. We now define them as inlined calls to + * GCC sync builtins, which always provide a full barrier. + * + * NOTE: The C library still exports atomic functions by the same + * name to ensure ABI stability for existing NDK machine code. + * + * If you are an NDK developer, we encourage you to rebuild your + * unmodified sources against this header as soon as possible. + */ +#define __ATOMIC_INLINE__ static __inline__ __attribute__((always_inline)) + +__ATOMIC_INLINE__ int +__atomic_cmpxchg(int old, int _new, volatile int *ptr) +{ + /* We must return 0 on success */ + return __sync_val_compare_and_swap(ptr, old, _new) != old; +} + +__ATOMIC_INLINE__ int +__atomic_swap(int _new, volatile int *ptr) +{ + int prev; + do { + prev = *ptr; + } while (__sync_val_compare_and_swap(ptr, prev, _new) != prev); + return prev; +} + +__ATOMIC_INLINE__ int +__atomic_dec(volatile int *ptr) +{ + return __sync_fetch_and_sub (ptr, 1); +} + +__ATOMIC_INLINE__ int +__atomic_inc(volatile int *ptr) +{ + return __sync_fetch_and_add (ptr, 1); +} + int __futex_wait(volatile void *ftx, int val, const struct timespec *timeout); int __futex_wake(volatile void *ftx, int count); diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index 92035d4..71b419c 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -306,9 +306,11 @@ #if __GNUC_PREREQ__(2, 96) #define __noreturn __attribute__((__noreturn__)) #define __mallocfunc __attribute__((malloc)) +#define __purefunc __attribute__((pure)) #else #define __noreturn #define __mallocfunc +#define __purefunc #endif /* diff --git a/libc/include/sys/exec_elf.h b/libc/include/sys/exec_elf.h index 03bbdac..eecbd64 100644 --- a/libc/include/sys/exec_elf.h +++ b/libc/include/sys/exec_elf.h @@ -130,4 +130,6 @@ #define STT_LOPROC 13 /* reserved range for processor */ #define STT_HIPROC 15 /* specific symbol types */ +#define PT_GNU_RELRO 0x6474e552 /* Read-only post relocation */ + #endif /* _SYS_EXEC_ELF_H_ */ diff --git a/libc/include/sys/linux-syscalls.h b/libc/include/sys/linux-syscalls.h index a60d3fa..eb04f85 100644 --- a/libc/include/sys/linux-syscalls.h +++ b/libc/include/sys/linux-syscalls.h @@ -83,6 +83,7 @@ #define __NR_msync (__NR_SYSCALL_BASE + 144) #define __NR_readv (__NR_SYSCALL_BASE + 145) #define __NR_writev (__NR_SYSCALL_BASE + 146) +#define __NR_perf_event_open (__NR_SYSCALL_BASE + 364) #ifdef __arm__ #define __NR_exit_group (__NR_SYSCALL_BASE + 248) @@ -143,6 +144,7 @@ #define __NR_stat64 (__NR_SYSCALL_BASE + 195) #define __NR_lstat64 (__NR_SYSCALL_BASE + 196) #define __NR_getcwd (__NR_SYSCALL_BASE + 183) +#define __NR_faccessat (__NR_SYSCALL_BASE + 334) #define __NR_setxattr (__NR_SYSCALL_BASE + 226) #define __NR_lsetxattr (__NR_SYSCALL_BASE + 227) #define __NR_getxattr (__NR_SYSCALL_BASE + 229) @@ -299,6 +301,7 @@ #define __NR_clock_nanosleep (__NR_SYSCALL_BASE + 267) #define __NR_statfs64 (__NR_SYSCALL_BASE + 268) #define __NR_fstatfs64 (__NR_SYSCALL_BASE + 269) +#define __NR_tgkill (__NR_SYSCALL_BASE + 270) #define __NR_utimes (__NR_SYSCALL_BASE + 271) #define __NR_waitid (__NR_SYSCALL_BASE + 284) #define __NR_ioprio_set (__NR_SYSCALL_BASE + 289) @@ -313,6 +316,7 @@ #define __NR_unlinkat (__NR_SYSCALL_BASE + 301) #define __NR_renameat (__NR_SYSCALL_BASE + 302) #define __NR_fchmodat (__NR_SYSCALL_BASE + 306) +#define __NR_faccessat (__NR_SYSCALL_BASE + 307) #define __NR_getcpu (__NR_SYSCALL_BASE + 318) #define __NR_utimensat (__NR_SYSCALL_BASE + 320) #define __NR_eventfd2 (__NR_SYSCALL_BASE + 328) @@ -424,6 +428,7 @@ #define __NR_clock_gettime (__NR_SYSCALL_BASE + 263) #define __NR_clock_getres (__NR_SYSCALL_BASE + 264) #define __NR_clock_nanosleep (__NR_SYSCALL_BASE + 265) +#define __NR_tgkill (__NR_SYSCALL_BASE + 266) #define __NR_utimes (__NR_SYSCALL_BASE + 267) #define __NR_waitid (__NR_SYSCALL_BASE + 278) #define __NR_set_thread_area (__NR_SYSCALL_BASE + 283) @@ -437,6 +442,7 @@ #define __NR_unlinkat (__NR_SYSCALL_BASE + 294) #define __NR_renameat (__NR_SYSCALL_BASE + 295) #define __NR_fchmodat (__NR_SYSCALL_BASE + 299) +#define __NR_faccessat (__NR_SYSCALL_BASE + 300) #define __NR_getcpu (__NR_SYSCALL_BASE + 312) #define __NR_ioprio_set (__NR_SYSCALL_BASE + 314) #define __NR_ioprio_get (__NR_SYSCALL_BASE + 315) diff --git a/libc/include/sys/linux-unistd.h b/libc/include/sys/linux-unistd.h deleted file mode 100644 index d445f9c..0000000 --- a/libc/include/sys/linux-unistd.h +++ /dev/null @@ -1,250 +0,0 @@ -/* auto-generated by gensyscalls.py, do not touch */ -#ifndef _BIONIC_LINUX_UNISTD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -void _exit (int); -void _exit_thread (int); -pid_t __fork (void); -pid_t _waitpid (pid_t, int*, int, struct rusage*); -int __waitid (int, pid_t, struct siginfo_t*, int,void*); -pid_t __sys_clone (int, void*, int*, void*, int*); -int execve (const char*, char* const*, char* const*); -int __setuid (uid_t); -int __setuid (uid_t); -uid_t getuid (void); -uid_t getuid (void); -gid_t getgid (void); -gid_t getgid (void); -uid_t geteuid (void); -uid_t geteuid (void); -gid_t getegid (void); -gid_t getegid (void); -uid_t getresuid (uid_t *ruid, uid_t *euid, uid_t *suid); -uid_t getresuid (uid_t *ruid, uid_t *euid, uid_t *suid); -gid_t getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid); -gid_t getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid); -pid_t gettid (void); -ssize_t readahead (int, off64_t, size_t); -int getgroups (int, gid_t *); -int getgroups (int, gid_t *); -pid_t getpgid (pid_t); -pid_t getppid (void); -pid_t setsid (void); -int setgid (gid_t); -int setgid (gid_t); -int seteuid (uid_t); -int __setreuid (uid_t, uid_t); -int __setreuid (uid_t, uid_t); -int __setresuid (uid_t, uid_t, uid_t); -int __setresuid (uid_t, uid_t, uid_t); -int setresgid (gid_t, gid_t, gid_t); -int setresgid (gid_t, gid_t, gid_t); -void* __brk (void*); -int kill (pid_t, int); -int tkill (pid_t tid, int sig); -int __ptrace (int request, int pid, void* addr, void* data); -int __set_thread_area (void* user_desc); -int __getpriority (int, int); -int setpriority (int, int, int); -int setrlimit (int resource, const struct rlimit *rlp); -int getrlimit (int resource, struct rlimit *rlp); -int getrlimit (int resource, struct rlimit *rlp); -int getrusage (int who, struct rusage* r_usage); -int setgroups (int, const gid_t *); -int setgroups (int, const gid_t *); -pid_t getpgrp (void); -int setpgid (pid_t, pid_t); -pid_t vfork (void); -int setregid (gid_t, gid_t); -int setregid (gid_t, gid_t); -int chroot (const char *); -int prctl (int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5); -int capget (cap_user_header_t header, cap_user_data_t data); -int capset (cap_user_header_t header, const cap_user_data_t data); -int sigaltstack (const stack_t*, stack_t*); -int acct (const char* filepath); -ssize_t read (int, void*, size_t); -ssize_t write (int, const void*, size_t); -ssize_t pread64 (int, void *, size_t, off64_t); -ssize_t pwrite64 (int, void *, size_t, off64_t); -int __open (const char*, int, mode_t); -int __openat (int, const char*, int, mode_t); -int close (int); -int creat (const char*, mode_t); -off_t lseek (int, off_t, int); -int __llseek (int, unsigned long, unsigned long, loff_t*, int); -pid_t getpid (void); -void * mmap (void *, size_t, int, int, int, long); -void * __mmap2 (void*, size_t, int, int, int, long); -int munmap (void *, size_t); -void * mremap (void *, size_t, size_t, unsigned long); -int msync (const void *, size_t, int); -int mprotect (const void *, size_t, int); -int madvise (const void *, size_t, int); -int mlock (const void *addr, size_t len); -int munlock (const void *addr, size_t len); -int mincore (void* start, size_t length, unsigned char* vec); -int __ioctl (int, int, void *); -int readv (int, const struct iovec *, int); -int writev (int, const struct iovec *, int); -int __fcntl (int, int, void*); -int flock (int, int); -int fchmod (int, mode_t); -int dup (int); -int pipe (int *); -int pipe2 (int *, int); -int dup2 (int, int); -int select (int, struct fd_set *, struct fd_set *, struct fd_set *, struct timeval *); -int ftruncate (int, off_t); -int ftruncate64 (int, off64_t); -int getdents (unsigned int, struct dirent *, unsigned int); -int fsync (int); -int fdatasync (int); -int fchown (int, uid_t, gid_t); -int fchown (int, uid_t, gid_t); -void sync (void); -int __fcntl64 (int, int, void *); -int __fstatfs64 (int, size_t, struct statfs *); -ssize_t sendfile (int out_fd, int in_fd, off_t *offset, size_t count); -int fstatat (int dirfd, const char *path, struct stat *buf, int flags); -int mkdirat (int dirfd, const char *pathname, mode_t mode); -int fchownat (int dirfd, const char *path, uid_t owner, gid_t group, int flags); -int fchmodat (int dirfd, const char *path, mode_t mode, int flags); -int renameat (int olddirfd, const char *oldpath, int newdirfd, const char *newpath); -int fsetxattr (int, const char *, const void *, size_t, int); -ssize_t fgetxattr (int, const char *, void *, size_t); -ssize_t flistxattr (int, char *, size_t); -int fremovexattr (int, const char *); -int link (const char*, const char*); -int unlink (const char*); -int unlinkat (int, const char *, int); -int chdir (const char*); -int mknod (const char*, mode_t, dev_t); -int chmod (const char*,mode_t); -int chown (const char *, uid_t, gid_t); -int chown (const char *, uid_t, gid_t); -int lchown (const char*, uid_t, gid_t); -int lchown (const char*, uid_t, gid_t); -int mount (const char*, const char*, const char*, unsigned long, const void*); -int umount (const char*); -int umount2 (const char*, int); -int fstat (int, struct stat*); -int stat (const char *, struct stat *); -int lstat (const char *, struct stat *); -int mkdir (const char *, mode_t); -int readlink (const char *, char *, size_t); -int rmdir (const char *); -int rename (const char *, const char *); -int __getcwd (char * buf, size_t size); -int access (const char *, int); -int symlink (const char *, const char *); -int fchdir (int); -int truncate (const char*, off_t); -int setxattr (const char *, const char *, const void *, size_t, int); -int lsetxattr (const char *, const char *, const void *, size_t, int); -ssize_t getxattr (const char *, const char *, void *, size_t); -ssize_t lgetxattr (const char *, const char *, void *, size_t); -ssize_t listxattr (const char *, char *, size_t); -ssize_t llistxattr (const char *, char *, size_t); -int removexattr (const char *, const char *); -int lremovexattr (const char *, const char *); -int __statfs64 (const char *, size_t, struct statfs *); -int pause (void); -int gettimeofday (struct timeval*, struct timezone*); -int settimeofday (const struct timeval*, const struct timezone*); -clock_t times (struct tms *); -int nanosleep (const struct timespec *, struct timespec *); -int clock_gettime (clockid_t clk_id, struct timespec *tp); -int clock_settime (clockid_t clk_id, const struct timespec *tp); -int clock_getres (clockid_t clk_id, struct timespec *res); -int clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, struct timespec *rem); -int getitimer (int, const struct itimerval *); -int setitimer (int, const struct itimerval *, struct itimerval *); -int __timer_create (clockid_t clockid, struct sigevent *evp, timer_t *timerid); -int __timer_settime (timer_t, int, const struct itimerspec*, struct itimerspec*); -int __timer_gettime (timer_t, struct itimerspec*); -int __timer_getoverrun (timer_t); -int __timer_delete (timer_t); -int utimes (const char*, const struct timeval tvp[2]); -int utimensat (int, const char *, const struct timespec times[2], int); -int sigaction (int, const struct sigaction *, struct sigaction *); -int sigprocmask (int, const sigset_t *, sigset_t *); -int __sigsuspend (int unused1, int unused2, unsigned mask); -int __rt_sigaction (int sig, const struct sigaction *act, struct sigaction *oact, size_t sigsetsize); -int __rt_sigprocmask (int how, const sigset_t *set, sigset_t *oset, size_t sigsetsize); -int __rt_sigtimedwait (const sigset_t *set, struct siginfo_t *info, struct timespec_t *timeout, size_t sigset_size); -int sigpending (sigset_t *); -int socket (int, int, int); -int socketpair (int, int, int, int*); -int bind (int, struct sockaddr *, int); -int connect (int, struct sockaddr *, socklen_t); -int listen (int, int); -int accept (int, struct sockaddr *, socklen_t *); -int getsockname (int, struct sockaddr *, socklen_t *); -int getpeername (int, struct sockaddr *, socklen_t *); -int sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t); -int recvfrom (int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *); -int shutdown (int, int); -int setsockopt (int, int, int, const void *, socklen_t); -int getsockopt (int, int, int, void *, socklen_t *); -int sendmsg (int, const struct msghdr *, unsigned int); -int recvmsg (int, struct msghdr *, unsigned int); -int socket (int, int, int); -int bind (int, struct sockaddr *, int); -int connect (int, struct sockaddr *, socklen_t); -int listen (int, int); -int accept (int, struct sockaddr *, socklen_t *); -int getsockname (int, struct sockaddr *, socklen_t *); -int getpeername (int, struct sockaddr *, socklen_t *); -int socketpair (int, int, int, int*); -int sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t); -int recvfrom (int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *); -int shutdown (int, int); -int setsockopt (int, int, int, const void *, socklen_t); -int getsockopt (int, int, int, void *, socklen_t *); -int sendmsg (int, const struct msghdr *, unsigned int); -int recvmsg (int, struct msghdr *, unsigned int); -int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); -int sched_getscheduler (pid_t pid); -int sched_yield (void); -int sched_setparam (pid_t pid, const struct sched_param *param); -int sched_getparam (pid_t pid, struct sched_param *param); -int sched_get_priority_max (int policy); -int sched_get_priority_min (int policy); -int sched_rr_get_interval (pid_t pid, struct timespec *interval); -int sched_setaffinity (pid_t pid, size_t setsize, const cpu_set_t* set); -int __sched_getaffinity (pid_t pid, size_t setsize, cpu_set_t* set); -int __getcpu (unsigned *cpu, unsigned *node, void *unused); -int ioprio_set (int which, int who, int ioprio); -int ioprio_get (int which, int who); -int uname (struct utsname *); -pid_t __wait4 (pid_t pid, int *status, int options, struct rusage *rusage); -mode_t umask (mode_t); -int __reboot (int, int, int, void *); -int __syslog (int, char *, int); -int init_module (void *, unsigned long, const char *); -int delete_module (const char*, unsigned int); -int klogctl (int, char *, int); -int sysinfo (struct sysinfo *); -int personality (unsigned long); -int futex (void *, int, int, void *, void *, int); -int epoll_create (int size); -int epoll_ctl (int epfd, int op, int fd, struct epoll_event *event); -int epoll_wait (int epfd, struct epoll_event *events, int max, int timeout); -int inotify_init (void); -int inotify_add_watch (int, const char *, unsigned int); -int inotify_rm_watch (int, unsigned int); -int poll (struct pollfd *, unsigned int, long); -int eventfd (unsigned int, int); -int __set_tls (void*); -int cacheflush (long start, long end, long flags); -int _flush_cache (char *addr, const int nbytes, const int op); -int syscall (int number,...); -#ifdef __cplusplus -} -#endif - -#endif /* _BIONIC_LINUX_UNISTD_H_ */ diff --git a/libc/include/sys/personality.h b/libc/include/sys/personality.h index 2199fa7..7772550 100644 --- a/libc/include/sys/personality.h +++ b/libc/include/sys/personality.h @@ -29,55 +29,9 @@ #ifndef _SYS_PERSONALITY_H_ #define _SYS_PERSONALITY_H_ -__BEGIN_DECLS - -/* constants taken from linux-3.0.4/include/linux/personality.h */ - -enum { - UNAME26 = 0x0020000, - ADDR_NO_RANDOMIZE = 0x0040000, - FDPIC_FUNCPTRS = 0x0080000, - MMAP_PAGE_ZERO = 0x0100000, - ADDR_COMPAT_LAYOUT = 0x0200000, - READ_IMPLIES_EXEC = 0x0400000, - ADDR_LIMIT_32BIT = 0x0800000, - SHORT_INODE = 0x1000000, - WHOLE_SECONDS = 0x2000000, - STICKY_TIMEOUTS = 0x4000000, - ADDR_LIMIT_3GB = 0x8000000, -}; +#include <linux/personality.h> -#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC | \ - ADDR_NO_RANDOMIZE | \ - ADDR_COMPAT_LAYOUT | \ - MMAP_PAGE_ZERO) - -enum { - PER_LINUX = 0x0000, - PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT, - PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS, - PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, - PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE, - PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS | - WHOLE_SECONDS | SHORT_INODE, - PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS, - PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE, - PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS, - PER_BSD = 0x0006, - PER_SUNOS = 0x0006 | STICKY_TIMEOUTS, - PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE, - PER_LINUX32 = 0x0008, - PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB, - PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS, - PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS, - PER_IRIX64 = 0x000b | STICKY_TIMEOUTS, - PER_RISCOS = 0x000c, - PER_SOLARIS = 0x000d | STICKY_TIMEOUTS, - PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, - PER_OSF4 = 0x000f, - PER_HPUX = 0x0010, - PER_MASK = 0x00ff, -}; +__BEGIN_DECLS extern int personality (unsigned long persona); |
