diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2010-05-28 23:01:00 -0400 |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2010-06-04 17:02:25 -0400 |
commit | 5360bd776f73d0a7da571d72a09a03f237e99900 (patch) | |
tree | 618ff2afce9eba2e744410c9af7f59d2d69a69cd | |
parent | b8a3c6091a2337391ed878693604d712d6420241 (diff) |
Fix up the "generic" unistd.h ABI to be more useful.
Reserve 16 "architecture-specific" syscall numbers starting at 244.
Allow use of the sys_sync_file_range2() API with the generic unistd.h
by specifying __ARCH_WANT_SYNC_FILE_RANGE2 before including it.
Allow using the generic unistd.h to create the "compat" syscall table
by specifying __SYSCALL_COMPAT before including it.
Use sys_fadvise64_64 for __NR3264_fadvise64 in both 32- and 64-bit mode.
Request the appropriate __ARCH_WANT_COMPAT_SYS_xxx values when
some deprecated syscall modes are selected.
As part of this change to fix up the syscalls, also provide a couple
of missing signal-related syscall prototypes in <linux/syscalls.h>.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r-- | include/asm-generic/unistd.h | 26 | ||||
-rw-r--r-- | include/linux/syscalls.h | 4 |
2 files changed, 24 insertions, 6 deletions
diff --git a/include/asm-generic/unistd.h b/include/asm-generic/unistd.h index 6a0b30f78a62..30218b4fa4e0 100644 --- a/include/asm-generic/unistd.h +++ b/include/asm-generic/unistd.h | |||
@@ -18,7 +18,7 @@ | |||
18 | #define __SYSCALL(x, y) | 18 | #define __SYSCALL(x, y) |
19 | #endif | 19 | #endif |
20 | 20 | ||
21 | #if __BITS_PER_LONG == 32 | 21 | #if __BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT) |
22 | #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32) | 22 | #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32) |
23 | #else | 23 | #else |
24 | #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) | 24 | #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) |
@@ -241,8 +241,13 @@ __SYSCALL(__NR_sync, sys_sync) | |||
241 | __SYSCALL(__NR_fsync, sys_fsync) | 241 | __SYSCALL(__NR_fsync, sys_fsync) |
242 | #define __NR_fdatasync 83 | 242 | #define __NR_fdatasync 83 |
243 | __SYSCALL(__NR_fdatasync, sys_fdatasync) | 243 | __SYSCALL(__NR_fdatasync, sys_fdatasync) |
244 | #ifdef __ARCH_WANT_SYNC_FILE_RANGE2 | ||
245 | #define __NR_sync_file_range2 84 | ||
246 | __SYSCALL(__NR_sync_file_range2, sys_sync_file_range2) | ||
247 | #else | ||
244 | #define __NR_sync_file_range 84 | 248 | #define __NR_sync_file_range 84 |
245 | __SYSCALL(__NR_sync_file_range, sys_sync_file_range) /* .long sys_sync_file_range2, */ | 249 | __SYSCALL(__NR_sync_file_range, sys_sync_file_range) |
250 | #endif | ||
246 | 251 | ||
247 | /* fs/timerfd.c */ | 252 | /* fs/timerfd.c */ |
248 | #define __NR_timerfd_create 85 | 253 | #define __NR_timerfd_create 85 |
@@ -580,7 +585,7 @@ __SYSCALL(__NR_execve, sys_execve) /* .long sys_execve_wrapper */ | |||
580 | __SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap) | 585 | __SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap) |
581 | /* mm/fadvise.c */ | 586 | /* mm/fadvise.c */ |
582 | #define __NR3264_fadvise64 223 | 587 | #define __NR3264_fadvise64 223 |
583 | __SC_3264(__NR3264_fadvise64, sys_fadvise64_64, sys_fadvise64) | 588 | __SYSCALL(__NR3264_fadvise64, sys_fadvise64_64) |
584 | 589 | ||
585 | /* mm/, CONFIG_MMU only */ | 590 | /* mm/, CONFIG_MMU only */ |
586 | #ifndef __ARCH_NOMMU | 591 | #ifndef __ARCH_NOMMU |
@@ -627,8 +632,14 @@ __SYSCALL(__NR_accept4, sys_accept4) | |||
627 | #define __NR_recvmmsg 243 | 632 | #define __NR_recvmmsg 243 |
628 | __SYSCALL(__NR_recvmmsg, sys_recvmmsg) | 633 | __SYSCALL(__NR_recvmmsg, sys_recvmmsg) |
629 | 634 | ||
635 | /* | ||
636 | * Architectures may provide up to 16 syscalls of their own | ||
637 | * starting with this value. | ||
638 | */ | ||
639 | #define __NR_arch_specific_syscall 244 | ||
640 | |||
630 | #undef __NR_syscalls | 641 | #undef __NR_syscalls |
631 | #define __NR_syscalls 244 | 642 | #define __NR_syscalls 260 |
632 | 643 | ||
633 | /* | 644 | /* |
634 | * All syscalls below here should go away really, | 645 | * All syscalls below here should go away really, |
@@ -694,7 +705,8 @@ __SYSCALL(__NR_signalfd, sys_signalfd) | |||
694 | #define __NR_syscalls (__NR_signalfd+1) | 705 | #define __NR_syscalls (__NR_signalfd+1) |
695 | #endif /* __ARCH_WANT_SYSCALL_NO_FLAGS */ | 706 | #endif /* __ARCH_WANT_SYSCALL_NO_FLAGS */ |
696 | 707 | ||
697 | #if __BITS_PER_LONG == 32 && defined(__ARCH_WANT_SYSCALL_OFF_T) | 708 | #if (__BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)) && \ |
709 | defined(__ARCH_WANT_SYSCALL_OFF_T) | ||
698 | #define __NR_sendfile 1046 | 710 | #define __NR_sendfile 1046 |
699 | __SYSCALL(__NR_sendfile, sys_sendfile) | 711 | __SYSCALL(__NR_sendfile, sys_sendfile) |
700 | #define __NR_ftruncate 1047 | 712 | #define __NR_ftruncate 1047 |
@@ -740,6 +752,7 @@ __SYSCALL(__NR_getpgrp, sys_getpgrp) | |||
740 | __SYSCALL(__NR_pause, sys_pause) | 752 | __SYSCALL(__NR_pause, sys_pause) |
741 | #define __NR_time 1062 | 753 | #define __NR_time 1062 |
742 | #define __ARCH_WANT_SYS_TIME | 754 | #define __ARCH_WANT_SYS_TIME |
755 | #define __ARCH_WANT_COMPAT_SYS_TIME | ||
743 | __SYSCALL(__NR_time, sys_time) | 756 | __SYSCALL(__NR_time, sys_time) |
744 | #define __NR_utime 1063 | 757 | #define __NR_utime 1063 |
745 | #define __ARCH_WANT_SYS_UTIME | 758 | #define __ARCH_WANT_SYS_UTIME |
@@ -801,7 +814,7 @@ __SYSCALL(__NR_fork, sys_ni_syscall) | |||
801 | * Here we map the numbers so that both versions | 814 | * Here we map the numbers so that both versions |
802 | * use the same syscall table layout. | 815 | * use the same syscall table layout. |
803 | */ | 816 | */ |
804 | #if __BITS_PER_LONG == 64 | 817 | #if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT) |
805 | #define __NR_fcntl __NR3264_fcntl | 818 | #define __NR_fcntl __NR3264_fcntl |
806 | #define __NR_statfs __NR3264_statfs | 819 | #define __NR_statfs __NR3264_statfs |
807 | #define __NR_fstatfs __NR3264_fstatfs | 820 | #define __NR_fstatfs __NR3264_fstatfs |
@@ -848,6 +861,7 @@ __SYSCALL(__NR_fork, sys_ni_syscall) | |||
848 | #endif | 861 | #endif |
849 | #define __ARCH_WANT_SYS_RT_SIGACTION | 862 | #define __ARCH_WANT_SYS_RT_SIGACTION |
850 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 863 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
864 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND | ||
851 | 865 | ||
852 | /* | 866 | /* |
853 | * "Conditional" syscalls | 867 | * "Conditional" syscalls |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index a1a86a53bc73..4a19d9bb8368 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -364,9 +364,13 @@ asmlinkage long sys_init_module(void __user *umod, unsigned long len, | |||
364 | asmlinkage long sys_delete_module(const char __user *name_user, | 364 | asmlinkage long sys_delete_module(const char __user *name_user, |
365 | unsigned int flags); | 365 | unsigned int flags); |
366 | 366 | ||
367 | asmlinkage long sys_rt_sigaction(int sig, const struct sigaction __user *act, | ||
368 | struct sigaction __user *oact, | ||
369 | size_t sigsetsize); | ||
367 | asmlinkage long sys_rt_sigprocmask(int how, sigset_t __user *set, | 370 | asmlinkage long sys_rt_sigprocmask(int how, sigset_t __user *set, |
368 | sigset_t __user *oset, size_t sigsetsize); | 371 | sigset_t __user *oset, size_t sigsetsize); |
369 | asmlinkage long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize); | 372 | asmlinkage long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize); |
373 | asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize); | ||
370 | asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese, | 374 | asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese, |
371 | siginfo_t __user *uinfo, | 375 | siginfo_t __user *uinfo, |
372 | const struct timespec __user *uts, | 376 | const struct timespec __user *uts, |