summaryrefslogtreecommitdiffstats
path: root/libc/include/sys
diff options
context:
space:
mode:
Diffstat (limited to 'libc/include/sys')
-rw-r--r--libc/include/sys/atomics.h46
-rw-r--r--libc/include/sys/cdefs.h2
-rw-r--r--libc/include/sys/exec_elf.h2
-rw-r--r--libc/include/sys/linux-syscalls.h6
-rw-r--r--libc/include/sys/linux-unistd.h250
-rw-r--r--libc/include/sys/personality.h50
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);