From 8ecf2258274b6ef2630a503a314573d80517465a Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 21 Mar 2013 18:06:55 -0700 Subject: [PATCH] Provide glibc-compatible SYS_* aliases for the __NR_* constants. This helps us remove another external/strace bionic hack. Change-Id: I3e82c0d2fd27e479be98f096e05b666fd16f8eb3 --- libc/include/sys/glibc-syscalls.h | 235 ++++++++++++++++++++++++++++++ libc/include/sys/linux-syscalls.h | 2 +- libc/include/sys/syscall.h | 2 + libc/tools/gensyscalls.py | 41 ++++-- 4 files changed, 267 insertions(+), 13 deletions(-) create mode 100644 libc/include/sys/glibc-syscalls.h diff --git a/libc/include/sys/glibc-syscalls.h b/libc/include/sys/glibc-syscalls.h new file mode 100644 index 000000000..125d2413a --- /dev/null +++ b/libc/include/sys/glibc-syscalls.h @@ -0,0 +1,235 @@ +/* Auto-generated by gensyscalls.py; do not edit. */ +#ifndef _BIONIC_GLIBC_SYSCALLS_H_ +#define _BIONIC_GLIBC_SYSCALLS_H_ +#define SYS_ARM_cacheflush __NR_ARM_cacheflush +#define SYS_ARM_set_tls __NR_ARM_set_tls +#define SYS__llseek __NR__llseek +#define SYS__newselect __NR__newselect +#define SYS_accept __NR_accept +#define SYS_access __NR_access +#define SYS_acct __NR_acct +#define SYS_bind __NR_bind +#define SYS_brk __NR_brk +#define SYS_cacheflush __NR_cacheflush +#define SYS_capget __NR_capget +#define SYS_capset __NR_capset +#define SYS_chdir __NR_chdir +#define SYS_chmod __NR_chmod +#define SYS_chown __NR_chown +#define SYS_chown32 __NR_chown32 +#define SYS_chroot __NR_chroot +#define SYS_clock_getres __NR_clock_getres +#define SYS_clock_gettime __NR_clock_gettime +#define SYS_clock_nanosleep __NR_clock_nanosleep +#define SYS_clock_settime __NR_clock_settime +#define SYS_clone __NR_clone +#define SYS_close __NR_close +#define SYS_connect __NR_connect +#define SYS_creat __NR_creat +#define SYS_delete_module __NR_delete_module +#define SYS_dup __NR_dup +#define SYS_dup2 __NR_dup2 +#define SYS_epoll_create __NR_epoll_create +#define SYS_epoll_ctl __NR_epoll_ctl +#define SYS_epoll_wait __NR_epoll_wait +#define SYS_eventfd2 __NR_eventfd2 +#define SYS_execve __NR_execve +#define SYS_exit __NR_exit +#define SYS_exit_group __NR_exit_group +#define SYS_faccessat __NR_faccessat +#define SYS_fchdir __NR_fchdir +#define SYS_fchmod __NR_fchmod +#define SYS_fchmodat __NR_fchmodat +#define SYS_fchown __NR_fchown +#define SYS_fchown32 __NR_fchown32 +#define SYS_fchownat __NR_fchownat +#define SYS_fcntl __NR_fcntl +#define SYS_fcntl64 __NR_fcntl64 +#define SYS_fdatasync __NR_fdatasync +#define SYS_fgetxattr __NR_fgetxattr +#define SYS_flistxattr __NR_flistxattr +#define SYS_flock __NR_flock +#define SYS_fork __NR_fork +#define SYS_fremovexattr __NR_fremovexattr +#define SYS_fsetxattr __NR_fsetxattr +#define SYS_fstat64 __NR_fstat64 +#define SYS_fstatat64 __NR_fstatat64 +#define SYS_fstatfs64 __NR_fstatfs64 +#define SYS_fsync __NR_fsync +#define SYS_ftruncate __NR_ftruncate +#define SYS_ftruncate64 __NR_ftruncate64 +#define SYS_futex __NR_futex +#define SYS_getcpu __NR_getcpu +#define SYS_getcwd __NR_getcwd +#define SYS_getdents64 __NR_getdents64 +#define SYS_getegid __NR_getegid +#define SYS_getegid32 __NR_getegid32 +#define SYS_geteuid __NR_geteuid +#define SYS_geteuid32 __NR_geteuid32 +#define SYS_getgid __NR_getgid +#define SYS_getgid32 __NR_getgid32 +#define SYS_getgroups __NR_getgroups +#define SYS_getgroups32 __NR_getgroups32 +#define SYS_getitimer __NR_getitimer +#define SYS_getpeername __NR_getpeername +#define SYS_getpgid __NR_getpgid +#define SYS_getpgrp __NR_getpgrp +#define SYS_getpid __NR_getpid +#define SYS_getppid __NR_getppid +#define SYS_getpriority __NR_getpriority +#define SYS_getresgid __NR_getresgid +#define SYS_getresgid32 __NR_getresgid32 +#define SYS_getresuid __NR_getresuid +#define SYS_getresuid32 __NR_getresuid32 +#define SYS_getrlimit __NR_getrlimit +#define SYS_getrusage __NR_getrusage +#define SYS_getsid __NR_getsid +#define SYS_getsockname __NR_getsockname +#define SYS_getsockopt __NR_getsockopt +#define SYS_gettid __NR_gettid +#define SYS_gettimeofday __NR_gettimeofday +#define SYS_getuid __NR_getuid +#define SYS_getuid32 __NR_getuid32 +#define SYS_getxattr __NR_getxattr +#define SYS_init_module __NR_init_module +#define SYS_inotify_add_watch __NR_inotify_add_watch +#define SYS_inotify_init __NR_inotify_init +#define SYS_inotify_rm_watch __NR_inotify_rm_watch +#define SYS_ioctl __NR_ioctl +#define SYS_ioprio_get __NR_ioprio_get +#define SYS_ioprio_set __NR_ioprio_set +#define SYS_kill __NR_kill +#define SYS_lchown __NR_lchown +#define SYS_lchown32 __NR_lchown32 +#define SYS_lgetxattr __NR_lgetxattr +#define SYS_link __NR_link +#define SYS_listen __NR_listen +#define SYS_listxattr __NR_listxattr +#define SYS_llistxattr __NR_llistxattr +#define SYS_lremovexattr __NR_lremovexattr +#define SYS_lseek __NR_lseek +#define SYS_lsetxattr __NR_lsetxattr +#define SYS_lstat64 __NR_lstat64 +#define SYS_madvise __NR_madvise +#define SYS_mincore __NR_mincore +#define SYS_mkdir __NR_mkdir +#define SYS_mkdirat __NR_mkdirat +#define SYS_mknod __NR_mknod +#define SYS_mlock __NR_mlock +#define SYS_mlockall __NR_mlockall +#define SYS_mmap __NR_mmap +#define SYS_mmap2 __NR_mmap2 +#define SYS_mount __NR_mount +#define SYS_mprotect __NR_mprotect +#define SYS_mremap __NR_mremap +#define SYS_msync __NR_msync +#define SYS_munlock __NR_munlock +#define SYS_munlockall __NR_munlockall +#define SYS_munmap __NR_munmap +#define SYS_nanosleep __NR_nanosleep +#define SYS_open __NR_open +#define SYS_openat __NR_openat +#define SYS_pause __NR_pause +#define SYS_perf_event_open __NR_perf_event_open +#define SYS_personality __NR_personality +#define SYS_pipe __NR_pipe +#define SYS_pipe2 __NR_pipe2 +#define SYS_poll __NR_poll +#define SYS_prctl __NR_prctl +#define SYS_pread64 __NR_pread64 +#define SYS_ptrace __NR_ptrace +#define SYS_pwrite64 __NR_pwrite64 +#define SYS_read __NR_read +#define SYS_readahead __NR_readahead +#define SYS_readlink __NR_readlink +#define SYS_readv __NR_readv +#define SYS_reboot __NR_reboot +#define SYS_recvfrom __NR_recvfrom +#define SYS_recvmsg __NR_recvmsg +#define SYS_removexattr __NR_removexattr +#define SYS_rename __NR_rename +#define SYS_renameat __NR_renameat +#define SYS_rmdir __NR_rmdir +#define SYS_rt_sigaction __NR_rt_sigaction +#define SYS_rt_sigprocmask __NR_rt_sigprocmask +#define SYS_rt_sigtimedwait __NR_rt_sigtimedwait +#define SYS_sched_get_priority_max __NR_sched_get_priority_max +#define SYS_sched_get_priority_min __NR_sched_get_priority_min +#define SYS_sched_getaffinity __NR_sched_getaffinity +#define SYS_sched_getparam __NR_sched_getparam +#define SYS_sched_getscheduler __NR_sched_getscheduler +#define SYS_sched_rr_get_interval __NR_sched_rr_get_interval +#define SYS_sched_setaffinity __NR_sched_setaffinity +#define SYS_sched_setparam __NR_sched_setparam +#define SYS_sched_setscheduler __NR_sched_setscheduler +#define SYS_sched_yield __NR_sched_yield +#define SYS_sendfile __NR_sendfile +#define SYS_sendmsg __NR_sendmsg +#define SYS_sendto __NR_sendto +#define SYS_set_thread_area __NR_set_thread_area +#define SYS_seteuid32 __NR_seteuid32 +#define SYS_setgid __NR_setgid +#define SYS_setgid32 __NR_setgid32 +#define SYS_setgroups __NR_setgroups +#define SYS_setgroups32 __NR_setgroups32 +#define SYS_setitimer __NR_setitimer +#define SYS_setpgid __NR_setpgid +#define SYS_setpriority __NR_setpriority +#define SYS_setregid __NR_setregid +#define SYS_setregid32 __NR_setregid32 +#define SYS_setresgid __NR_setresgid +#define SYS_setresgid32 __NR_setresgid32 +#define SYS_setresuid __NR_setresuid +#define SYS_setresuid32 __NR_setresuid32 +#define SYS_setreuid __NR_setreuid +#define SYS_setreuid32 __NR_setreuid32 +#define SYS_setrlimit __NR_setrlimit +#define SYS_setsid __NR_setsid +#define SYS_setsockopt __NR_setsockopt +#define SYS_settimeofday __NR_settimeofday +#define SYS_setuid __NR_setuid +#define SYS_setuid32 __NR_setuid32 +#define SYS_setxattr __NR_setxattr +#define SYS_shutdown __NR_shutdown +#define SYS_sigaction __NR_sigaction +#define SYS_sigaltstack __NR_sigaltstack +#define SYS_signalfd4 __NR_signalfd4 +#define SYS_sigpending __NR_sigpending +#define SYS_sigprocmask __NR_sigprocmask +#define SYS_sigsuspend __NR_sigsuspend +#define SYS_socket __NR_socket +#define SYS_socketcall __NR_socketcall +#define SYS_socketpair __NR_socketpair +#define SYS_stat64 __NR_stat64 +#define SYS_statfs64 __NR_statfs64 +#define SYS_symlink __NR_symlink +#define SYS_sync __NR_sync +#define SYS_syscall __NR_syscall +#define SYS_sysinfo __NR_sysinfo +#define SYS_syslog __NR_syslog +#define SYS_tgkill __NR_tgkill +#define SYS_timer_create __NR_timer_create +#define SYS_timer_delete __NR_timer_delete +#define SYS_timer_getoverrun __NR_timer_getoverrun +#define SYS_timer_gettime __NR_timer_gettime +#define SYS_timer_settime __NR_timer_settime +#define SYS_times __NR_times +#define SYS_tkill __NR_tkill +#define SYS_truncate __NR_truncate +#define SYS_ugetrlimit __NR_ugetrlimit +#define SYS_umask __NR_umask +#define SYS_umount __NR_umount +#define SYS_umount2 __NR_umount2 +#define SYS_uname __NR_uname +#define SYS_unlink __NR_unlink +#define SYS_unlinkat __NR_unlinkat +#define SYS_unshare __NR_unshare +#define SYS_utimensat __NR_utimensat +#define SYS_utimes __NR_utimes +#define SYS_vfork __NR_vfork +#define SYS_wait4 __NR_wait4 +#define SYS_waitid __NR_waitid +#define SYS_waitpid __NR_waitpid +#define SYS_write __NR_write +#define SYS_writev __NR_writev +#endif diff --git a/libc/include/sys/linux-syscalls.h b/libc/include/sys/linux-syscalls.h index 738d9e8a3..2e6421f4a 100644 --- a/libc/include/sys/linux-syscalls.h +++ b/libc/include/sys/linux-syscalls.h @@ -1,4 +1,4 @@ -/* auto-generated by gensyscalls.py, do not touch */ +/* Auto-generated by gensyscalls.py; do not edit. */ #ifndef _BIONIC_LINUX_SYSCALLS_H_ #define _BIONIC_LINUX_SYSCALLS_H_ diff --git a/libc/include/sys/syscall.h b/libc/include/sys/syscall.h index 7055518b2..a44b2e5ba 100644 --- a/libc/include/sys/syscall.h +++ b/libc/include/sys/syscall.h @@ -33,6 +33,8 @@ #include #include +#include /* glibc-compatible SYS_* aliases for our __NR_* names. */ + __BEGIN_DECLS int syscall(int number, ...); diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py index 91e7a5783..389177e36 100755 --- a/libc/tools/gensyscalls.py +++ b/libc/tools/gensyscalls.py @@ -303,15 +303,31 @@ class State: t["asm-mips"] = self.mips_genstub(syscall_func,"__NR_"+syscall_name) - def gen_NR_syscall(self,fp,name,id): - fp.write( "#define __NR_%-25s (__NR_SYSCALL_BASE + %d)\n" % (name,id) ) + def gen_NR_syscall(self, fp, name, id): + fp.write("#define __NR_%-25s (__NR_SYSCALL_BASE + %d)\n" % (name,id)) + + + def gen_glibc_syscalls_h(self): + glibc_syscalls_h_path = "include/sys/glibc-syscalls.h" + all_syscall_names = set() + for sc in self.syscalls: + all_syscall_names.add(sc["name"]) + fp = create_file(glibc_syscalls_h_path) + fp.write("/* Auto-generated by gensyscalls.py; do not edit. */\n") + fp.write("#ifndef _BIONIC_GLIBC_SYSCALLS_H_\n") + fp.write("#define _BIONIC_GLIBC_SYSCALLS_H_\n") + for syscall_name in sorted(all_syscall_names): + fp.write("#define SYS_%-25s __NR_%s\n" % (syscall_name, syscall_name)) + fp.write("#endif\n") + fp.close() + self.other_files.append(glibc_syscalls_h_path) + - # now dump the content of linux-syscalls.h def gen_linux_syscalls_h(self): - path = "include/sys/linux-syscalls.h" - D( "generating "+path ) - fp = create_file( path ) - fp.write( "/* auto-generated by gensyscalls.py, do not touch */\n" ) + linux_syscalls_h_path = "include/sys/linux-syscalls.h" + D("generating " + linux_syscalls_h_path) + fp = create_file(linux_syscalls_h_path) + fp.write( "/* Auto-generated by gensyscalls.py; do not edit. */\n" ) fp.write( "#ifndef _BIONIC_LINUX_SYSCALLS_H_\n" ) fp.write( "#define _BIONIC_LINUX_SYSCALLS_H_\n\n" ) fp.write( "#if !defined __ASM_ARM_UNISTD_H && !defined __ASM_I386_UNISTD_H && !defined __ASM_MIPS_UNISTD_H\n" ) @@ -328,7 +344,7 @@ class State: sc_id = sc["common"] sc_name = sc["name"] if sc_id >= 0: - self.gen_NR_syscall( fp, sc_name, sc_id ) + self.gen_NR_syscall(fp, sc_name, sc_id) # now, all arm-specific syscalls fp.write( "\n#ifdef __arm__\n" ); @@ -336,7 +352,7 @@ class State: sc_id = sc["armid"] sc_name = sc["name"] if sc_id >= 0: - self.gen_NR_syscall( fp, sc_name, sc_id ) + self.gen_NR_syscall(fp, sc_name, sc_id) fp.write( "#endif\n" ); gen_syscalls = {} @@ -346,7 +362,7 @@ class State: sc_id = sc["x86id"] sc_name = sc["name"] if sc_id >= 0 and sc_name not in gen_syscalls: - self.gen_NR_syscall( fp, sc_name, sc_id ) + self.gen_NR_syscall(fp, sc_name, sc_id) gen_syscalls[sc_name] = True fp.write( "#endif\n" ); @@ -355,13 +371,13 @@ class State: for sc in sorted(self.syscalls,key=lambda x:x["mipsid"]): sc_id = sc["mipsid"] if sc_id >= 0: - self.gen_NR_syscall( fp, sc["name"], sc_id ) + self.gen_NR_syscall(fp, sc["name"], sc_id) fp.write( "#endif\n" ); fp.write( "\n#endif\n" ) fp.write( "\n#endif /* _BIONIC_LINUX_SYSCALLS_H_ */\n" ); fp.close() - self.other_files.append( path ) + self.other_files.append(linux_syscalls_h_path) # now dump the contents of syscalls.mk @@ -432,6 +448,7 @@ class State: D( "re-generating stubs and support files" ) + self.gen_glibc_syscalls_h() self.gen_linux_syscalls_h() for arch in all_archs: self.gen_arch_syscalls_mk(arch)