diff options
33 files changed, 1150 insertions, 802 deletions
diff --git a/Documentation/process/adding-syscalls.rst b/Documentation/process/adding-syscalls.rst index 314c8bf6f2a2..0d4f29bc798b 100644 --- a/Documentation/process/adding-syscalls.rst +++ b/Documentation/process/adding-syscalls.rst | |||
| @@ -360,7 +360,7 @@ First, the entry in ``arch/x86/entry/syscalls/syscall_32.tbl`` gets an extra | |||
| 360 | column to indicate that a 32-bit userspace program running on a 64-bit kernel | 360 | column to indicate that a 32-bit userspace program running on a 64-bit kernel |
| 361 | should hit the compat entry point:: | 361 | should hit the compat entry point:: |
| 362 | 362 | ||
| 363 | 380 i386 xyzzy sys_xyzzy compat_sys_xyzzy | 363 | 380 i386 xyzzy sys_xyzzy __ia32_compat_sys_xyzzy |
| 364 | 364 | ||
| 365 | Second, you need to figure out what should happen for the x32 ABI version of | 365 | Second, you need to figure out what should happen for the x32 ABI version of |
| 366 | the new system call. There's a choice here: the layout of the arguments | 366 | the new system call. There's a choice here: the layout of the arguments |
| @@ -373,7 +373,7 @@ the compatibility wrapper:: | |||
| 373 | 373 | ||
| 374 | 333 64 xyzzy sys_xyzzy | 374 | 333 64 xyzzy sys_xyzzy |
| 375 | ... | 375 | ... |
| 376 | 555 x32 xyzzy compat_sys_xyzzy | 376 | 555 x32 xyzzy __x32_compat_sys_xyzzy |
| 377 | 377 | ||
| 378 | If no pointers are involved, then it is preferable to re-use the 64-bit system | 378 | If no pointers are involved, then it is preferable to re-use the 64-bit system |
| 379 | call for the x32 ABI (and consequently the entry in | 379 | call for the x32 ABI (and consequently the entry in |
diff --git a/Documentation/x86/x86_64/mm.txt b/Documentation/x86/x86_64/mm.txt index ea91cb61a602..5432a96d31ff 100644 --- a/Documentation/x86/x86_64/mm.txt +++ b/Documentation/x86/x86_64/mm.txt | |||
| @@ -20,7 +20,7 @@ ffffff0000000000 - ffffff7fffffffff (=39 bits) %esp fixup stacks | |||
| 20 | ffffffef00000000 - fffffffeffffffff (=64 GB) EFI region mapping space | 20 | ffffffef00000000 - fffffffeffffffff (=64 GB) EFI region mapping space |
| 21 | ... unused hole ... | 21 | ... unused hole ... |
| 22 | ffffffff80000000 - ffffffff9fffffff (=512 MB) kernel text mapping, from phys 0 | 22 | ffffffff80000000 - ffffffff9fffffff (=512 MB) kernel text mapping, from phys 0 |
| 23 | ffffffffa0000000 - [fixmap start] (~1526 MB) module mapping space (variable) | 23 | ffffffffa0000000 - fffffffffeffffff (1520 MB) module mapping space |
| 24 | [fixmap start] - ffffffffff5fffff kernel-internal fixmap range | 24 | [fixmap start] - ffffffffff5fffff kernel-internal fixmap range |
| 25 | ffffffffff600000 - ffffffffff600fff (=4 kB) legacy vsyscall ABI | 25 | ffffffffff600000 - ffffffffff600fff (=4 kB) legacy vsyscall ABI |
| 26 | ffffffffffe00000 - ffffffffffffffff (=2 MB) unused hole | 26 | ffffffffffe00000 - ffffffffffffffff (=2 MB) unused hole |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 7fe107f5990b..00fcf81f2c56 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -29,6 +29,7 @@ config X86_64 | |||
| 29 | select HAVE_ARCH_SOFT_DIRTY | 29 | select HAVE_ARCH_SOFT_DIRTY |
| 30 | select MODULES_USE_ELF_RELA | 30 | select MODULES_USE_ELF_RELA |
| 31 | select X86_DEV_DMA_OPS | 31 | select X86_DEV_DMA_OPS |
| 32 | select ARCH_HAS_SYSCALL_WRAPPER | ||
| 32 | 33 | ||
| 33 | # | 34 | # |
| 34 | # Arch settings | 35 | # Arch settings |
| @@ -2763,11 +2764,9 @@ config OLPC_XO1_RTC | |||
| 2763 | 2764 | ||
| 2764 | config OLPC_XO1_SCI | 2765 | config OLPC_XO1_SCI |
| 2765 | bool "OLPC XO-1 SCI extras" | 2766 | bool "OLPC XO-1 SCI extras" |
| 2766 | depends on OLPC && OLPC_XO1_PM | 2767 | depends on OLPC && OLPC_XO1_PM && GPIO_CS5535=y |
| 2767 | depends on INPUT=y | 2768 | depends on INPUT=y |
| 2768 | select POWER_SUPPLY | 2769 | select POWER_SUPPLY |
| 2769 | select GPIO_CS5535 | ||
| 2770 | select MFD_CORE | ||
| 2771 | ---help--- | 2770 | ---help--- |
| 2772 | Add support for SCI-based features of the OLPC XO-1 laptop: | 2771 | Add support for SCI-based features of the OLPC XO-1 laptop: |
| 2773 | - EC-driven system wakeups | 2772 | - EC-driven system wakeups |
diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h index be63330c5511..352e70cd33e8 100644 --- a/arch/x86/entry/calling.h +++ b/arch/x86/entry/calling.h | |||
| @@ -114,7 +114,9 @@ For 32-bit we have the following conventions - kernel is built with | |||
| 114 | pushq %rsi /* pt_regs->si */ | 114 | pushq %rsi /* pt_regs->si */ |
| 115 | .endif | 115 | .endif |
| 116 | pushq \rdx /* pt_regs->dx */ | 116 | pushq \rdx /* pt_regs->dx */ |
| 117 | xorl %edx, %edx /* nospec dx */ | ||
| 117 | pushq %rcx /* pt_regs->cx */ | 118 | pushq %rcx /* pt_regs->cx */ |
| 119 | xorl %ecx, %ecx /* nospec cx */ | ||
| 118 | pushq \rax /* pt_regs->ax */ | 120 | pushq \rax /* pt_regs->ax */ |
| 119 | pushq %r8 /* pt_regs->r8 */ | 121 | pushq %r8 /* pt_regs->r8 */ |
| 120 | xorl %r8d, %r8d /* nospec r8 */ | 122 | xorl %r8d, %r8d /* nospec r8 */ |
diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index 74f6eee15179..fbf6a6c3fd2d 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c | |||
| @@ -266,14 +266,13 @@ __visible inline void syscall_return_slowpath(struct pt_regs *regs) | |||
| 266 | } | 266 | } |
| 267 | 267 | ||
| 268 | #ifdef CONFIG_X86_64 | 268 | #ifdef CONFIG_X86_64 |
| 269 | __visible void do_syscall_64(struct pt_regs *regs) | 269 | __visible void do_syscall_64(unsigned long nr, struct pt_regs *regs) |
| 270 | { | 270 | { |
| 271 | struct thread_info *ti = current_thread_info(); | 271 | struct thread_info *ti; |
| 272 | unsigned long nr = regs->orig_ax; | ||
| 273 | 272 | ||
| 274 | enter_from_user_mode(); | 273 | enter_from_user_mode(); |
| 275 | local_irq_enable(); | 274 | local_irq_enable(); |
| 276 | 275 | ti = current_thread_info(); | |
| 277 | if (READ_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY) | 276 | if (READ_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY) |
| 278 | nr = syscall_trace_enter(regs); | 277 | nr = syscall_trace_enter(regs); |
| 279 | 278 | ||
| @@ -282,11 +281,10 @@ __visible void do_syscall_64(struct pt_regs *regs) | |||
| 282 | * table. The only functional difference is the x32 bit in | 281 | * table. The only functional difference is the x32 bit in |
| 283 | * regs->orig_ax, which changes the behavior of some syscalls. | 282 | * regs->orig_ax, which changes the behavior of some syscalls. |
| 284 | */ | 283 | */ |
| 285 | if (likely((nr & __SYSCALL_MASK) < NR_syscalls)) { | 284 | nr &= __SYSCALL_MASK; |
| 286 | nr = array_index_nospec(nr & __SYSCALL_MASK, NR_syscalls); | 285 | if (likely(nr < NR_syscalls)) { |
| 287 | regs->ax = sys_call_table[nr]( | 286 | nr = array_index_nospec(nr, NR_syscalls); |
| 288 | regs->di, regs->si, regs->dx, | 287 | regs->ax = sys_call_table[nr](regs); |
| 289 | regs->r10, regs->r8, regs->r9); | ||
| 290 | } | 288 | } |
| 291 | 289 | ||
| 292 | syscall_return_slowpath(regs); | 290 | syscall_return_slowpath(regs); |
| @@ -321,6 +319,9 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs) | |||
| 321 | 319 | ||
| 322 | if (likely(nr < IA32_NR_syscalls)) { | 320 | if (likely(nr < IA32_NR_syscalls)) { |
| 323 | nr = array_index_nospec(nr, IA32_NR_syscalls); | 321 | nr = array_index_nospec(nr, IA32_NR_syscalls); |
| 322 | #ifdef CONFIG_IA32_EMULATION | ||
| 323 | regs->ax = ia32_sys_call_table[nr](regs); | ||
| 324 | #else | ||
| 324 | /* | 325 | /* |
| 325 | * It's possible that a 32-bit syscall implementation | 326 | * It's possible that a 32-bit syscall implementation |
| 326 | * takes a 64-bit parameter but nonetheless assumes that | 327 | * takes a 64-bit parameter but nonetheless assumes that |
| @@ -331,6 +332,7 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs) | |||
| 331 | (unsigned int)regs->bx, (unsigned int)regs->cx, | 332 | (unsigned int)regs->bx, (unsigned int)regs->cx, |
| 332 | (unsigned int)regs->dx, (unsigned int)regs->si, | 333 | (unsigned int)regs->dx, (unsigned int)regs->si, |
| 333 | (unsigned int)regs->di, (unsigned int)regs->bp); | 334 | (unsigned int)regs->di, (unsigned int)regs->bp); |
| 335 | #endif /* CONFIG_IA32_EMULATION */ | ||
| 334 | } | 336 | } |
| 335 | 337 | ||
| 336 | syscall_return_slowpath(regs); | 338 | syscall_return_slowpath(regs); |
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index a0c1353a2266..3166b9674429 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S | |||
| @@ -233,7 +233,8 @@ GLOBAL(entry_SYSCALL_64_after_hwframe) | |||
| 233 | TRACE_IRQS_OFF | 233 | TRACE_IRQS_OFF |
| 234 | 234 | ||
| 235 | /* IRQs are off. */ | 235 | /* IRQs are off. */ |
| 236 | movq %rsp, %rdi | 236 | movq %rax, %rdi |
| 237 | movq %rsp, %rsi | ||
| 237 | call do_syscall_64 /* returns with IRQs disabled */ | 238 | call do_syscall_64 /* returns with IRQs disabled */ |
| 238 | 239 | ||
| 239 | TRACE_IRQS_IRETQ /* we're about to change IF */ | 240 | TRACE_IRQS_IRETQ /* we're about to change IF */ |
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S index 08425c42f8b7..9af927e59d49 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S | |||
| @@ -220,8 +220,11 @@ GLOBAL(entry_SYSCALL_compat_after_hwframe) | |||
| 220 | pushq %rax /* pt_regs->orig_ax */ | 220 | pushq %rax /* pt_regs->orig_ax */ |
| 221 | pushq %rdi /* pt_regs->di */ | 221 | pushq %rdi /* pt_regs->di */ |
| 222 | pushq %rsi /* pt_regs->si */ | 222 | pushq %rsi /* pt_regs->si */ |
| 223 | xorl %esi, %esi /* nospec si */ | ||
| 223 | pushq %rdx /* pt_regs->dx */ | 224 | pushq %rdx /* pt_regs->dx */ |
| 225 | xorl %edx, %edx /* nospec dx */ | ||
| 224 | pushq %rbp /* pt_regs->cx (stashed in bp) */ | 226 | pushq %rbp /* pt_regs->cx (stashed in bp) */ |
| 227 | xorl %ecx, %ecx /* nospec cx */ | ||
| 225 | pushq $-ENOSYS /* pt_regs->ax */ | 228 | pushq $-ENOSYS /* pt_regs->ax */ |
| 226 | pushq $0 /* pt_regs->r8 = 0 */ | 229 | pushq $0 /* pt_regs->r8 = 0 */ |
| 227 | xorl %r8d, %r8d /* nospec r8 */ | 230 | xorl %r8d, %r8d /* nospec r8 */ |
| @@ -365,8 +368,11 @@ ENTRY(entry_INT80_compat) | |||
| 365 | 368 | ||
| 366 | pushq (%rdi) /* pt_regs->di */ | 369 | pushq (%rdi) /* pt_regs->di */ |
| 367 | pushq %rsi /* pt_regs->si */ | 370 | pushq %rsi /* pt_regs->si */ |
| 371 | xorl %esi, %esi /* nospec si */ | ||
| 368 | pushq %rdx /* pt_regs->dx */ | 372 | pushq %rdx /* pt_regs->dx */ |
| 373 | xorl %edx, %edx /* nospec dx */ | ||
| 369 | pushq %rcx /* pt_regs->cx */ | 374 | pushq %rcx /* pt_regs->cx */ |
| 375 | xorl %ecx, %ecx /* nospec cx */ | ||
| 370 | pushq $-ENOSYS /* pt_regs->ax */ | 376 | pushq $-ENOSYS /* pt_regs->ax */ |
| 371 | pushq $0 /* pt_regs->r8 = 0 */ | 377 | pushq $0 /* pt_regs->r8 = 0 */ |
| 372 | xorl %r8d, %r8d /* nospec r8 */ | 378 | xorl %r8d, %r8d /* nospec r8 */ |
diff --git a/arch/x86/entry/syscall_32.c b/arch/x86/entry/syscall_32.c index 95c294963612..aa3336a7cb15 100644 --- a/arch/x86/entry/syscall_32.c +++ b/arch/x86/entry/syscall_32.c | |||
| @@ -7,14 +7,23 @@ | |||
| 7 | #include <asm/asm-offsets.h> | 7 | #include <asm/asm-offsets.h> |
| 8 | #include <asm/syscall.h> | 8 | #include <asm/syscall.h> |
| 9 | 9 | ||
| 10 | #define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) ; | 10 | #ifdef CONFIG_IA32_EMULATION |
| 11 | /* On X86_64, we use struct pt_regs * to pass parameters to syscalls */ | ||
| 12 | #define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(const struct pt_regs *); | ||
| 13 | |||
| 14 | /* this is a lie, but it does not hurt as sys_ni_syscall just returns -EINVAL */ | ||
| 15 | extern asmlinkage long sys_ni_syscall(const struct pt_regs *); | ||
| 16 | |||
| 17 | #else /* CONFIG_IA32_EMULATION */ | ||
| 18 | #define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); | ||
| 19 | extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); | ||
| 20 | #endif /* CONFIG_IA32_EMULATION */ | ||
| 21 | |||
| 11 | #include <asm/syscalls_32.h> | 22 | #include <asm/syscalls_32.h> |
| 12 | #undef __SYSCALL_I386 | 23 | #undef __SYSCALL_I386 |
| 13 | 24 | ||
| 14 | #define __SYSCALL_I386(nr, sym, qual) [nr] = sym, | 25 | #define __SYSCALL_I386(nr, sym, qual) [nr] = sym, |
| 15 | 26 | ||
| 16 | extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); | ||
| 17 | |||
| 18 | __visible const sys_call_ptr_t ia32_sys_call_table[__NR_syscall_compat_max+1] = { | 27 | __visible const sys_call_ptr_t ia32_sys_call_table[__NR_syscall_compat_max+1] = { |
| 19 | /* | 28 | /* |
| 20 | * Smells like a compiler bug -- it doesn't work | 29 | * Smells like a compiler bug -- it doesn't work |
diff --git a/arch/x86/entry/syscall_64.c b/arch/x86/entry/syscall_64.c index c176d2fab1da..d5252bc1e380 100644 --- a/arch/x86/entry/syscall_64.c +++ b/arch/x86/entry/syscall_64.c | |||
| @@ -7,14 +7,14 @@ | |||
| 7 | #include <asm/asm-offsets.h> | 7 | #include <asm/asm-offsets.h> |
| 8 | #include <asm/syscall.h> | 8 | #include <asm/syscall.h> |
| 9 | 9 | ||
| 10 | #define __SYSCALL_64(nr, sym, qual) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); | 10 | /* this is a lie, but it does not hurt as sys_ni_syscall just returns -EINVAL */ |
| 11 | extern asmlinkage long sys_ni_syscall(const struct pt_regs *); | ||
| 12 | #define __SYSCALL_64(nr, sym, qual) extern asmlinkage long sym(const struct pt_regs *); | ||
| 11 | #include <asm/syscalls_64.h> | 13 | #include <asm/syscalls_64.h> |
| 12 | #undef __SYSCALL_64 | 14 | #undef __SYSCALL_64 |
| 13 | 15 | ||
| 14 | #define __SYSCALL_64(nr, sym, qual) [nr] = sym, | 16 | #define __SYSCALL_64(nr, sym, qual) [nr] = sym, |
| 15 | 17 | ||
| 16 | extern long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); | ||
| 17 | |||
| 18 | asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = { | 18 | asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = { |
| 19 | /* | 19 | /* |
| 20 | * Smells like a compiler bug -- it doesn't work | 20 | * Smells like a compiler bug -- it doesn't work |
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl index c58f75b088c5..d6b27dab1b30 100644 --- a/arch/x86/entry/syscalls/syscall_32.tbl +++ b/arch/x86/entry/syscalls/syscall_32.tbl | |||
| @@ -4,390 +4,395 @@ | |||
| 4 | # The format is: | 4 | # The format is: |
| 5 | # <number> <abi> <name> <entry point> <compat entry point> | 5 | # <number> <abi> <name> <entry point> <compat entry point> |
| 6 | # | 6 | # |
| 7 | # The __ia32_sys and __ia32_compat_sys stubs are created on-the-fly for | ||
| 8 | # sys_*() system calls and compat_sys_*() compat system calls if | ||
| 9 | # IA32_EMULATION is defined, and expect struct pt_regs *regs as their only | ||
| 10 | # parameter. | ||
| 11 | # | ||
| 7 | # The abi is always "i386" for this file. | 12 | # The abi is always "i386" for this file. |
| 8 | # | 13 | # |
| 9 | 0 i386 restart_syscall sys_restart_syscall | 14 | 0 i386 restart_syscall sys_restart_syscall __ia32_sys_restart_syscall |
| 10 | 1 i386 exit sys_exit | 15 | 1 i386 exit sys_exit __ia32_sys_exit |
| 11 | 2 i386 fork sys_fork | 16 | 2 i386 fork sys_fork __ia32_sys_fork |
| 12 | 3 i386 read sys_read | 17 | 3 i386 read sys_read __ia32_sys_read |
| 13 | 4 i386 write sys_write | 18 | 4 i386 write sys_write __ia32_sys_write |
| 14 | 5 i386 open sys_open compat_sys_open | 19 | 5 i386 open sys_open __ia32_compat_sys_open |
| 15 | 6 i386 close sys_close | 20 | 6 i386 close sys_close __ia32_sys_close |
| 16 | 7 i386 waitpid sys_waitpid | 21 | 7 i386 waitpid sys_waitpid __ia32_sys_waitpid |
| 17 | 8 i386 creat sys_creat | 22 | 8 i386 creat sys_creat __ia32_sys_creat |
| 18 | 9 i386 link sys_link | 23 | 9 i386 link sys_link __ia32_sys_link |
| 19 | 10 i386 unlink sys_unlink | 24 | 10 i386 unlink sys_unlink __ia32_sys_unlink |
| 20 | 11 i386 execve sys_execve compat_sys_execve | 25 | 11 i386 execve sys_execve __ia32_compat_sys_execve |
| 21 | 12 i386 chdir sys_chdir | 26 | 12 i386 chdir sys_chdir __ia32_sys_chdir |
| 22 | 13 i386 time sys_time compat_sys_time | 27 | 13 i386 time sys_time __ia32_compat_sys_time |
| 23 | 14 i386 mknod sys_mknod | 28 | 14 i386 mknod sys_mknod __ia32_sys_mknod |
| 24 | 15 i386 chmod sys_chmod | 29 | 15 i386 chmod sys_chmod __ia32_sys_chmod |
| 25 | 16 i386 lchown sys_lchown16 | 30 | 16 i386 lchown sys_lchown16 __ia32_sys_lchown16 |
| 26 | 17 i386 break | 31 | 17 i386 break |
| 27 | 18 i386 oldstat sys_stat | 32 | 18 i386 oldstat sys_stat __ia32_sys_stat |
| 28 | 19 i386 lseek sys_lseek compat_sys_lseek | 33 | 19 i386 lseek sys_lseek __ia32_compat_sys_lseek |
| 29 | 20 i386 getpid sys_getpid | 34 | 20 i386 getpid sys_getpid __ia32_sys_getpid |
| 30 | 21 i386 mount sys_mount compat_sys_mount | 35 | 21 i386 mount sys_mount __ia32_compat_sys_mount |
| 31 | 22 i386 umount sys_oldumount | 36 | 22 i386 umount sys_oldumount __ia32_sys_oldumount |
| 32 | 23 i386 setuid sys_setuid16 | 37 | 23 i386 setuid sys_setuid16 __ia32_sys_setuid16 |
| 33 | 24 i386 getuid sys_getuid16 | 38 | 24 i386 getuid sys_getuid16 __ia32_sys_getuid16 |
| 34 | 25 i386 stime sys_stime compat_sys_stime | 39 | 25 i386 stime sys_stime __ia32_compat_sys_stime |
| 35 | 26 i386 ptrace sys_ptrace compat_sys_ptrace | 40 | 26 i386 ptrace sys_ptrace __ia32_compat_sys_ptrace |
| 36 | 27 i386 alarm sys_alarm | 41 | 27 i386 alarm sys_alarm __ia32_sys_alarm |
| 37 | 28 i386 oldfstat sys_fstat | 42 | 28 i386 oldfstat sys_fstat __ia32_sys_fstat |
| 38 | 29 i386 pause sys_pause | 43 | 29 i386 pause sys_pause __ia32_sys_pause |
| 39 | 30 i386 utime sys_utime compat_sys_utime | 44 | 30 i386 utime sys_utime __ia32_compat_sys_utime |
| 40 | 31 i386 stty | 45 | 31 i386 stty |
| 41 | 32 i386 gtty | 46 | 32 i386 gtty |
| 42 | 33 i386 access sys_access | 47 | 33 i386 access sys_access __ia32_sys_access |
| 43 | 34 i386 nice sys_nice | 48 | 34 i386 nice sys_nice __ia32_sys_nice |
| 44 | 35 i386 ftime | 49 | 35 i386 ftime |
| 45 | 36 i386 sync sys_sync | 50 | 36 i386 sync sys_sync __ia32_sys_sync |
| 46 | 37 i386 kill sys_kill | 51 | 37 i386 kill sys_kill __ia32_sys_kill |
| 47 | 38 i386 rename sys_rename | 52 | 38 i386 rename sys_rename __ia32_sys_rename |
| 48 | 39 i386 mkdir sys_mkdir | 53 | 39 i386 mkdir sys_mkdir __ia32_sys_mkdir |
| 49 | 40 i386 rmdir sys_rmdir | 54 | 40 i386 rmdir sys_rmdir __ia32_sys_rmdir |
| 50 | 41 i386 dup sys_dup | 55 | 41 i386 dup sys_dup __ia32_sys_dup |
| 51 | 42 i386 pipe sys_pipe | 56 | 42 i386 pipe sys_pipe __ia32_sys_pipe |
| 52 | 43 i386 times sys_times compat_sys_times | 57 | 43 i386 times sys_times __ia32_compat_sys_times |
| 53 | 44 i386 prof | 58 | 44 i386 prof |
| 54 | 45 i386 brk sys_brk | 59 | 45 i386 brk sys_brk __ia32_sys_brk |
| 55 | 46 i386 setgid sys_setgid16 | 60 | 46 i386 setgid sys_setgid16 __ia32_sys_setgid16 |
| 56 | 47 i386 getgid sys_getgid16 | 61 | 47 i386 getgid sys_getgid16 __ia32_sys_getgid16 |
| 57 | 48 i386 signal sys_signal | 62 | 48 i386 signal sys_signal __ia32_sys_signal |
| 58 | 49 i386 geteuid sys_geteuid16 | 63 | 49 i386 geteuid sys_geteuid16 __ia32_sys_geteuid16 |
| 59 | 50 i386 getegid sys_getegid16 | 64 | 50 i386 getegid sys_getegid16 __ia32_sys_getegid16 |
| 60 | 51 i386 acct sys_acct | 65 | 51 i386 acct sys_acct __ia32_sys_acct |
| 61 | 52 i386 umount2 sys_umount | 66 | 52 i386 umount2 sys_umount __ia32_sys_umount |
| 62 | 53 i386 lock | 67 | 53 i386 lock |
| 63 | 54 i386 ioctl sys_ioctl compat_sys_ioctl | 68 | 54 i386 ioctl sys_ioctl __ia32_compat_sys_ioctl |
| 64 | 55 i386 fcntl sys_fcntl compat_sys_fcntl64 | 69 | 55 i386 fcntl sys_fcntl __ia32_compat_sys_fcntl64 |
| 65 | 56 i386 mpx | 70 | 56 i386 mpx |
| 66 | 57 i386 setpgid sys_setpgid | 71 | 57 i386 setpgid sys_setpgid __ia32_sys_setpgid |
| 67 | 58 i386 ulimit | 72 | 58 i386 ulimit |
| 68 | 59 i386 oldolduname sys_olduname | 73 | 59 i386 oldolduname sys_olduname __ia32_sys_olduname |
| 69 | 60 i386 umask sys_umask | 74 | 60 i386 umask sys_umask __ia32_sys_umask |
| 70 | 61 i386 chroot sys_chroot | 75 | 61 i386 chroot sys_chroot __ia32_sys_chroot |
| 71 | 62 i386 ustat sys_ustat compat_sys_ustat | 76 | 62 i386 ustat sys_ustat __ia32_compat_sys_ustat |
| 72 | 63 i386 dup2 sys_dup2 | 77 | 63 i386 dup2 sys_dup2 __ia32_sys_dup2 |
| 73 | 64 i386 getppid sys_getppid | 78 | 64 i386 getppid sys_getppid __ia32_sys_getppid |
| 74 | 65 i386 getpgrp sys_getpgrp | 79 | 65 i386 getpgrp sys_getpgrp __ia32_sys_getpgrp |
| 75 | 66 i386 setsid sys_setsid | 80 | 66 i386 setsid sys_setsid __ia32_sys_setsid |
| 76 | 67 i386 sigaction sys_sigaction compat_sys_sigaction | 81 | 67 i386 sigaction sys_sigaction __ia32_compat_sys_sigaction |
| 77 | 68 i386 sgetmask sys_sgetmask | 82 | 68 i386 sgetmask sys_sgetmask __ia32_sys_sgetmask |
| 78 | 69 i386 ssetmask sys_ssetmask | 83 | 69 i386 ssetmask sys_ssetmask __ia32_sys_ssetmask |
| 79 | 70 i386 setreuid sys_setreuid16 | 84 | 70 i386 setreuid sys_setreuid16 __ia32_sys_setreuid16 |
| 80 | 71 i386 setregid sys_setregid16 | 85 | 71 i386 setregid sys_setregid16 __ia32_sys_setregid16 |
| 81 | 72 i386 sigsuspend sys_sigsuspend | 86 | 72 i386 sigsuspend sys_sigsuspend __ia32_sys_sigsuspend |
| 82 | 73 i386 sigpending sys_sigpending compat_sys_sigpending | 87 | 73 i386 sigpending sys_sigpending __ia32_compat_sys_sigpending |
| 83 | 74 i386 sethostname sys_sethostname | 88 | 74 i386 sethostname sys_sethostname __ia32_sys_sethostname |
| 84 | 75 i386 setrlimit sys_setrlimit compat_sys_setrlimit | 89 | 75 i386 setrlimit sys_setrlimit __ia32_compat_sys_setrlimit |
| 85 | 76 i386 getrlimit sys_old_getrlimit compat_sys_old_getrlimit | 90 | 76 i386 getrlimit sys_old_getrlimit __ia32_compat_sys_old_getrlimit |
| 86 | 77 i386 getrusage sys_getrusage compat_sys_getrusage | 91 | 77 i386 getrusage sys_getrusage __ia32_compat_sys_getrusage |
| 87 | 78 i386 gettimeofday sys_gettimeofday compat_sys_gettimeofday | 92 | 78 i386 gettimeofday sys_gettimeofday __ia32_compat_sys_gettimeofday |
| 88 | 79 i386 settimeofday sys_settimeofday compat_sys_settimeofday | 93 | 79 i386 settimeofday sys_settimeofday __ia32_compat_sys_settimeofday |
| 89 | 80 i386 getgroups sys_getgroups16 | 94 | 80 i386 getgroups sys_getgroups16 __ia32_sys_getgroups16 |
| 90 | 81 i386 setgroups sys_setgroups16 | 95 | 81 i386 setgroups sys_setgroups16 __ia32_sys_setgroups16 |
| 91 | 82 i386 select sys_old_select compat_sys_old_select | 96 | 82 i386 select sys_old_select __ia32_compat_sys_old_select |
| 92 | 83 i386 symlink sys_symlink | 97 | 83 i386 symlink sys_symlink __ia32_sys_symlink |
| 93 | 84 i386 oldlstat sys_lstat | 98 | 84 i386 oldlstat sys_lstat __ia32_sys_lstat |
| 94 | 85 i386 readlink sys_readlink | 99 | 85 i386 readlink sys_readlink __ia32_sys_readlink |
| 95 | 86 i386 uselib sys_uselib | 100 | 86 i386 uselib sys_uselib __ia32_sys_uselib |
| 96 | 87 i386 swapon sys_swapon | 101 | 87 i386 swapon sys_swapon __ia32_sys_swapon |
| 97 | 88 i386 reboot sys_reboot | 102 | 88 i386 reboot sys_reboot __ia32_sys_reboot |
| 98 | 89 i386 readdir sys_old_readdir compat_sys_old_readdir | 103 | 89 i386 readdir sys_old_readdir __ia32_compat_sys_old_readdir |
| 99 | 90 i386 mmap sys_old_mmap compat_sys_x86_mmap | 104 | 90 i386 mmap sys_old_mmap __ia32_compat_sys_x86_mmap |
| 100 | 91 i386 munmap sys_munmap | 105 | 91 i386 munmap sys_munmap __ia32_sys_munmap |
| 101 | 92 i386 truncate sys_truncate compat_sys_truncate | 106 | 92 i386 truncate sys_truncate __ia32_compat_sys_truncate |
| 102 | 93 i386 ftruncate sys_ftruncate compat_sys_ftruncate | 107 | 93 i386 ftruncate sys_ftruncate __ia32_compat_sys_ftruncate |
| 103 | 94 i386 fchmod sys_fchmod | 108 | 94 i386 fchmod sys_fchmod __ia32_sys_fchmod |
| 104 | 95 i386 fchown sys_fchown16 | 109 | 95 i386 fchown sys_fchown16 __ia32_sys_fchown16 |
| 105 | 96 i386 getpriority sys_getpriority | 110 | 96 i386 getpriority sys_getpriority __ia32_sys_getpriority |
| 106 | 97 i386 setpriority sys_setpriority | 111 | 97 i386 setpriority sys_setpriority __ia32_sys_setpriority |
| 107 | 98 i386 profil | 112 | 98 i386 profil |
| 108 | 99 i386 statfs sys_statfs compat_sys_statfs | 113 | 99 i386 statfs sys_statfs __ia32_compat_sys_statfs |
| 109 | 100 i386 fstatfs sys_fstatfs compat_sys_fstatfs | 114 | 100 i386 fstatfs sys_fstatfs __ia32_compat_sys_fstatfs |
| 110 | 101 i386 ioperm sys_ioperm | 115 | 101 i386 ioperm sys_ioperm __ia32_sys_ioperm |
| 111 | 102 i386 socketcall sys_socketcall compat_sys_socketcall | 116 | 102 i386 socketcall sys_socketcall __ia32_compat_sys_socketcall |
| 112 | 103 i386 syslog sys_syslog | 117 | 103 i386 syslog sys_syslog __ia32_sys_syslog |
| 113 | 104 i386 setitimer sys_setitimer compat_sys_setitimer | 118 | 104 i386 setitimer sys_setitimer __ia32_compat_sys_setitimer |
| 114 | 105 i386 getitimer sys_getitimer compat_sys_getitimer | 119 | 105 i386 getitimer sys_getitimer __ia32_compat_sys_getitimer |
| 115 | 106 i386 stat sys_newstat compat_sys_newstat | 120 | 106 i386 stat sys_newstat __ia32_compat_sys_newstat |
| 116 | 107 i386 lstat sys_newlstat compat_sys_newlstat | 121 | 107 i386 lstat sys_newlstat __ia32_compat_sys_newlstat |
| 117 | 108 i386 fstat sys_newfstat compat_sys_newfstat | 122 | 108 i386 fstat sys_newfstat __ia32_compat_sys_newfstat |
| 118 | 109 i386 olduname sys_uname | 123 | 109 i386 olduname sys_uname __ia32_sys_uname |
| 119 | 110 i386 iopl sys_iopl | 124 | 110 i386 iopl sys_iopl __ia32_sys_iopl |
| 120 | 111 i386 vhangup sys_vhangup | 125 | 111 i386 vhangup sys_vhangup __ia32_sys_vhangup |
| 121 | 112 i386 idle | 126 | 112 i386 idle |
| 122 | 113 i386 vm86old sys_vm86old sys_ni_syscall | 127 | 113 i386 vm86old sys_vm86old sys_ni_syscall |
| 123 | 114 i386 wait4 sys_wait4 compat_sys_wait4 | 128 | 114 i386 wait4 sys_wait4 __ia32_compat_sys_wait4 |
| 124 | 115 i386 swapoff sys_swapoff | 129 | 115 i386 swapoff sys_swapoff __ia32_sys_swapoff |
| 125 | 116 i386 sysinfo sys_sysinfo compat_sys_sysinfo | 130 | 116 i386 sysinfo sys_sysinfo __ia32_compat_sys_sysinfo |
| 126 | 117 i386 ipc sys_ipc compat_sys_ipc | 131 | 117 i386 ipc sys_ipc __ia32_compat_sys_ipc |
| 127 | 118 i386 fsync sys_fsync | 132 | 118 i386 fsync sys_fsync __ia32_sys_fsync |
| 128 | 119 i386 sigreturn sys_sigreturn sys32_sigreturn | 133 | 119 i386 sigreturn sys_sigreturn sys32_sigreturn |
| 129 | 120 i386 clone sys_clone compat_sys_x86_clone | 134 | 120 i386 clone sys_clone __ia32_compat_sys_x86_clone |
| 130 | 121 i386 setdomainname sys_setdomainname | 135 | 121 i386 setdomainname sys_setdomainname __ia32_sys_setdomainname |
| 131 | 122 i386 uname sys_newuname | 136 | 122 i386 uname sys_newuname __ia32_sys_newuname |
| 132 | 123 i386 modify_ldt sys_modify_ldt | 137 | 123 i386 modify_ldt sys_modify_ldt __ia32_sys_modify_ldt |
| 133 | 124 i386 adjtimex sys_adjtimex compat_sys_adjtimex | 138 | 124 i386 adjtimex sys_adjtimex __ia32_compat_sys_adjtimex |
| 134 | 125 i386 mprotect sys_mprotect | 139 | 125 i386 mprotect sys_mprotect __ia32_sys_mprotect |
| 135 | 126 i386 sigprocmask sys_sigprocmask compat_sys_sigprocmask | 140 | 126 i386 sigprocmask sys_sigprocmask __ia32_compat_sys_sigprocmask |
| 136 | 127 i386 create_module | 141 | 127 i386 create_module |
| 137 | 128 i386 init_module sys_init_module | 142 | 128 i386 init_module sys_init_module __ia32_sys_init_module |
| 138 | 129 i386 delete_module sys_delete_module | 143 | 129 i386 delete_module sys_delete_module __ia32_sys_delete_module |
| 139 | 130 i386 get_kernel_syms | 144 | 130 i386 get_kernel_syms |
| 140 | 131 i386 quotactl sys_quotactl compat_sys_quotactl32 | 145 | 131 i386 quotactl sys_quotactl __ia32_compat_sys_quotactl32 |
| 141 | 132 i386 getpgid sys_getpgid | 146 | 132 i386 getpgid sys_getpgid __ia32_sys_getpgid |
| 142 | 133 i386 fchdir sys_fchdir | 147 | 133 i386 fchdir sys_fchdir __ia32_sys_fchdir |
| 143 | 134 i386 bdflush sys_bdflush | 148 | 134 i386 bdflush sys_bdflush __ia32_sys_bdflush |
| 144 | 135 i386 sysfs sys_sysfs | 149 | 135 i386 sysfs sys_sysfs __ia32_sys_sysfs |
| 145 | 136 i386 personality sys_personality | 150 | 136 i386 personality sys_personality __ia32_sys_personality |
| 146 | 137 i386 afs_syscall | 151 | 137 i386 afs_syscall |
| 147 | 138 i386 setfsuid sys_setfsuid16 | 152 | 138 i386 setfsuid sys_setfsuid16 __ia32_sys_setfsuid16 |
| 148 | 139 i386 setfsgid sys_setfsgid16 | 153 | 139 i386 setfsgid sys_setfsgid16 __ia32_sys_setfsgid16 |
| 149 | 140 i386 _llseek sys_llseek | 154 | 140 i386 _llseek sys_llseek __ia32_sys_llseek |
| 150 | 141 i386 getdents sys_getdents compat_sys_getdents | 155 | 141 i386 getdents sys_getdents __ia32_compat_sys_getdents |
| 151 | 142 i386 _newselect sys_select compat_sys_select | 156 | 142 i386 _newselect sys_select __ia32_compat_sys_select |
| 152 | 143 i386 flock sys_flock | 157 | 143 i386 flock sys_flock __ia32_sys_flock |
| 153 | 144 i386 msync sys_msync | 158 | 144 i386 msync sys_msync __ia32_sys_msync |
| 154 | 145 i386 readv sys_readv compat_sys_readv | 159 | 145 i386 readv sys_readv __ia32_compat_sys_readv |
| 155 | 146 i386 writev sys_writev compat_sys_writev | 160 | 146 i386 writev sys_writev __ia32_compat_sys_writev |
| 156 | 147 i386 getsid sys_getsid | 161 | 147 i386 getsid sys_getsid __ia32_sys_getsid |
| 157 | 148 i386 fdatasync sys_fdatasync | 162 | 148 i386 fdatasync sys_fdatasync __ia32_sys_fdatasync |
| 158 | 149 i386 _sysctl sys_sysctl compat_sys_sysctl | 163 | 149 i386 _sysctl sys_sysctl __ia32_compat_sys_sysctl |
| 159 | 150 i386 mlock sys_mlock | 164 | 150 i386 mlock sys_mlock __ia32_sys_mlock |
| 160 | 151 i386 munlock sys_munlock | 165 | 151 i386 munlock sys_munlock __ia32_sys_munlock |
| 161 | 152 i386 mlockall sys_mlockall | 166 | 152 i386 mlockall sys_mlockall __ia32_sys_mlockall |
| 162 | 153 i386 munlockall sys_munlockall | 167 | 153 i386 munlockall sys_munlockall __ia32_sys_munlockall |
| 163 | 154 i386 sched_setparam sys_sched_setparam | 168 | 154 i386 sched_setparam sys_sched_setparam __ia32_sys_sched_setparam |
| 164 | 155 i386 sched_getparam sys_sched_getparam | 169 | 155 i386 sched_getparam sys_sched_getparam __ia32_sys_sched_getparam |
| 165 | 156 i386 sched_setscheduler sys_sched_setscheduler | 170 | 156 i386 sched_setscheduler sys_sched_setscheduler __ia32_sys_sched_setscheduler |
| 166 | 157 i386 sched_getscheduler sys_sched_getscheduler | 171 | 157 i386 sched_getscheduler sys_sched_getscheduler __ia32_sys_sched_getscheduler |
| 167 | 158 i386 sched_yield sys_sched_yield | 172 | 158 i386 sched_yield sys_sched_yield __ia32_sys_sched_yield |
| 168 | 159 i386 sched_get_priority_max sys_sched_get_priority_max | 173 | 159 i386 sched_get_priority_max sys_sched_get_priority_max __ia32_sys_sched_get_priority_max |
| 169 | 160 i386 sched_get_priority_min sys_sched_get_priority_min | 174 | 160 i386 sched_get_priority_min sys_sched_get_priority_min __ia32_sys_sched_get_priority_min |
| 170 | 161 i386 sched_rr_get_interval sys_sched_rr_get_interval compat_sys_sched_rr_get_interval | 175 | 161 i386 sched_rr_get_interval sys_sched_rr_get_interval __ia32_compat_sys_sched_rr_get_interval |
| 171 | 162 i386 nanosleep sys_nanosleep compat_sys_nanosleep | 176 | 162 i386 nanosleep sys_nanosleep __ia32_compat_sys_nanosleep |
| 172 | 163 i386 mremap sys_mremap | 177 | 163 i386 mremap sys_mremap __ia32_sys_mremap |
| 173 | 164 i386 setresuid sys_setresuid16 | 178 | 164 i386 setresuid sys_setresuid16 __ia32_sys_setresuid16 |
| 174 | 165 i386 getresuid sys_getresuid16 | 179 | 165 i386 getresuid sys_getresuid16 __ia32_sys_getresuid16 |
| 175 | 166 i386 vm86 sys_vm86 sys_ni_syscall | 180 | 166 i386 vm86 sys_vm86 sys_ni_syscall |
| 176 | 167 i386 query_module | 181 | 167 i386 query_module |
| 177 | 168 i386 poll sys_poll | 182 | 168 i386 poll sys_poll __ia32_sys_poll |
| 178 | 169 i386 nfsservctl | 183 | 169 i386 nfsservctl |
| 179 | 170 i386 setresgid sys_setresgid16 | 184 | 170 i386 setresgid sys_setresgid16 __ia32_sys_setresgid16 |
| 180 | 171 i386 getresgid sys_getresgid16 | 185 | 171 i386 getresgid sys_getresgid16 __ia32_sys_getresgid16 |
| 181 | 172 i386 prctl sys_prctl | 186 | 172 i386 prctl sys_prctl __ia32_sys_prctl |
| 182 | 173 i386 rt_sigreturn sys_rt_sigreturn sys32_rt_sigreturn | 187 | 173 i386 rt_sigreturn sys_rt_sigreturn sys32_rt_sigreturn |
| 183 | 174 i386 rt_sigaction sys_rt_sigaction compat_sys_rt_sigaction | 188 | 174 i386 rt_sigaction sys_rt_sigaction __ia32_compat_sys_rt_sigaction |
| 184 | 175 i386 rt_sigprocmask sys_rt_sigprocmask | 189 | 175 i386 rt_sigprocmask sys_rt_sigprocmask __ia32_sys_rt_sigprocmask |
| 185 | 176 i386 rt_sigpending sys_rt_sigpending compat_sys_rt_sigpending | 190 | 176 i386 rt_sigpending sys_rt_sigpending __ia32_compat_sys_rt_sigpending |
| 186 | 177 i386 rt_sigtimedwait sys_rt_sigtimedwait compat_sys_rt_sigtimedwait | 191 | 177 i386 rt_sigtimedwait sys_rt_sigtimedwait __ia32_compat_sys_rt_sigtimedwait |
| 187 | 178 i386 rt_sigqueueinfo sys_rt_sigqueueinfo compat_sys_rt_sigqueueinfo | 192 | 178 i386 rt_sigqueueinfo sys_rt_sigqueueinfo __ia32_compat_sys_rt_sigqueueinfo |
| 188 | 179 i386 rt_sigsuspend sys_rt_sigsuspend | 193 | 179 i386 rt_sigsuspend sys_rt_sigsuspend __ia32_sys_rt_sigsuspend |
| 189 | 180 i386 pread64 sys_pread64 compat_sys_x86_pread | 194 | 180 i386 pread64 sys_pread64 __ia32_compat_sys_x86_pread |
| 190 | 181 i386 pwrite64 sys_pwrite64 compat_sys_x86_pwrite | 195 | 181 i386 pwrite64 sys_pwrite64 __ia32_compat_sys_x86_pwrite |
| 191 | 182 i386 chown sys_chown16 | 196 | 182 i386 chown sys_chown16 __ia32_sys_chown16 |
| 192 | 183 i386 getcwd sys_getcwd | 197 | 183 i386 getcwd sys_getcwd __ia32_sys_getcwd |
| 193 | 184 i386 capget sys_capget | 198 | 184 i386 capget sys_capget __ia32_sys_capget |
| 194 | 185 i386 capset sys_capset | 199 | 185 i386 capset sys_capset __ia32_sys_capset |
| 195 | 186 i386 sigaltstack sys_sigaltstack compat_sys_sigaltstack | 200 | 186 i386 sigaltstack sys_sigaltstack __ia32_compat_sys_sigaltstack |
| 196 | 187 i386 sendfile sys_sendfile compat_sys_sendfile | 201 | 187 i386 sendfile sys_sendfile __ia32_compat_sys_sendfile |
| 197 | 188 i386 getpmsg | 202 | 188 i386 getpmsg |
| 198 | 189 i386 putpmsg | 203 | 189 i386 putpmsg |
| 199 | 190 i386 vfork sys_vfork | 204 | 190 i386 vfork sys_vfork __ia32_sys_vfork |
| 200 | 191 i386 ugetrlimit sys_getrlimit compat_sys_getrlimit | 205 | 191 i386 ugetrlimit sys_getrlimit __ia32_compat_sys_getrlimit |
| 201 | 192 i386 mmap2 sys_mmap_pgoff | 206 | 192 i386 mmap2 sys_mmap_pgoff __ia32_sys_mmap_pgoff |
| 202 | 193 i386 truncate64 sys_truncate64 compat_sys_x86_truncate64 | 207 | 193 i386 truncate64 sys_truncate64 __ia32_compat_sys_x86_truncate64 |
| 203 | 194 i386 ftruncate64 sys_ftruncate64 compat_sys_x86_ftruncate64 | 208 | 194 i386 ftruncate64 sys_ftruncate64 __ia32_compat_sys_x86_ftruncate64 |
| 204 | 195 i386 stat64 sys_stat64 compat_sys_x86_stat64 | 209 | 195 i386 stat64 sys_stat64 __ia32_compat_sys_x86_stat64 |
| 205 | 196 i386 lstat64 sys_lstat64 compat_sys_x86_lstat64 | 210 | 196 i386 lstat64 sys_lstat64 __ia32_compat_sys_x86_lstat64 |
| 206 | 197 i386 fstat64 sys_fstat64 compat_sys_x86_fstat64 | 211 | 197 i386 fstat64 sys_fstat64 __ia32_compat_sys_x86_fstat64 |
| 207 | 198 i386 lchown32 sys_lchown | 212 | 198 i386 lchown32 sys_lchown __ia32_sys_lchown |
| 208 | 199 i386 getuid32 sys_getuid | 213 | 199 i386 getuid32 sys_getuid __ia32_sys_getuid |
| 209 | 200 i386 getgid32 sys_getgid | 214 | 200 i386 getgid32 sys_getgid __ia32_sys_getgid |
| 210 | 201 i386 geteuid32 sys_geteuid | 215 | 201 i386 geteuid32 sys_geteuid __ia32_sys_geteuid |
| 211 | 202 i386 getegid32 sys_getegid | 216 | 202 i386 getegid32 sys_getegid __ia32_sys_getegid |
| 212 | 203 i386 setreuid32 sys_setreuid | 217 | 203 i386 setreuid32 sys_setreuid __ia32_sys_setreuid |
| 213 | 204 i386 setregid32 sys_setregid | 218 | 204 i386 setregid32 sys_setregid __ia32_sys_setregid |
| 214 | 205 i386 getgroups32 sys_getgroups | 219 | 205 i386 getgroups32 sys_getgroups __ia32_sys_getgroups |
| 215 | 206 i386 setgroups32 sys_setgroups | 220 | 206 i386 setgroups32 sys_setgroups __ia32_sys_setgroups |
| 216 | 207 i386 fchown32 sys_fchown | 221 | 207 i386 fchown32 sys_fchown __ia32_sys_fchown |
| 217 | 208 i386 setresuid32 sys_setresuid | 222 | 208 i386 setresuid32 sys_setresuid __ia32_sys_setresuid |
| 218 | 209 i386 getresuid32 sys_getresuid | 223 | 209 i386 getresuid32 sys_getresuid __ia32_sys_getresuid |
| 219 | 210 i386 setresgid32 sys_setresgid | 224 | 210 i386 setresgid32 sys_setresgid __ia32_sys_setresgid |
| 220 | 211 i386 getresgid32 sys_getresgid | 225 | 211 i386 getresgid32 sys_getresgid __ia32_sys_getresgid |
| 221 | 212 i386 chown32 sys_chown | 226 | 212 i386 chown32 sys_chown __ia32_sys_chown |
| 222 | 213 i386 setuid32 sys_setuid | 227 | 213 i386 setuid32 sys_setuid __ia32_sys_setuid |
| 223 | 214 i386 setgid32 sys_setgid | 228 | 214 i386 setgid32 sys_setgid __ia32_sys_setgid |
| 224 | 215 i386 setfsuid32 sys_setfsuid | 229 | 215 i386 setfsuid32 sys_setfsuid __ia32_sys_setfsuid |
| 225 | 216 i386 setfsgid32 sys_setfsgid | 230 | 216 i386 setfsgid32 sys_setfsgid __ia32_sys_setfsgid |
| 226 | 217 i386 pivot_root sys_pivot_root | 231 | 217 i386 pivot_root sys_pivot_root __ia32_sys_pivot_root |
| 227 | 218 i386 mincore sys_mincore | 232 | 218 i386 mincore sys_mincore __ia32_sys_mincore |
| 228 | 219 i386 madvise sys_madvise | 233 | 219 i386 madvise sys_madvise __ia32_sys_madvise |
| 229 | 220 i386 getdents64 sys_getdents64 | 234 | 220 i386 getdents64 sys_getdents64 __ia32_sys_getdents64 |
| 230 | 221 i386 fcntl64 sys_fcntl64 compat_sys_fcntl64 | 235 | 221 i386 fcntl64 sys_fcntl64 __ia32_compat_sys_fcntl64 |
| 231 | # 222 is unused | 236 | # 222 is unused |
| 232 | # 223 is unused | 237 | # 223 is unused |
| 233 | 224 i386 gettid sys_gettid | 238 | 224 i386 gettid sys_gettid __ia32_sys_gettid |
| 234 | 225 i386 readahead sys_readahead compat_sys_x86_readahead | 239 | 225 i386 readahead sys_readahead __ia32_compat_sys_x86_readahead |
| 235 | 226 i386 setxattr sys_setxattr | 240 | 226 i386 setxattr sys_setxattr __ia32_sys_setxattr |
| 236 | 227 i386 lsetxattr sys_lsetxattr | 241 | 227 i386 lsetxattr sys_lsetxattr __ia32_sys_lsetxattr |
| 237 | 228 i386 fsetxattr sys_fsetxattr | 242 | 228 i386 fsetxattr sys_fsetxattr __ia32_sys_fsetxattr |
| 238 | 229 i386 getxattr sys_getxattr | 243 | 229 i386 getxattr sys_getxattr __ia32_sys_getxattr |
| 239 | 230 i386 lgetxattr sys_lgetxattr | 244 | 230 i386 lgetxattr sys_lgetxattr __ia32_sys_lgetxattr |
| 240 | 231 i386 fgetxattr sys_fgetxattr | 245 | 231 i386 fgetxattr sys_fgetxattr __ia32_sys_fgetxattr |
| 241 | 232 i386 listxattr sys_listxattr | 246 | 232 i386 listxattr sys_listxattr __ia32_sys_listxattr |
| 242 | 233 i386 llistxattr sys_llistxattr | 247 | 233 i386 llistxattr sys_llistxattr __ia32_sys_llistxattr |
| 243 | 234 i386 flistxattr sys_flistxattr | 248 | 234 i386 flistxattr sys_flistxattr __ia32_sys_flistxattr |
| 244 | 235 i386 removexattr sys_removexattr | 249 | 235 i386 removexattr sys_removexattr __ia32_sys_removexattr |
| 245 | 236 i386 lremovexattr sys_lremovexattr | 250 | 236 i386 lremovexattr sys_lremovexattr __ia32_sys_lremovexattr |
| 246 | 237 i386 fremovexattr sys_fremovexattr | 251 | 237 i386 fremovexattr sys_fremovexattr __ia32_sys_fremovexattr |
| 247 | 238 i386 tkill sys_tkill | 252 | 238 i386 tkill sys_tkill __ia32_sys_tkill |
| 248 | 239 i386 sendfile64 sys_sendfile64 | 253 | 239 i386 sendfile64 sys_sendfile64 __ia32_sys_sendfile64 |
| 249 | 240 i386 futex sys_futex compat_sys_futex | 254 | 240 i386 futex sys_futex __ia32_compat_sys_futex |
| 250 | 241 i386 sched_setaffinity sys_sched_setaffinity compat_sys_sched_setaffinity | 255 | 241 i386 sched_setaffinity sys_sched_setaffinity __ia32_compat_sys_sched_setaffinity |
| 251 | 242 i386 sched_getaffinity sys_sched_getaffinity compat_sys_sched_getaffinity | 256 | 242 i386 sched_getaffinity sys_sched_getaffinity __ia32_compat_sys_sched_getaffinity |
| 252 | 243 i386 set_thread_area sys_set_thread_area | 257 | 243 i386 set_thread_area sys_set_thread_area __ia32_sys_set_thread_area |
| 253 | 244 i386 get_thread_area sys_get_thread_area | 258 | 244 i386 get_thread_area sys_get_thread_area __ia32_sys_get_thread_area |
| 254 | 245 i386 io_setup sys_io_setup compat_sys_io_setup | 259 | 245 i386 io_setup sys_io_setup __ia32_compat_sys_io_setup |
| 255 | 246 i386 io_destroy sys_io_destroy | 260 | 246 i386 io_destroy sys_io_destroy __ia32_sys_io_destroy |
| 256 | 247 i386 io_getevents sys_io_getevents compat_sys_io_getevents | 261 | 247 i386 io_getevents sys_io_getevents __ia32_compat_sys_io_getevents |
| 257 | 248 i386 io_submit sys_io_submit compat_sys_io_submit | 262 | 248 i386 io_submit sys_io_submit __ia32_compat_sys_io_submit |
| 258 | 249 i386 io_cancel sys_io_cancel | 263 | 249 i386 io_cancel sys_io_cancel __ia32_sys_io_cancel |
| 259 | 250 i386 fadvise64 sys_fadvise64 compat_sys_x86_fadvise64 | 264 | 250 i386 fadvise64 sys_fadvise64 __ia32_compat_sys_x86_fadvise64 |
| 260 | # 251 is available for reuse (was briefly sys_set_zone_reclaim) | 265 | # 251 is available for reuse (was briefly sys_set_zone_reclaim) |
| 261 | 252 i386 exit_group sys_exit_group | 266 | 252 i386 exit_group sys_exit_group __ia32_sys_exit_group |
| 262 | 253 i386 lookup_dcookie sys_lookup_dcookie compat_sys_lookup_dcookie | 267 | 253 i386 lookup_dcookie sys_lookup_dcookie __ia32_compat_sys_lookup_dcookie |
| 263 | 254 i386 epoll_create sys_epoll_create | 268 | 254 i386 epoll_create sys_epoll_create __ia32_sys_epoll_create |
| 264 | 255 i386 epoll_ctl sys_epoll_ctl | 269 | 255 i386 epoll_ctl sys_epoll_ctl __ia32_sys_epoll_ctl |
| 265 | 256 i386 epoll_wait sys_epoll_wait | 270 | 256 i386 epoll_wait sys_epoll_wait __ia32_sys_epoll_wait |
| 266 | 257 i386 remap_file_pages sys_remap_file_pages | 271 | 257 i386 remap_file_pages sys_remap_file_pages __ia32_sys_remap_file_pages |
| 267 | 258 i386 set_tid_address sys_set_tid_address | 272 | 258 i386 set_tid_address sys_set_tid_address __ia32_sys_set_tid_address |
| 268 | 259 i386 timer_create sys_timer_create compat_sys_timer_create | 273 | 259 i386 timer_create sys_timer_create __ia32_compat_sys_timer_create |
| 269 | 260 i386 timer_settime sys_timer_settime compat_sys_timer_settime | 274 | 260 i386 timer_settime sys_timer_settime __ia32_compat_sys_timer_settime |
| 270 | 261 i386 timer_gettime sys_timer_gettime compat_sys_timer_gettime | 275 | 261 i386 timer_gettime sys_timer_gettime __ia32_compat_sys_timer_gettime |
| 271 | 262 i386 timer_getoverrun sys_timer_getoverrun | 276 | 262 i386 timer_getoverrun sys_timer_getoverrun __ia32_sys_timer_getoverrun |
| 272 | 263 i386 timer_delete sys_timer_delete | 277 | 263 i386 timer_delete sys_timer_delete __ia32_sys_timer_delete |
| 273 | 264 i386 clock_settime sys_clock_settime compat_sys_clock_settime | 278 | 264 i386 clock_settime sys_clock_settime __ia32_compat_sys_clock_settime |
| 274 | 265 i386 clock_gettime sys_clock_gettime compat_sys_clock_gettime | 279 | 265 i386 clock_gettime sys_clock_gettime __ia32_compat_sys_clock_gettime |
| 275 | 266 i386 clock_getres sys_clock_getres compat_sys_clock_getres | 280 | 266 i386 clock_getres sys_clock_getres __ia32_compat_sys_clock_getres |
| 276 | 267 i386 clock_nanosleep sys_clock_nanosleep compat_sys_clock_nanosleep | 281 | 267 i386 clock_nanosleep sys_clock_nanosleep __ia32_compat_sys_clock_nanosleep |
| 277 | 268 i386 statfs64 sys_statfs64 compat_sys_statfs64 | 282 | 268 i386 statfs64 sys_statfs64 __ia32_compat_sys_statfs64 |
| 278 | 269 i386 fstatfs64 sys_fstatfs64 compat_sys_fstatfs64 | 283 | 269 i386 fstatfs64 sys_fstatfs64 __ia32_compat_sys_fstatfs64 |
| 279 | 270 i386 tgkill sys_tgkill | 284 | 270 i386 tgkill sys_tgkill __ia32_sys_tgkill |
| 280 | 271 i386 utimes sys_utimes compat_sys_utimes | 285 | 271 i386 utimes sys_utimes __ia32_compat_sys_utimes |
| 281 | 272 i386 fadvise64_64 sys_fadvise64_64 compat_sys_x86_fadvise64_64 | 286 | 272 i386 fadvise64_64 sys_fadvise64_64 __ia32_compat_sys_x86_fadvise64_64 |
| 282 | 273 i386 vserver | 287 | 273 i386 vserver |
| 283 | 274 i386 mbind sys_mbind | 288 | 274 i386 mbind sys_mbind __ia32_sys_mbind |
| 284 | 275 i386 get_mempolicy sys_get_mempolicy compat_sys_get_mempolicy | 289 | 275 i386 get_mempolicy sys_get_mempolicy __ia32_compat_sys_get_mempolicy |
| 285 | 276 i386 set_mempolicy sys_set_mempolicy | 290 | 276 i386 set_mempolicy sys_set_mempolicy __ia32_sys_set_mempolicy |
| 286 | 277 i386 mq_open sys_mq_open compat_sys_mq_open | 291 | 277 i386 mq_open sys_mq_open __ia32_compat_sys_mq_open |
| 287 | 278 i386 mq_unlink sys_mq_unlink | 292 | 278 i386 mq_unlink sys_mq_unlink __ia32_sys_mq_unlink |
| 288 | 279 i386 mq_timedsend sys_mq_timedsend compat_sys_mq_timedsend | 293 | 279 i386 mq_timedsend sys_mq_timedsend __ia32_compat_sys_mq_timedsend |
| 289 | 280 i386 mq_timedreceive sys_mq_timedreceive compat_sys_mq_timedreceive | 294 | 280 i386 mq_timedreceive sys_mq_timedreceive __ia32_compat_sys_mq_timedreceive |
| 290 | 281 i386 mq_notify sys_mq_notify compat_sys_mq_notify | 295 | 281 i386 mq_notify sys_mq_notify __ia32_compat_sys_mq_notify |
| 291 | 282 i386 mq_getsetattr sys_mq_getsetattr compat_sys_mq_getsetattr | 296 | 282 i386 mq_getsetattr sys_mq_getsetattr __ia32_compat_sys_mq_getsetattr |
| 292 | 283 i386 kexec_load sys_kexec_load compat_sys_kexec_load | 297 | 283 i386 kexec_load sys_kexec_load __ia32_compat_sys_kexec_load |
| 293 | 284 i386 waitid sys_waitid compat_sys_waitid | 298 | 284 i386 waitid sys_waitid __ia32_compat_sys_waitid |
| 294 | # 285 sys_setaltroot | 299 | # 285 sys_setaltroot |
| 295 | 286 i386 add_key sys_add_key | 300 | 286 i386 add_key sys_add_key __ia32_sys_add_key |
| 296 | 287 i386 request_key sys_request_key | 301 | 287 i386 request_key sys_request_key __ia32_sys_request_key |
| 297 | 288 i386 keyctl sys_keyctl compat_sys_keyctl | 302 | 288 i386 keyctl sys_keyctl __ia32_compat_sys_keyctl |
| 298 | 289 i386 ioprio_set sys_ioprio_set | 303 | 289 i386 ioprio_set sys_ioprio_set __ia32_sys_ioprio_set |
| 299 | 290 i386 ioprio_get sys_ioprio_get | 304 | 290 i386 ioprio_get sys_ioprio_get __ia32_sys_ioprio_get |
| 300 | 291 i386 inotify_init sys_inotify_init | 305 | 291 i386 inotify_init sys_inotify_init __ia32_sys_inotify_init |
| 301 | 292 i386 inotify_add_watch sys_inotify_add_watch | 306 | 292 i386 inotify_add_watch sys_inotify_add_watch __ia32_sys_inotify_add_watch |
| 302 | 293 i386 inotify_rm_watch sys_inotify_rm_watch | 307 | 293 i386 inotify_rm_watch sys_inotify_rm_watch __ia32_sys_inotify_rm_watch |
| 303 | 294 i386 migrate_pages sys_migrate_pages | 308 | 294 i386 migrate_pages sys_migrate_pages __ia32_sys_migrate_pages |
| 304 | 295 i386 openat sys_openat compat_sys_openat | 309 | 295 i386 openat sys_openat __ia32_compat_sys_openat |
| 305 | 296 i386 mkdirat sys_mkdirat | 310 | 296 i386 mkdirat sys_mkdirat __ia32_sys_mkdirat |
| 306 | 297 i386 mknodat sys_mknodat | 311 | 297 i386 mknodat sys_mknodat __ia32_sys_mknodat |
| 307 | 298 i386 fchownat sys_fchownat | 312 | 298 i386 fchownat sys_fchownat __ia32_sys_fchownat |
| 308 | 299 i386 futimesat sys_futimesat compat_sys_futimesat | 313 | 299 i386 futimesat sys_futimesat __ia32_compat_sys_futimesat |
| 309 | 300 i386 fstatat64 sys_fstatat64 compat_sys_x86_fstatat | 314 | 300 i386 fstatat64 sys_fstatat64 __ia32_compat_sys_x86_fstatat |
| 310 | 301 i386 unlinkat sys_unlinkat | 315 | 301 i386 unlinkat sys_unlinkat __ia32_sys_unlinkat |
| 311 | 302 i386 renameat sys_renameat | 316 | 302 i386 renameat sys_renameat __ia32_sys_renameat |
| 312 | 303 i386 linkat sys_linkat | 317 | 303 i386 linkat sys_linkat __ia32_sys_linkat |
| 313 | 304 i386 symlinkat sys_symlinkat | 318 | 304 i386 symlinkat sys_symlinkat __ia32_sys_symlinkat |
| 314 | 305 i386 readlinkat sys_readlinkat | 319 | 305 i386 readlinkat sys_readlinkat __ia32_sys_readlinkat |
| 315 | 306 i386 fchmodat sys_fchmodat | 320 | 306 i386 fchmodat sys_fchmodat __ia32_sys_fchmodat |
| 316 | 307 i386 faccessat sys_faccessat | 321 | 307 i386 faccessat sys_faccessat __ia32_sys_faccessat |
| 317 | 308 i386 pselect6 sys_pselect6 compat_sys_pselect6 | 322 | 308 i386 pselect6 sys_pselect6 __ia32_compat_sys_pselect6 |
| 318 | 309 i386 ppoll sys_ppoll compat_sys_ppoll | 323 | 309 i386 ppoll sys_ppoll __ia32_compat_sys_ppoll |
| 319 | 310 i386 unshare sys_unshare | 324 | 310 i386 unshare sys_unshare __ia32_sys_unshare |
| 320 | 311 i386 set_robust_list sys_set_robust_list compat_sys_set_robust_list | 325 | 311 i386 set_robust_list sys_set_robust_list __ia32_compat_sys_set_robust_list |
| 321 | 312 i386 get_robust_list sys_get_robust_list compat_sys_get_robust_list | 326 | 312 i386 get_robust_list sys_get_robust_list __ia32_compat_sys_get_robust_list |
| 322 | 313 i386 splice sys_splice | 327 | 313 i386 splice sys_splice __ia32_sys_splice |
| 323 | 314 i386 sync_file_range sys_sync_file_range compat_sys_x86_sync_file_range | 328 | 314 i386 sync_file_range sys_sync_file_range __ia32_compat_sys_x86_sync_file_range |
| 324 | 315 i386 tee sys_tee | 329 | 315 i386 tee sys_tee __ia32_sys_tee |
| 325 | 316 i386 vmsplice sys_vmsplice compat_sys_vmsplice | 330 | 316 i386 vmsplice sys_vmsplice __ia32_compat_sys_vmsplice |
| 326 | 317 i386 move_pages sys_move_pages compat_sys_move_pages | 331 | 317 i386 move_pages sys_move_pages __ia32_compat_sys_move_pages |
| 327 | 318 i386 getcpu sys_getcpu | 332 | 318 i386 getcpu sys_getcpu __ia32_sys_getcpu |
| 328 | 319 i386 epoll_pwait sys_epoll_pwait | 333 | 319 i386 epoll_pwait sys_epoll_pwait __ia32_sys_epoll_pwait |
| 329 | 320 i386 utimensat sys_utimensat compat_sys_utimensat | 334 | 320 i386 utimensat sys_utimensat __ia32_compat_sys_utimensat |
| 330 | 321 i386 signalfd sys_signalfd compat_sys_signalfd | 335 | 321 i386 signalfd sys_signalfd __ia32_compat_sys_signalfd |
| 331 | 322 i386 timerfd_create sys_timerfd_create | 336 | 322 i386 timerfd_create sys_timerfd_create __ia32_sys_timerfd_create |
| 332 | 323 i386 eventfd sys_eventfd | 337 | 323 i386 eventfd sys_eventfd __ia32_sys_eventfd |
| 333 | 324 i386 fallocate sys_fallocate compat_sys_x86_fallocate | 338 | 324 i386 fallocate sys_fallocate __ia32_compat_sys_x86_fallocate |
| 334 | 325 i386 timerfd_settime sys_timerfd_settime compat_sys_timerfd_settime | 339 | 325 i386 timerfd_settime sys_timerfd_settime __ia32_compat_sys_timerfd_settime |
| 335 | 326 i386 timerfd_gettime sys_timerfd_gettime compat_sys_timerfd_gettime | 340 | 326 i386 timerfd_gettime sys_timerfd_gettime __ia32_compat_sys_timerfd_gettime |
| 336 | 327 i386 signalfd4 sys_signalfd4 compat_sys_signalfd4 | 341 | 327 i386 signalfd4 sys_signalfd4 __ia32_compat_sys_signalfd4 |
| 337 | 328 i386 eventfd2 sys_eventfd2 | 342 | 328 i386 eventfd2 sys_eventfd2 __ia32_sys_eventfd2 |
| 338 | 329 i386 epoll_create1 sys_epoll_create1 | 343 | 329 i386 epoll_create1 sys_epoll_create1 __ia32_sys_epoll_create1 |
| 339 | 330 i386 dup3 sys_dup3 | 344 | 330 i386 dup3 sys_dup3 __ia32_sys_dup3 |
| 340 | 331 i386 pipe2 sys_pipe2 | 345 | 331 i386 pipe2 sys_pipe2 __ia32_sys_pipe2 |
| 341 | 332 i386 inotify_init1 sys_inotify_init1 | 346 | 332 i386 inotify_init1 sys_inotify_init1 __ia32_sys_inotify_init1 |
| 342 | 333 i386 preadv sys_preadv compat_sys_preadv | 347 | 333 i386 preadv sys_preadv __ia32_compat_sys_preadv |
| 343 | 334 i386 pwritev sys_pwritev compat_sys_pwritev | 348 | 334 i386 pwritev sys_pwritev __ia32_compat_sys_pwritev |
| 344 | 335 i386 rt_tgsigqueueinfo sys_rt_tgsigqueueinfo compat_sys_rt_tgsigqueueinfo | 349 | 335 i386 rt_tgsigqueueinfo sys_rt_tgsigqueueinfo __ia32_compat_sys_rt_tgsigqueueinfo |
| 345 | 336 i386 perf_event_open sys_perf_event_open | 350 | 336 i386 perf_event_open sys_perf_event_open __ia32_sys_perf_event_open |
| 346 | 337 i386 recvmmsg sys_recvmmsg compat_sys_recvmmsg | 351 | 337 i386 recvmmsg sys_recvmmsg __ia32_compat_sys_recvmmsg |
| 347 | 338 i386 fanotify_init sys_fanotify_init | 352 | 338 i386 fanotify_init sys_fanotify_init __ia32_sys_fanotify_init |
| 348 | 339 i386 fanotify_mark sys_fanotify_mark compat_sys_fanotify_mark | 353 | 339 i386 fanotify_mark sys_fanotify_mark __ia32_compat_sys_fanotify_mark |
| 349 | 340 i386 prlimit64 sys_prlimit64 | 354 | 340 i386 prlimit64 sys_prlimit64 __ia32_sys_prlimit64 |
| 350 | 341 i386 name_to_handle_at sys_name_to_handle_at | 355 | 341 i386 name_to_handle_at sys_name_to_handle_at __ia32_sys_name_to_handle_at |
| 351 | 342 i386 open_by_handle_at sys_open_by_handle_at compat_sys_open_by_handle_at | 356 | 342 i386 open_by_handle_at sys_open_by_handle_at __ia32_compat_sys_open_by_handle_at |
| 352 | 343 i386 clock_adjtime sys_clock_adjtime compat_sys_clock_adjtime | 357 | 343 i386 clock_adjtime sys_clock_adjtime __ia32_compat_sys_clock_adjtime |
| 353 | 344 i386 syncfs sys_syncfs | 358 | 344 i386 syncfs sys_syncfs __ia32_sys_syncfs |
| 354 | 345 i386 sendmmsg sys_sendmmsg compat_sys_sendmmsg | 359 | 345 i386 sendmmsg sys_sendmmsg __ia32_compat_sys_sendmmsg |
| 355 | 346 i386 setns sys_setns | 360 | 346 i386 setns sys_setns __ia32_sys_setns |
| 356 | 347 i386 process_vm_readv sys_process_vm_readv compat_sys_process_vm_readv | 361 | 347 i386 process_vm_readv sys_process_vm_readv __ia32_compat_sys_process_vm_readv |
| 357 | 348 i386 process_vm_writev sys_process_vm_writev compat_sys_process_vm_writev | 362 | 348 i386 process_vm_writev sys_process_vm_writev __ia32_compat_sys_process_vm_writev |
| 358 | 349 i386 kcmp sys_kcmp | 363 | 349 i386 kcmp sys_kcmp __ia32_sys_kcmp |
| 359 | 350 i386 finit_module sys_finit_module | 364 | 350 i386 finit_module sys_finit_module __ia32_sys_finit_module |
| 360 | 351 i386 sched_setattr sys_sched_setattr | 365 | 351 i386 sched_setattr sys_sched_setattr __ia32_sys_sched_setattr |
| 361 | 352 i386 sched_getattr sys_sched_getattr | 366 | 352 i386 sched_getattr sys_sched_getattr __ia32_sys_sched_getattr |
| 362 | 353 i386 renameat2 sys_renameat2 | 367 | 353 i386 renameat2 sys_renameat2 __ia32_sys_renameat2 |
| 363 | 354 i386 seccomp sys_seccomp | 368 | 354 i386 seccomp sys_seccomp __ia32_sys_seccomp |
| 364 | 355 i386 getrandom sys_getrandom | 369 | 355 i386 getrandom sys_getrandom __ia32_sys_getrandom |
| 365 | 356 i386 memfd_create sys_memfd_create | 370 | 356 i386 memfd_create sys_memfd_create __ia32_sys_memfd_create |
| 366 | 357 i386 bpf sys_bpf | 371 | 357 i386 bpf sys_bpf __ia32_sys_bpf |
| 367 | 358 i386 execveat sys_execveat compat_sys_execveat | 372 | 358 i386 execveat sys_execveat __ia32_compat_sys_execveat |
| 368 | 359 i386 socket sys_socket | 373 | 359 i386 socket sys_socket __ia32_sys_socket |
| 369 | 360 i386 socketpair sys_socketpair | 374 | 360 i386 socketpair sys_socketpair __ia32_sys_socketpair |
| 370 | 361 i386 bind sys_bind | 375 | 361 i386 bind sys_bind __ia32_sys_bind |
| 371 | 362 i386 connect sys_connect | 376 | 362 i386 connect sys_connect __ia32_sys_connect |
| 372 | 363 i386 listen sys_listen | 377 | 363 i386 listen sys_listen __ia32_sys_listen |
| 373 | 364 i386 accept4 sys_accept4 | 378 | 364 i386 accept4 sys_accept4 __ia32_sys_accept4 |
| 374 | 365 i386 getsockopt sys_getsockopt compat_sys_getsockopt | 379 | 365 i386 getsockopt sys_getsockopt __ia32_compat_sys_getsockopt |
| 375 | 366 i386 setsockopt sys_setsockopt compat_sys_setsockopt | 380 | 366 i386 setsockopt sys_setsockopt __ia32_compat_sys_setsockopt |
| 376 | 367 i386 getsockname sys_getsockname | 381 | 367 i386 getsockname sys_getsockname __ia32_sys_getsockname |
| 377 | 368 i386 getpeername sys_getpeername | 382 | 368 i386 getpeername sys_getpeername __ia32_sys_getpeername |
| 378 | 369 i386 sendto sys_sendto | 383 | 369 i386 sendto sys_sendto __ia32_sys_sendto |
| 379 | 370 i386 sendmsg sys_sendmsg compat_sys_sendmsg | 384 | 370 i386 sendmsg sys_sendmsg __ia32_compat_sys_sendmsg |
| 380 | 371 i386 recvfrom sys_recvfrom compat_sys_recvfrom | 385 | 371 i386 recvfrom sys_recvfrom __ia32_compat_sys_recvfrom |
| 381 | 372 i386 recvmsg sys_recvmsg compat_sys_recvmsg | 386 | 372 i386 recvmsg sys_recvmsg __ia32_compat_sys_recvmsg |
| 382 | 373 i386 shutdown sys_shutdown | 387 | 373 i386 shutdown sys_shutdown __ia32_sys_shutdown |
| 383 | 374 i386 userfaultfd sys_userfaultfd | 388 | 374 i386 userfaultfd sys_userfaultfd __ia32_sys_userfaultfd |
| 384 | 375 i386 membarrier sys_membarrier | 389 | 375 i386 membarrier sys_membarrier __ia32_sys_membarrier |
| 385 | 376 i386 mlock2 sys_mlock2 | 390 | 376 i386 mlock2 sys_mlock2 __ia32_sys_mlock2 |
| 386 | 377 i386 copy_file_range sys_copy_file_range | 391 | 377 i386 copy_file_range sys_copy_file_range __ia32_sys_copy_file_range |
| 387 | 378 i386 preadv2 sys_preadv2 compat_sys_preadv2 | 392 | 378 i386 preadv2 sys_preadv2 __ia32_compat_sys_preadv2 |
| 388 | 379 i386 pwritev2 sys_pwritev2 compat_sys_pwritev2 | 393 | 379 i386 pwritev2 sys_pwritev2 __ia32_compat_sys_pwritev2 |
| 389 | 380 i386 pkey_mprotect sys_pkey_mprotect | 394 | 380 i386 pkey_mprotect sys_pkey_mprotect __ia32_sys_pkey_mprotect |
| 390 | 381 i386 pkey_alloc sys_pkey_alloc | 395 | 381 i386 pkey_alloc sys_pkey_alloc __ia32_sys_pkey_alloc |
| 391 | 382 i386 pkey_free sys_pkey_free | 396 | 382 i386 pkey_free sys_pkey_free __ia32_sys_pkey_free |
| 392 | 383 i386 statx sys_statx | 397 | 383 i386 statx sys_statx __ia32_sys_statx |
| 393 | 384 i386 arch_prctl sys_arch_prctl compat_sys_arch_prctl | 398 | 384 i386 arch_prctl sys_arch_prctl __ia32_compat_sys_arch_prctl |
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl index 5aef183e2f85..4dfe42666d0c 100644 --- a/arch/x86/entry/syscalls/syscall_64.tbl +++ b/arch/x86/entry/syscalls/syscall_64.tbl | |||
| @@ -4,379 +4,383 @@ | |||
| 4 | # The format is: | 4 | # The format is: |
| 5 | # <number> <abi> <name> <entry point> | 5 | # <number> <abi> <name> <entry point> |
| 6 | # | 6 | # |
| 7 | # The __x64_sys_*() stubs are created on-the-fly for sys_*() system calls | ||
| 8 | # | ||
| 7 | # The abi is "common", "64" or "x32" for this file. | 9 | # The abi is "common", "64" or "x32" for this file. |
| 8 | # | 10 | # |
| 9 | 0 common read sys_read | 11 | 0 common read __x64_sys_read |
| 10 | 1 common write sys_write | 12 | 1 common write __x64_sys_write |
| 11 | 2 common open sys_open | 13 | 2 common open __x64_sys_open |
| 12 | 3 common close sys_close | 14 | 3 common close __x64_sys_close |
| 13 | 4 common stat sys_newstat | 15 | 4 common stat __x64_sys_newstat |
| 14 | 5 common fstat sys_newfstat | 16 | 5 common fstat __x64_sys_newfstat |
| 15 | 6 common lstat sys_newlstat | 17 | 6 common lstat __x64_sys_newlstat |
| 16 | 7 common poll sys_poll | 18 | 7 common poll __x64_sys_poll |
| 17 | 8 common lseek sys_lseek | 19 | 8 common lseek __x64_sys_lseek |
| 18 | 9 common mmap sys_mmap | 20 | 9 common mmap __x64_sys_mmap |
| 19 | 10 common mprotect sys_mprotect | 21 | 10 common mprotect __x64_sys_mprotect |
| 20 | 11 common munmap sys_munmap | 22 | 11 common munmap __x64_sys_munmap |
| 21 | 12 common brk sys_brk | 23 | 12 common brk __x64_sys_brk |
| 22 | 13 64 rt_sigaction sys_rt_sigaction | 24 | 13 64 rt_sigaction __x64_sys_rt_sigaction |
| 23 | 14 common rt_sigprocmask sys_rt_sigprocmask | 25 | 14 common rt_sigprocmask __x64_sys_rt_sigprocmask |
| 24 | 15 64 rt_sigreturn sys_rt_sigreturn/ptregs | 26 | 15 64 rt_sigreturn __x64_sys_rt_sigreturn/ptregs |
| 25 | 16 64 ioctl sys_ioctl | 27 | 16 64 ioctl __x64_sys_ioctl |
| 26 | 17 common pread64 sys_pread64 | 28 | 17 common pread64 __x64_sys_pread64 |
| 27 | 18 common pwrite64 sys_pwrite64 | 29 | 18 common pwrite64 __x64_sys_pwrite64 |
| 28 | 19 64 readv sys_readv | 30 | 19 64 readv __x64_sys_readv |
| 29 | 20 64 writev sys_writev | 31 | 20 64 writev __x64_sys_writev |
| 30 | 21 common access sys_access | 32 | 21 common access __x64_sys_access |
| 31 | 22 common pipe sys_pipe | 33 | 22 common pipe __x64_sys_pipe |
| 32 | 23 common select sys_select | 34 | 23 common select __x64_sys_select |
| 33 | 24 common sched_yield sys_sched_yield | 35 | 24 common sched_yield __x64_sys_sched_yield |
| 34 | 25 common mremap sys_mremap | 36 | 25 common mremap __x64_sys_mremap |
| 35 | 26 common msync sys_msync | 37 | 26 common msync __x64_sys_msync |
| 36 | 27 common mincore sys_mincore | 38 | 27 common mincore __x64_sys_mincore |
| 37 | 28 common madvise sys_madvise | 39 | 28 common madvise __x64_sys_madvise |
| 38 | 29 common shmget sys_shmget | 40 | 29 common shmget __x64_sys_shmget |
| 39 | 30 common shmat sys_shmat | 41 | 30 common shmat __x64_sys_shmat |
| 40 | 31 common shmctl sys_shmctl | 42 | 31 common shmctl __x64_sys_shmctl |
| 41 | 32 common dup sys_dup | 43 | 32 common dup __x64_sys_dup |
| 42 | 33 common dup2 sys_dup2 | 44 | 33 common dup2 __x64_sys_dup2 |
| 43 | 34 common pause sys_pause | 45 | 34 common pause __x64_sys_pause |
| 44 | 35 common nanosleep sys_nanosleep | 46 | 35 common nanosleep __x64_sys_nanosleep |
| 45 | 36 common getitimer sys_getitimer | 47 | 36 common getitimer __x64_sys_getitimer |
| 46 | 37 common alarm sys_alarm | 48 | 37 common alarm __x64_sys_alarm |
| 47 | 38 common setitimer sys_setitimer | 49 | 38 common setitimer __x64_sys_setitimer |
| 48 | 39 common getpid sys_getpid | 50 | 39 common getpid __x64_sys_getpid |
| 49 | 40 common sendfile sys_sendfile64 | 51 | 40 common sendfile __x64_sys_sendfile64 |
| 50 | 41 common socket sys_socket | 52 | 41 common socket __x64_sys_socket |
| 51 | 42 common connect sys_connect | 53 | 42 common connect __x64_sys_connect |
| 52 | 43 common accept sys_accept | 54 | 43 common accept __x64_sys_accept |
| 53 | 44 common sendto sys_sendto | 55 | 44 common sendto __x64_sys_sendto |
| 54 | 45 64 recvfrom sys_recvfrom | 56 | 45 64 recvfrom __x64_sys_recvfrom |
| 55 | 46 64 sendmsg sys_sendmsg | 57 | 46 64 sendmsg __x64_sys_sendmsg |
| 56 | 47 64 recvmsg sys_recvmsg | 58 | 47 64 recvmsg __x64_sys_recvmsg |
| 57 | 48 common shutdown sys_shutdown | 59 | 48 common shutdown __x64_sys_shutdown |
| 58 | 49 common bind sys_bind | 60 | 49 common bind __x64_sys_bind |
| 59 | 50 common listen sys_listen | 61 | 50 common listen __x64_sys_listen |
| 60 | 51 common getsockname sys_getsockname | 62 | 51 common getsockname __x64_sys_getsockname |
| 61 | 52 common getpeername sys_getpeername | 63 | 52 common getpeername __x64_sys_getpeername |
| 62 | 53 common socketpair sys_socketpair | 64 | 53 common socketpair __x64_sys_socketpair |
| 63 | 54 64 setsockopt sys_setsockopt | 65 | 54 64 setsockopt __x64_sys_setsockopt |
| 64 | 55 64 getsockopt sys_getsockopt | 66 | 55 64 getsockopt __x64_sys_getsockopt |
| 65 | 56 common clone sys_clone/ptregs | 67 | 56 common clone __x64_sys_clone/ptregs |
| 66 | 57 common fork sys_fork/ptregs | 68 | 57 common fork __x64_sys_fork/ptregs |
| 67 | 58 common vfork sys_vfork/ptregs | 69 | 58 common vfork __x64_sys_vfork/ptregs |
| 68 | 59 64 execve sys_execve/ptregs | 70 | 59 64 execve __x64_sys_execve/ptregs |
| 69 | 60 common exit sys_exit | 71 | 60 common exit __x64_sys_exit |
| 70 | 61 common wait4 sys_wait4 | 72 | 61 common wait4 __x64_sys_wait4 |
| 71 | 62 common kill sys_kill | 73 | 62 common kill __x64_sys_kill |
| 72 | 63 common uname sys_newuname | 74 | 63 common uname __x64_sys_newuname |
| 73 | 64 common semget sys_semget | 75 | 64 common semget __x64_sys_semget |
| 74 | 65 common semop sys_semop | 76 | 65 common semop __x64_sys_semop |
| 75 | 66 common semctl sys_semctl | 77 | 66 common semctl __x64_sys_semctl |
| 76 | 67 common shmdt sys_shmdt | 78 | 67 common shmdt __x64_sys_shmdt |
| 77 | 68 common msgget sys_msgget | 79 | 68 common msgget __x64_sys_msgget |
| 78 | 69 common msgsnd sys_msgsnd | 80 | 69 common msgsnd __x64_sys_msgsnd |
| 79 | 70 common msgrcv sys_msgrcv | 81 | 70 common msgrcv __x64_sys_msgrcv |
| 80 | 71 common msgctl sys_msgctl | 82 | 71 common msgctl __x64_sys_msgctl |
| 81 | 72 common fcntl sys_fcntl | 83 | 72 common fcntl __x64_sys_fcntl |
| 82 | 73 common flock sys_flock | 84 | 73 common flock __x64_sys_flock |
| 83 | 74 common fsync sys_fsync | 85 | 74 common fsync __x64_sys_fsync |
| 84 | 75 common fdatasync sys_fdatasync | 86 | 75 common fdatasync __x64_sys_fdatasync |
| 85 | 76 common truncate sys_truncate | 87 | 76 common truncate __x64_sys_truncate |
| 86 | 77 common ftruncate sys_ftruncate | 88 | 77 common ftruncate __x64_sys_ftruncate |
| 87 | 78 common getdents sys_getdents | 89 | 78 common getdents __x64_sys_getdents |
| 88 | 79 common getcwd sys_getcwd | 90 | 79 common getcwd __x64_sys_getcwd |
| 89 | 80 common chdir sys_chdir | 91 | 80 common chdir __x64_sys_chdir |
| 90 | 81 common fchdir sys_fchdir | 92 | 81 common fchdir __x64_sys_fchdir |
| 91 | 82 common rename sys_rename | 93 | 82 common rename __x64_sys_rename |
| 92 | 83 common mkdir sys_mkdir | 94 | 83 common mkdir __x64_sys_mkdir |
| 93 | 84 common rmdir sys_rmdir | 95 | 84 common rmdir __x64_sys_rmdir |
| 94 | 85 common creat sys_creat | 96 | 85 common creat __x64_sys_creat |
| 95 | 86 common link sys_link | 97 | 86 common link __x64_sys_link |
| 96 | 87 common unlink sys_unlink | 98 | 87 common unlink __x64_sys_unlink |
| 97 | 88 common symlink sys_symlink | 99 | 88 common symlink __x64_sys_symlink |
| 98 | 89 common readlink sys_readlink | 100 | 89 common readlink __x64_sys_readlink |
| 99 | 90 common chmod sys_chmod | 101 | 90 common chmod __x64_sys_chmod |
| 100 | 91 common fchmod sys_fchmod | 102 | 91 common fchmod __x64_sys_fchmod |
| 101 | 92 common chown sys_chown | 103 | 92 common chown __x64_sys_chown |
| 102 | 93 common fchown sys_fchown | 104 | 93 common fchown __x64_sys_fchown |
| 103 | 94 common lchown sys_lchown | 105 | 94 common lchown __x64_sys_lchown |
| 104 | 95 common umask sys_umask | 106 | 95 common umask __x64_sys_umask |
| 105 | 96 common gettimeofday sys_gettimeofday | 107 | 96 common gettimeofday __x64_sys_gettimeofday |
| 106 | 97 common getrlimit sys_getrlimit | 108 | 97 common getrlimit __x64_sys_getrlimit |
| 107 | 98 common getrusage sys_getrusage | 109 | 98 common getrusage __x64_sys_getrusage |
| 108 | 99 common sysinfo sys_sysinfo | 110 | 99 common sysinfo __x64_sys_sysinfo |
| 109 | 100 common times sys_times | 111 | 100 common times __x64_sys_times |
| 110 | 101 64 ptrace sys_ptrace | 112 | 101 64 ptrace __x64_sys_ptrace |
| 111 | 102 common getuid sys_getuid | 113 | 102 common getuid __x64_sys_getuid |
| 112 | 103 common syslog sys_syslog | 114 | 103 common syslog __x64_sys_syslog |
| 113 | 104 common getgid sys_getgid | 115 | 104 common getgid __x64_sys_getgid |
| 114 | 105 common setuid sys_setuid | 116 | 105 common setuid __x64_sys_setuid |
| 115 | 106 common setgid sys_setgid | 117 | 106 common setgid __x64_sys_setgid |
| 116 | 107 common geteuid sys_geteuid | 118 | 107 common geteuid __x64_sys_geteuid |
| 117 | 108 common getegid sys_getegid | 119 | 108 common getegid __x64_sys_getegid |
| 118 | 109 common setpgid sys_setpgid | 120 | 109 common setpgid __x64_sys_setpgid |
| 119 | 110 common getppid sys_getppid | 121 | 110 common getppid __x64_sys_getppid |
| 120 | 111 common getpgrp sys_getpgrp | 122 | 111 common getpgrp __x64_sys_getpgrp |
| 121 | 112 common setsid sys_setsid | 123 | 112 common setsid __x64_sys_setsid |
| 122 | 113 common setreuid sys_setreuid | 124 | 113 common setreuid __x64_sys_setreuid |
| 123 | 114 common setregid sys_setregid | 125 | 114 common setregid __x64_sys_setregid |
| 124 | 115 common getgroups sys_getgroups | 126 | 115 common getgroups __x64_sys_getgroups |
| 125 | 116 common setgroups sys_setgroups | 127 | 116 common setgroups __x64_sys_setgroups |
| 126 | 117 common setresuid sys_setresuid | 128 | 117 common setresuid __x64_sys_setresuid |
| 127 | 118 common getresuid sys_getresuid | 129 | 118 common getresuid __x64_sys_getresuid |
| 128 | 119 common setresgid sys_setresgid | 130 | 119 common setresgid __x64_sys_setresgid |
| 129 | 120 common getresgid sys_getresgid | 131 | 120 common getresgid __x64_sys_getresgid |
| 130 | 121 common getpgid sys_getpgid | 132 | 121 common getpgid __x64_sys_getpgid |
| 131 | 122 common setfsuid sys_setfsuid | 133 | 122 common setfsuid __x64_sys_setfsuid |
| 132 | 123 common setfsgid sys_setfsgid | 134 | 123 common setfsgid __x64_sys_setfsgid |
| 133 | 124 common getsid sys_getsid | 135 | 124 common getsid __x64_sys_getsid |
| 134 | 125 common capget sys_capget | 136 | 125 common capget __x64_sys_capget |
| 135 | 126 common capset sys_capset | 137 | 126 common capset __x64_sys_capset |
| 136 | 127 64 rt_sigpending sys_rt_sigpending | 138 | 127 64 rt_sigpending __x64_sys_rt_sigpending |
| 137 | 128 64 rt_sigtimedwait sys_rt_sigtimedwait | 139 | 128 64 rt_sigtimedwait __x64_sys_rt_sigtimedwait |
| 138 | 129 64 rt_sigqueueinfo sys_rt_sigqueueinfo | 140 | 129 64 rt_sigqueueinfo __x64_sys_rt_sigqueueinfo |
| 139 | 130 common rt_sigsuspend sys_rt_sigsuspend | 141 | 130 common rt_sigsuspend __x64_sys_rt_sigsuspend |
| 140 | 131 64 sigaltstack sys_sigaltstack | 142 | 131 64 sigaltstack __x64_sys_sigaltstack |
| 141 | 132 common utime sys_utime | 143 | 132 common utime __x64_sys_utime |
| 142 | 133 common mknod sys_mknod | 144 | 133 common mknod __x64_sys_mknod |
| 143 | 134 64 uselib | 145 | 134 64 uselib |
| 144 | 135 common personality sys_personality | 146 | 135 common personality __x64_sys_personality |
| 145 | 136 common ustat sys_ustat | 147 | 136 common ustat __x64_sys_ustat |
| 146 | 137 common statfs sys_statfs | 148 | 137 common statfs __x64_sys_statfs |
| 147 | 138 common fstatfs sys_fstatfs | 149 | 138 common fstatfs __x64_sys_fstatfs |
| 148 | 139 common sysfs sys_sysfs | 150 | 139 common sysfs __x64_sys_sysfs |
| 149 | 140 common getpriority sys_getpriority | 151 | 140 common getpriority __x64_sys_getpriority |
| 150 | 141 common setpriority sys_setpriority | 152 | 141 common setpriority __x64_sys_setpriority |
| 151 | 142 common sched_setparam sys_sched_setparam | 153 | 142 common sched_setparam __x64_sys_sched_setparam |
| 152 | 143 common sched_getparam sys_sched_getparam | 154 | 143 common sched_getparam __x64_sys_sched_getparam |
| 153 | 144 common sched_setscheduler sys_sched_setscheduler | 155 | 144 common sched_setscheduler __x64_sys_sched_setscheduler |
| 154 | 145 common sched_getscheduler sys_sched_getscheduler | 156 | 145 common sched_getscheduler __x64_sys_sched_getscheduler |
| 155 | 146 common sched_get_priority_max sys_sched_get_priority_max | 157 | 146 common sched_get_priority_max __x64_sys_sched_get_priority_max |
| 156 | 147 common sched_get_priority_min sys_sched_get_priority_min | 158 | 147 common sched_get_priority_min __x64_sys_sched_get_priority_min |
| 157 | 148 common sched_rr_get_interval sys_sched_rr_get_interval | 159 | 148 common sched_rr_get_interval __x64_sys_sched_rr_get_interval |
| 158 | 149 common mlock sys_mlock | 160 | 149 common mlock __x64_sys_mlock |
| 159 | 150 common munlock sys_munlock | 161 | 150 common munlock __x64_sys_munlock |
| 160 | 151 common mlockall sys_mlockall | 162 | 151 common mlockall __x64_sys_mlockall |
| 161 | 152 common munlockall sys_munlockall | 163 | 152 common munlockall __x64_sys_munlockall |
| 162 | 153 common vhangup sys_vhangup | 164 | 153 common vhangup __x64_sys_vhangup |
| 163 | 154 common modify_ldt sys_modify_ldt | 165 | 154 common modify_ldt __x64_sys_modify_ldt |
| 164 | 155 common pivot_root sys_pivot_root | 166 | 155 common pivot_root __x64_sys_pivot_root |
| 165 | 156 64 _sysctl sys_sysctl | 167 | 156 64 _sysctl __x64_sys_sysctl |
| 166 | 157 common prctl sys_prctl | 168 | 157 common prctl __x64_sys_prctl |
| 167 | 158 common arch_prctl sys_arch_prctl | 169 | 158 common arch_prctl __x64_sys_arch_prctl |
| 168 | 159 common adjtimex sys_adjtimex | 170 | 159 common adjtimex __x64_sys_adjtimex |
| 169 | 160 common setrlimit sys_setrlimit | 171 | 160 common setrlimit __x64_sys_setrlimit |
| 170 | 161 common chroot sys_chroot | 172 | 161 common chroot __x64_sys_chroot |
| 171 | 162 common sync sys_sync | 173 | 162 common sync __x64_sys_sync |
| 172 | 163 common acct sys_acct | 174 | 163 common acct __x64_sys_acct |
| 173 | 164 common settimeofday sys_settimeofday | 175 | 164 common settimeofday __x64_sys_settimeofday |
| 174 | 165 common mount sys_mount | 176 | 165 common mount __x64_sys_mount |
| 175 | 166 common umount2 sys_umount | 177 | 166 common umount2 __x64_sys_umount |
| 176 | 167 common swapon sys_swapon | 178 | 167 common swapon __x64_sys_swapon |
| 177 | 168 common swapoff sys_swapoff | 179 | 168 common swapoff __x64_sys_swapoff |
| 178 | 169 common reboot sys_reboot | 180 | 169 common reboot __x64_sys_reboot |
| 179 | 170 common sethostname sys_sethostname | 181 | 170 common sethostname __x64_sys_sethostname |
| 180 | 171 common setdomainname sys_setdomainname | 182 | 171 common setdomainname __x64_sys_setdomainname |
| 181 | 172 common iopl sys_iopl/ptregs | 183 | 172 common iopl __x64_sys_iopl/ptregs |
| 182 | 173 common ioperm sys_ioperm | 184 | 173 common ioperm __x64_sys_ioperm |
| 183 | 174 64 create_module | 185 | 174 64 create_module |
| 184 | 175 common init_module sys_init_module | 186 | 175 common init_module __x64_sys_init_module |
| 185 | 176 common delete_module sys_delete_module | 187 | 176 common delete_module __x64_sys_delete_module |
| 186 | 177 64 get_kernel_syms | 188 | 177 64 get_kernel_syms |
| 187 | 178 64 query_module | 189 | 178 64 query_module |
| 188 | 179 common quotactl sys_quotactl | 190 | 179 common quotactl __x64_sys_quotactl |
| 189 | 180 64 nfsservctl | 191 | 180 64 nfsservctl |
| 190 | 181 common getpmsg | 192 | 181 common getpmsg |
| 191 | 182 common putpmsg | 193 | 182 common putpmsg |
| 192 | 183 common afs_syscall | 194 | 183 common afs_syscall |
| 193 | 184 common tuxcall | 195 | 184 common tuxcall |
| 194 | 185 common security | 196 | 185 common security |
| 195 | 186 common gettid sys_gettid | 197 | 186 common gettid __x64_sys_gettid |
| 196 | 187 common readahead sys_readahead | 198 | 187 common readahead __x64_sys_readahead |
| 197 | 188 common setxattr sys_setxattr | 199 | 188 common setxattr __x64_sys_setxattr |
| 198 | 189 common lsetxattr sys_lsetxattr | 200 | 189 common lsetxattr __x64_sys_lsetxattr |
| 199 | 190 common fsetxattr sys_fsetxattr | 201 | 190 common fsetxattr __x64_sys_fsetxattr |
| 200 | 191 common getxattr sys_getxattr | 202 | 191 common getxattr __x64_sys_getxattr |
| 201 | 192 common lgetxattr sys_lgetxattr | 203 | 192 common lgetxattr __x64_sys_lgetxattr |
| 202 | 193 common fgetxattr sys_fgetxattr | 204 | 193 common fgetxattr __x64_sys_fgetxattr |
| 203 | 194 common listxattr sys_listxattr | 205 | 194 common listxattr __x64_sys_listxattr |
| 204 | 195 common llistxattr sys_llistxattr | 206 | 195 common llistxattr __x64_sys_llistxattr |
| 205 | 196 common flistxattr sys_flistxattr | 207 | 196 common flistxattr __x64_sys_flistxattr |
| 206 | 197 common removexattr sys_removexattr | 208 | 197 common removexattr __x64_sys_removexattr |
| 207 | 198 common lremovexattr sys_lremovexattr | 209 | 198 common lremovexattr __x64_sys_lremovexattr |
| 208 | 199 common fremovexattr sys_fremovexattr | 210 | 199 common fremovexattr __x64_sys_fremovexattr |
| 209 | 200 common tkill sys_tkill | 211 | 200 common tkill __x64_sys_tkill |
| 210 | 201 common time sys_time | 212 | 201 common time __x64_sys_time |
| 211 | 202 common futex sys_futex | 213 | 202 common futex __x64_sys_futex |
| 212 | 203 common sched_setaffinity sys_sched_setaffinity | 214 | 203 common sched_setaffinity __x64_sys_sched_setaffinity |
| 213 | 204 common sched_getaffinity sys_sched_getaffinity | 215 | 204 common sched_getaffinity __x64_sys_sched_getaffinity |
| 214 | 205 64 set_thread_area | 216 | 205 64 set_thread_area |
| 215 | 206 64 io_setup sys_io_setup | 217 | 206 64 io_setup __x64_sys_io_setup |
| 216 | 207 common io_destroy sys_io_destroy | 218 | 207 common io_destroy __x64_sys_io_destroy |
| 217 | 208 common io_getevents sys_io_getevents | 219 | 208 common io_getevents __x64_sys_io_getevents |
| 218 | 209 64 io_submit sys_io_submit | 220 | 209 64 io_submit __x64_sys_io_submit |
| 219 | 210 common io_cancel sys_io_cancel | 221 | 210 common io_cancel __x64_sys_io_cancel |
| 220 | 211 64 get_thread_area | 222 | 211 64 get_thread_area |
| 221 | 212 common lookup_dcookie sys_lookup_dcookie | 223 | 212 common lookup_dcookie __x64_sys_lookup_dcookie |
| 222 | 213 common epoll_create sys_epoll_create | 224 | 213 common epoll_create __x64_sys_epoll_create |
| 223 | 214 64 epoll_ctl_old | 225 | 214 64 epoll_ctl_old |
| 224 | 215 64 epoll_wait_old | 226 | 215 64 epoll_wait_old |
| 225 | 216 common remap_file_pages sys_remap_file_pages | 227 | 216 common remap_file_pages __x64_sys_remap_file_pages |
| 226 | 217 common getdents64 sys_getdents64 | 228 | 217 common getdents64 __x64_sys_getdents64 |
| 227 | 218 common set_tid_address sys_set_tid_address | 229 | 218 common set_tid_address __x64_sys_set_tid_address |
| 228 | 219 common restart_syscall sys_restart_syscall | 230 | 219 common restart_syscall __x64_sys_restart_syscall |
| 229 | 220 common semtimedop sys_semtimedop | 231 | 220 common semtimedop __x64_sys_semtimedop |
| 230 | 221 common fadvise64 sys_fadvise64 | 232 | 221 common fadvise64 __x64_sys_fadvise64 |
| 231 | 222 64 timer_create sys_timer_create | 233 | 222 64 timer_create __x64_sys_timer_create |
| 232 | 223 common timer_settime sys_timer_settime | 234 | 223 common timer_settime __x64_sys_timer_settime |
| 233 | 224 common timer_gettime sys_timer_gettime | 235 | 224 common timer_gettime __x64_sys_timer_gettime |
| 234 | 225 common timer_getoverrun sys_timer_getoverrun | 236 | 225 common timer_getoverrun __x64_sys_timer_getoverrun |
| 235 | 226 common timer_delete sys_timer_delete | 237 | 226 common timer_delete __x64_sys_timer_delete |
| 236 | 227 common clock_settime sys_clock_settime | 238 | 227 common clock_settime __x64_sys_clock_settime |
| 237 | 228 common clock_gettime sys_clock_gettime | 239 | 228 common clock_gettime __x64_sys_clock_gettime |
| 238 | 229 common clock_getres sys_clock_getres | 240 | 229 common clock_getres __x64_sys_clock_getres |
| 239 | 230 common clock_nanosleep sys_clock_nanosleep | 241 | 230 common clock_nanosleep __x64_sys_clock_nanosleep |
| 240 | 231 common exit_group sys_exit_group | 242 | 231 common exit_group __x64_sys_exit_group |
| 241 | 232 common epoll_wait sys_epoll_wait | 243 | 232 common epoll_wait __x64_sys_epoll_wait |
| 242 | 233 common epoll_ctl sys_epoll_ctl | 244 | 233 common epoll_ctl __x64_sys_epoll_ctl |
| 243 | 234 common tgkill sys_tgkill | 245 | 234 common tgkill __x64_sys_tgkill |
| 244 | 235 common utimes sys_utimes | 246 | 235 common utimes __x64_sys_utimes |
| 245 | 236 64 vserver | 247 | 236 64 vserver |
| 246 | 237 common mbind sys_mbind | 248 | 237 common mbind __x64_sys_mbind |
| 247 | 238 common set_mempolicy sys_set_mempolicy | 249 | 238 common set_mempolicy __x64_sys_set_mempolicy |
| 248 | 239 common get_mempolicy sys_get_mempolicy | 250 | 239 common get_mempolicy __x64_sys_get_mempolicy |
| 249 | 240 common mq_open sys_mq_open | 251 | 240 common mq_open __x64_sys_mq_open |
| 250 | 241 common mq_unlink sys_mq_unlink | 252 | 241 common mq_unlink __x64_sys_mq_unlink |
| 251 | 242 common mq_timedsend sys_mq_timedsend | 253 | 242 common mq_timedsend __x64_sys_mq_timedsend |
| 252 | 243 common mq_timedreceive sys_mq_timedreceive | 254 | 243 common mq_timedreceive __x64_sys_mq_timedreceive |
| 253 | 244 64 mq_notify sys_mq_notify | 255 | 244 64 mq_notify __x64_sys_mq_notify |
| 254 | 245 common mq_getsetattr sys_mq_getsetattr | 256 | 245 common mq_getsetattr __x64_sys_mq_getsetattr |
| 255 | 246 64 kexec_load sys_kexec_load | 257 | 246 64 kexec_load __x64_sys_kexec_load |
| 256 | 247 64 waitid sys_waitid | 258 | 247 64 waitid __x64_sys_waitid |
| 257 | 248 common add_key sys_add_key | 259 | 248 common add_key __x64_sys_add_key |
| 258 | 249 common request_key sys_request_key | 260 | 249 common request_key __x64_sys_request_key |
| 259 | 250 common keyctl sys_keyctl | 261 | 250 common keyctl __x64_sys_keyctl |
| 260 | 251 common ioprio_set sys_ioprio_set | 262 | 251 common ioprio_set __x64_sys_ioprio_set |
| 261 | 252 common ioprio_get sys_ioprio_get | 263 | 252 common ioprio_get __x64_sys_ioprio_get |
| 262 | 253 common inotify_init sys_inotify_init | 264 | 253 common inotify_init __x64_sys_inotify_init |
| 263 | 254 common inotify_add_watch sys_inotify_add_watch | 265 | 254 common inotify_add_watch __x64_sys_inotify_add_watch |
| 264 | 255 common inotify_rm_watch sys_inotify_rm_watch | 266 | 255 common inotify_rm_watch __x64_sys_inotify_rm_watch |
| 265 | 256 common migrate_pages sys_migrate_pages | 267 | 256 common migrate_pages __x64_sys_migrate_pages |
| 266 | 257 common openat sys_openat | 268 | 257 common openat __x64_sys_openat |
| 267 | 258 common mkdirat sys_mkdirat | 269 | 258 common mkdirat __x64_sys_mkdirat |
| 268 | 259 common mknodat sys_mknodat | 270 | 259 common mknodat __x64_sys_mknodat |
| 269 | 260 common fchownat sys_fchownat | 271 | 260 common fchownat __x64_sys_fchownat |
| 270 | 261 common futimesat sys_futimesat | 272 | 261 common futimesat __x64_sys_futimesat |
| 271 | 262 common newfstatat sys_newfstatat | 273 | 262 common newfstatat __x64_sys_newfstatat |
| 272 | 263 common unlinkat sys_unlinkat | 274 | 263 common unlinkat __x64_sys_unlinkat |
| 273 | 264 common renameat sys_renameat | 275 | 264 common renameat __x64_sys_renameat |
| 274 | 265 common linkat sys_linkat | 276 | 265 common linkat __x64_sys_linkat |
| 275 | 266 common symlinkat sys_symlinkat | 277 | 266 common symlinkat __x64_sys_symlinkat |
| 276 | 267 common readlinkat sys_readlinkat | 278 | 267 common readlinkat __x64_sys_readlinkat |
| 277 | 268 common fchmodat sys_fchmodat | 279 | 268 common fchmodat __x64_sys_fchmodat |
| 278 | 269 common faccessat sys_faccessat | 280 | 269 common faccessat __x64_sys_faccessat |
| 279 | 270 common pselect6 sys_pselect6 | 281 | 270 common pselect6 __x64_sys_pselect6 |
| 280 | 271 common ppoll sys_ppoll | 282 | 271 common ppoll __x64_sys_ppoll |
| 281 | 272 common unshare sys_unshare | 283 | 272 common unshare __x64_sys_unshare |
| 282 | 273 64 set_robust_list sys_set_robust_list | 284 | 273 64 set_robust_list __x64_sys_set_robust_list |
| 283 | 274 64 get_robust_list sys_get_robust_list | 285 | 274 64 get_robust_list __x64_sys_get_robust_list |
| 284 | 275 common splice sys_splice | 286 | 275 common splice __x64_sys_splice |
| 285 | 276 common tee sys_tee | 287 | 276 common tee __x64_sys_tee |
| 286 | 277 common sync_file_range sys_sync_file_range | 288 | 277 common sync_file_range __x64_sys_sync_file_range |
| 287 | 278 64 vmsplice sys_vmsplice | 289 | 278 64 vmsplice __x64_sys_vmsplice |
| 288 | 279 64 move_pages sys_move_pages | 290 | 279 64 move_pages __x64_sys_move_pages |
| 289 | 280 common utimensat sys_utimensat | 291 | 280 common utimensat __x64_sys_utimensat |
| 290 | 281 common epoll_pwait sys_epoll_pwait | 292 | 281 common epoll_pwait __x64_sys_epoll_pwait |
| 291 | 282 common signalfd sys_signalfd | 293 | 282 common signalfd __x64_sys_signalfd |
| 292 | 283 common timerfd_create sys_timerfd_create | 294 | 283 common timerfd_create __x64_sys_timerfd_create |
| 293 | 284 common eventfd sys_eventfd | 295 | 284 common eventfd __x64_sys_eventfd |
| 294 | 285 common fallocate sys_fallocate | 296 | 285 common fallocate __x64_sys_fallocate |
| 295 | 286 common timerfd_settime sys_timerfd_settime | 297 | 286 common timerfd_settime __x64_sys_timerfd_settime |
| 296 | 287 common timerfd_gettime sys_timerfd_gettime | 298 | 287 common timerfd_gettime __x64_sys_timerfd_gettime |
| 297 | 288 common accept4 sys_accept4 | 299 | 288 common accept4 __x64_sys_accept4 |
| 298 | 289 common signalfd4 sys_signalfd4 | 300 | 289 common signalfd4 __x64_sys_signalfd4 |
| 299 | 290 common eventfd2 sys_eventfd2 | 301 | 290 common eventfd2 __x64_sys_eventfd2 |
| 300 | 291 common epoll_create1 sys_epoll_create1 | 302 | 291 common epoll_create1 __x64_sys_epoll_create1 |
| 301 | 292 common dup3 sys_dup3 | 303 | 292 common dup3 __x64_sys_dup3 |
| 302 | 293 common pipe2 sys_pipe2 | 304 | 293 common pipe2 __x64_sys_pipe2 |
| 303 | 294 common inotify_init1 sys_inotify_init1 | 305 | 294 common inotify_init1 __x64_sys_inotify_init1 |
| 304 | 295 64 preadv sys_preadv | 306 | 295 64 preadv __x64_sys_preadv |
| 305 | 296 64 pwritev sys_pwritev | 307 | 296 64 pwritev __x64_sys_pwritev |
| 306 | 297 64 rt_tgsigqueueinfo sys_rt_tgsigqueueinfo | 308 | 297 64 rt_tgsigqueueinfo __x64_sys_rt_tgsigqueueinfo |
| 307 | 298 common perf_event_open sys_perf_event_open | 309 | 298 common perf_event_open __x64_sys_perf_event_open |
| 308 | 299 64 recvmmsg sys_recvmmsg | 310 | 299 64 recvmmsg __x64_sys_recvmmsg |
| 309 | 300 common fanotify_init sys_fanotify_init | 311 | 300 common fanotify_init __x64_sys_fanotify_init |
| 310 | 301 common fanotify_mark sys_fanotify_mark | 312 | 301 common fanotify_mark __x64_sys_fanotify_mark |
| 311 | 302 common prlimit64 sys_prlimit64 | 313 | 302 common prlimit64 __x64_sys_prlimit64 |
| 312 | 303 common name_to_handle_at sys_name_to_handle_at | 314 | 303 common name_to_handle_at __x64_sys_name_to_handle_at |
| 313 | 304 common open_by_handle_at sys_open_by_handle_at | 315 | 304 common open_by_handle_at __x64_sys_open_by_handle_at |
| 314 | 305 common clock_adjtime sys_clock_adjtime | 316 | 305 common clock_adjtime __x64_sys_clock_adjtime |
| 315 | 306 common syncfs sys_syncfs | 317 | 306 common syncfs __x64_sys_syncfs |
| 316 | 307 64 sendmmsg sys_sendmmsg | 318 | 307 64 sendmmsg __x64_sys_sendmmsg |
| 317 | 308 common setns sys_setns | 319 | 308 common setns __x64_sys_setns |
| 318 | 309 common getcpu sys_getcpu | 320 | 309 common getcpu __x64_sys_getcpu |
| 319 | 310 64 process_vm_readv sys_process_vm_readv | 321 | 310 64 process_vm_readv __x64_sys_process_vm_readv |
| 320 | 311 64 process_vm_writev sys_process_vm_writev | 322 | 311 64 process_vm_writev __x64_sys_process_vm_writev |
| 321 | 312 common kcmp sys_kcmp | 323 | 312 common kcmp __x64_sys_kcmp |
| 322 | 313 common finit_module sys_finit_module | 324 | 313 common finit_module __x64_sys_finit_module |
| 323 | 314 common sched_setattr sys_sched_setattr | 325 | 314 common sched_setattr __x64_sys_sched_setattr |
| 324 | 315 common sched_getattr sys_sched_getattr | 326 | 315 common sched_getattr __x64_sys_sched_getattr |
| 325 | 316 common renameat2 sys_renameat2 | 327 | 316 common renameat2 __x64_sys_renameat2 |
| 326 | 317 common seccomp sys_seccomp | 328 | 317 common seccomp __x64_sys_seccomp |
| 327 | 318 common getrandom sys_getrandom | 329 | 318 common getrandom __x64_sys_getrandom |
| 328 | 319 common memfd_create sys_memfd_create | 330 | 319 common memfd_create __x64_sys_memfd_create |
| 329 | 320 common kexec_file_load sys_kexec_file_load | 331 | 320 common kexec_file_load __x64_sys_kexec_file_load |
| 330 | 321 common bpf sys_bpf | 332 | 321 common bpf __x64_sys_bpf |
| 331 | 322 64 execveat sys_execveat/ptregs | 333 | 322 64 execveat __x64_sys_execveat/ptregs |
| 332 | 323 common userfaultfd sys_userfaultfd | 334 | 323 common userfaultfd __x64_sys_userfaultfd |
| 333 | 324 common membarrier sys_membarrier | 335 | 324 common membarrier __x64_sys_membarrier |
| 334 | 325 common mlock2 sys_mlock2 | 336 | 325 common mlock2 __x64_sys_mlock2 |
| 335 | 326 common copy_file_range sys_copy_file_range | 337 | 326 common copy_file_range __x64_sys_copy_file_range |
| 336 | 327 64 preadv2 sys_preadv2 | 338 | 327 64 preadv2 __x64_sys_preadv2 |
| 337 | 328 64 pwritev2 sys_pwritev2 | 339 | 328 64 pwritev2 __x64_sys_pwritev2 |
| 338 | 329 common pkey_mprotect sys_pkey_mprotect | 340 | 329 common pkey_mprotect __x64_sys_pkey_mprotect |
| 339 | 330 common pkey_alloc sys_pkey_alloc | 341 | 330 common pkey_alloc __x64_sys_pkey_alloc |
| 340 | 331 common pkey_free sys_pkey_free | 342 | 331 common pkey_free __x64_sys_pkey_free |
| 341 | 332 common statx sys_statx | 343 | 332 common statx __x64_sys_statx |
| 342 | 344 | ||
| 343 | # | 345 | # |
| 344 | # x32-specific system call numbers start at 512 to avoid cache impact | 346 | # x32-specific system call numbers start at 512 to avoid cache impact |
| 345 | # for native 64-bit operation. | 347 | # for native 64-bit operation. The __x32_compat_sys stubs are created |
| 348 | # on-the-fly for compat_sys_*() compatibility system calls if X86_X32 | ||
| 349 | # is defined. | ||
| 346 | # | 350 | # |
| 347 | 512 x32 rt_sigaction compat_sys_rt_sigaction | 351 | 512 x32 rt_sigaction __x32_compat_sys_rt_sigaction |
| 348 | 513 x32 rt_sigreturn sys32_x32_rt_sigreturn | 352 | 513 x32 rt_sigreturn sys32_x32_rt_sigreturn |
| 349 | 514 x32 ioctl compat_sys_ioctl | 353 | 514 x32 ioctl __x32_compat_sys_ioctl |
| 350 | 515 x32 readv compat_sys_readv | 354 | 515 x32 readv __x32_compat_sys_readv |
| 351 | 516 x32 writev compat_sys_writev | 355 | 516 x32 writev __x32_compat_sys_writev |
| 352 | 517 x32 recvfrom compat_sys_recvfrom | 356 | 517 x32 recvfrom __x32_compat_sys_recvfrom |
| 353 | 518 x32 sendmsg compat_sys_sendmsg | 357 | 518 x32 sendmsg __x32_compat_sys_sendmsg |
| 354 | 519 x32 recvmsg compat_sys_recvmsg | 358 | 519 x32 recvmsg __x32_compat_sys_recvmsg |
| 355 | 520 x32 execve compat_sys_execve/ptregs | 359 | 520 x32 execve __x32_compat_sys_execve/ptregs |
| 356 | 521 x32 ptrace compat_sys_ptrace | 360 | 521 x32 ptrace __x32_compat_sys_ptrace |
| 357 | 522 x32 rt_sigpending compat_sys_rt_sigpending | 361 | 522 x32 rt_sigpending __x32_compat_sys_rt_sigpending |
| 358 | 523 x32 rt_sigtimedwait compat_sys_rt_sigtimedwait | 362 | 523 x32 rt_sigtimedwait __x32_compat_sys_rt_sigtimedwait |
| 359 | 524 x32 rt_sigqueueinfo compat_sys_rt_sigqueueinfo | 363 | 524 x32 rt_sigqueueinfo __x32_compat_sys_rt_sigqueueinfo |
| 360 | 525 x32 sigaltstack compat_sys_sigaltstack | 364 | 525 x32 sigaltstack __x32_compat_sys_sigaltstack |
| 361 | 526 x32 timer_create compat_sys_timer_create | 365 | 526 x32 timer_create __x32_compat_sys_timer_create |
| 362 | 527 x32 mq_notify compat_sys_mq_notify | 366 | 527 x32 mq_notify __x32_compat_sys_mq_notify |
| 363 | 528 x32 kexec_load compat_sys_kexec_load | 367 | 528 x32 kexec_load __x32_compat_sys_kexec_load |
| 364 | 529 x32 waitid compat_sys_waitid | 368 | 529 x32 waitid __x32_compat_sys_waitid |
| 365 | 530 x32 set_robust_list compat_sys_set_robust_list | 369 | 530 x32 set_robust_list __x32_compat_sys_set_robust_list |
| 366 | 531 x32 get_robust_list compat_sys_get_robust_list | 370 | 531 x32 get_robust_list __x32_compat_sys_get_robust_list |
| 367 | 532 x32 vmsplice compat_sys_vmsplice | 371 | 532 x32 vmsplice __x32_compat_sys_vmsplice |
| 368 | 533 x32 move_pages compat_sys_move_pages | 372 | 533 x32 move_pages __x32_compat_sys_move_pages |
| 369 | 534 x32 preadv compat_sys_preadv64 | 373 | 534 x32 preadv __x32_compat_sys_preadv64 |
| 370 | 535 x32 pwritev compat_sys_pwritev64 | 374 | 535 x32 pwritev __x32_compat_sys_pwritev64 |
| 371 | 536 x32 rt_tgsigqueueinfo compat_sys_rt_tgsigqueueinfo | 375 | 536 x32 rt_tgsigqueueinfo __x32_compat_sys_rt_tgsigqueueinfo |
| 372 | 537 x32 recvmmsg compat_sys_recvmmsg | 376 | 537 x32 recvmmsg __x32_compat_sys_recvmmsg |
| 373 | 538 x32 sendmmsg compat_sys_sendmmsg | 377 | 538 x32 sendmmsg __x32_compat_sys_sendmmsg |
| 374 | 539 x32 process_vm_readv compat_sys_process_vm_readv | 378 | 539 x32 process_vm_readv __x32_compat_sys_process_vm_readv |
| 375 | 540 x32 process_vm_writev compat_sys_process_vm_writev | 379 | 540 x32 process_vm_writev __x32_compat_sys_process_vm_writev |
| 376 | 541 x32 setsockopt compat_sys_setsockopt | 380 | 541 x32 setsockopt __x32_compat_sys_setsockopt |
| 377 | 542 x32 getsockopt compat_sys_getsockopt | 381 | 542 x32 getsockopt __x32_compat_sys_getsockopt |
| 378 | 543 x32 io_setup compat_sys_io_setup | 382 | 543 x32 io_setup __x32_compat_sys_io_setup |
| 379 | 544 x32 io_submit compat_sys_io_submit | 383 | 544 x32 io_submit __x32_compat_sys_io_submit |
| 380 | 545 x32 execveat compat_sys_execveat/ptregs | 384 | 545 x32 execveat __x32_compat_sys_execveat/ptregs |
| 381 | 546 x32 preadv2 compat_sys_preadv64v2 | 385 | 546 x32 preadv2 __x32_compat_sys_preadv64v2 |
| 382 | 547 x32 pwritev2 compat_sys_pwritev64v2 | 386 | 547 x32 pwritev2 __x32_compat_sys_pwritev64v2 |
diff --git a/arch/x86/entry/syscalls/syscalltbl.sh b/arch/x86/entry/syscalls/syscalltbl.sh index d71ef4bd3615..94fcd1951aca 100644 --- a/arch/x86/entry/syscalls/syscalltbl.sh +++ b/arch/x86/entry/syscalls/syscalltbl.sh | |||
| @@ -25,15 +25,27 @@ emit() { | |||
| 25 | nr="$2" | 25 | nr="$2" |
| 26 | entry="$3" | 26 | entry="$3" |
| 27 | compat="$4" | 27 | compat="$4" |
| 28 | umlentry="" | ||
| 28 | 29 | ||
| 29 | if [ "$abi" = "64" -a -n "$compat" ]; then | 30 | if [ "$abi" = "64" -a -n "$compat" ]; then |
| 30 | echo "a compat entry for a 64-bit syscall makes no sense" >&2 | 31 | echo "a compat entry for a 64-bit syscall makes no sense" >&2 |
| 31 | exit 1 | 32 | exit 1 |
| 32 | fi | 33 | fi |
| 33 | 34 | ||
| 35 | # For CONFIG_UML, we need to strip the __x64_sys prefix | ||
| 36 | if [ "$abi" = "64" -a "${entry}" != "${entry#__x64_sys}" ]; then | ||
| 37 | umlentry="sys${entry#__x64_sys}" | ||
| 38 | fi | ||
| 39 | |||
| 34 | if [ -z "$compat" ]; then | 40 | if [ -z "$compat" ]; then |
| 35 | if [ -n "$entry" ]; then | 41 | if [ -n "$entry" -a -z "$umlentry" ]; then |
| 36 | syscall_macro "$abi" "$nr" "$entry" | 42 | syscall_macro "$abi" "$nr" "$entry" |
| 43 | elif [ -n "$umlentry" ]; then # implies -n "$entry" | ||
| 44 | echo "#ifdef CONFIG_X86" | ||
| 45 | syscall_macro "$abi" "$nr" "$entry" | ||
| 46 | echo "#else /* CONFIG_UML */" | ||
| 47 | syscall_macro "$abi" "$nr" "$umlentry" | ||
| 48 | echo "#endif" | ||
| 37 | fi | 49 | fi |
| 38 | else | 50 | else |
| 39 | echo "#ifdef CONFIG_X86_32" | 51 | echo "#ifdef CONFIG_X86_32" |
diff --git a/arch/x86/entry/vsyscall/vsyscall_64.c b/arch/x86/entry/vsyscall/vsyscall_64.c index 317be365bce3..70b7845434cb 100644 --- a/arch/x86/entry/vsyscall/vsyscall_64.c +++ b/arch/x86/entry/vsyscall/vsyscall_64.c | |||
| @@ -127,6 +127,7 @@ bool emulate_vsyscall(struct pt_regs *regs, unsigned long address) | |||
| 127 | int vsyscall_nr, syscall_nr, tmp; | 127 | int vsyscall_nr, syscall_nr, tmp; |
| 128 | int prev_sig_on_uaccess_err; | 128 | int prev_sig_on_uaccess_err; |
| 129 | long ret; | 129 | long ret; |
| 130 | unsigned long orig_dx; | ||
| 130 | 131 | ||
| 131 | /* | 132 | /* |
| 132 | * No point in checking CS -- the only way to get here is a user mode | 133 | * No point in checking CS -- the only way to get here is a user mode |
| @@ -227,19 +228,22 @@ bool emulate_vsyscall(struct pt_regs *regs, unsigned long address) | |||
| 227 | ret = -EFAULT; | 228 | ret = -EFAULT; |
| 228 | switch (vsyscall_nr) { | 229 | switch (vsyscall_nr) { |
| 229 | case 0: | 230 | case 0: |
| 230 | ret = sys_gettimeofday( | 231 | /* this decodes regs->di and regs->si on its own */ |
| 231 | (struct timeval __user *)regs->di, | 232 | ret = __x64_sys_gettimeofday(regs); |
| 232 | (struct timezone __user *)regs->si); | ||
| 233 | break; | 233 | break; |
| 234 | 234 | ||
| 235 | case 1: | 235 | case 1: |
| 236 | ret = sys_time((time_t __user *)regs->di); | 236 | /* this decodes regs->di on its own */ |
| 237 | ret = __x64_sys_time(regs); | ||
| 237 | break; | 238 | break; |
| 238 | 239 | ||
| 239 | case 2: | 240 | case 2: |
| 240 | ret = sys_getcpu((unsigned __user *)regs->di, | 241 | /* while we could clobber regs->dx, we didn't in the past... */ |
| 241 | (unsigned __user *)regs->si, | 242 | orig_dx = regs->dx; |
| 242 | NULL); | 243 | regs->dx = 0; |
| 244 | /* this decodes regs->di, regs->si and regs->dx on its own */ | ||
| 245 | ret = __x64_sys_getcpu(regs); | ||
| 246 | regs->dx = orig_dx; | ||
| 243 | break; | 247 | break; |
| 244 | } | 248 | } |
| 245 | 249 | ||
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 40a3d3642f3a..08acd954f00e 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
| @@ -313,7 +313,7 @@ struct apic { | |||
| 313 | /* Probe, setup and smpboot functions */ | 313 | /* Probe, setup and smpboot functions */ |
| 314 | int (*probe)(void); | 314 | int (*probe)(void); |
| 315 | int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); | 315 | int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); |
| 316 | int (*apic_id_valid)(int apicid); | 316 | int (*apic_id_valid)(u32 apicid); |
| 317 | int (*apic_id_registered)(void); | 317 | int (*apic_id_registered)(void); |
| 318 | 318 | ||
| 319 | bool (*check_apicid_used)(physid_mask_t *map, int apicid); | 319 | bool (*check_apicid_used)(physid_mask_t *map, int apicid); |
| @@ -486,7 +486,7 @@ static inline unsigned int read_apic_id(void) | |||
| 486 | return apic->get_apic_id(reg); | 486 | return apic->get_apic_id(reg); |
| 487 | } | 487 | } |
| 488 | 488 | ||
| 489 | extern int default_apic_id_valid(int apicid); | 489 | extern int default_apic_id_valid(u32 apicid); |
| 490 | extern int default_acpi_madt_oem_check(char *, char *); | 490 | extern int default_acpi_madt_oem_check(char *, char *); |
| 491 | extern void default_setup_apic_routing(void); | 491 | extern void default_setup_apic_routing(void); |
| 492 | 492 | ||
diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h index 03eedc21246d..d653139857af 100644 --- a/arch/x86/include/asm/syscall.h +++ b/arch/x86/include/asm/syscall.h | |||
| @@ -20,9 +20,13 @@ | |||
| 20 | #include <asm/thread_info.h> /* for TS_COMPAT */ | 20 | #include <asm/thread_info.h> /* for TS_COMPAT */ |
| 21 | #include <asm/unistd.h> | 21 | #include <asm/unistd.h> |
| 22 | 22 | ||
| 23 | #ifdef CONFIG_X86_64 | ||
| 24 | typedef asmlinkage long (*sys_call_ptr_t)(const struct pt_regs *); | ||
| 25 | #else | ||
| 23 | typedef asmlinkage long (*sys_call_ptr_t)(unsigned long, unsigned long, | 26 | typedef asmlinkage long (*sys_call_ptr_t)(unsigned long, unsigned long, |
| 24 | unsigned long, unsigned long, | 27 | unsigned long, unsigned long, |
| 25 | unsigned long, unsigned long); | 28 | unsigned long, unsigned long); |
| 29 | #endif /* CONFIG_X86_64 */ | ||
| 26 | extern const sys_call_ptr_t sys_call_table[]; | 30 | extern const sys_call_ptr_t sys_call_table[]; |
| 27 | 31 | ||
| 28 | #if defined(CONFIG_X86_32) | 32 | #if defined(CONFIG_X86_32) |
diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h new file mode 100644 index 000000000000..e046a405743d --- /dev/null +++ b/arch/x86/include/asm/syscall_wrapper.h | |||
| @@ -0,0 +1,209 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
| 2 | /* | ||
| 3 | * syscall_wrapper.h - x86 specific wrappers to syscall definitions | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef _ASM_X86_SYSCALL_WRAPPER_H | ||
| 7 | #define _ASM_X86_SYSCALL_WRAPPER_H | ||
| 8 | |||
| 9 | /* Mapping of registers to parameters for syscalls on x86-64 and x32 */ | ||
| 10 | #define SC_X86_64_REGS_TO_ARGS(x, ...) \ | ||
| 11 | __MAP(x,__SC_ARGS \ | ||
| 12 | ,,regs->di,,regs->si,,regs->dx \ | ||
| 13 | ,,regs->r10,,regs->r8,,regs->r9) \ | ||
| 14 | |||
| 15 | /* Mapping of registers to parameters for syscalls on i386 */ | ||
| 16 | #define SC_IA32_REGS_TO_ARGS(x, ...) \ | ||
| 17 | __MAP(x,__SC_ARGS \ | ||
| 18 | ,,(unsigned int)regs->bx,,(unsigned int)regs->cx \ | ||
| 19 | ,,(unsigned int)regs->dx,,(unsigned int)regs->si \ | ||
| 20 | ,,(unsigned int)regs->di,,(unsigned int)regs->bp) | ||
| 21 | |||
| 22 | #ifdef CONFIG_IA32_EMULATION | ||
| 23 | /* | ||
| 24 | * For IA32 emulation, we need to handle "compat" syscalls *and* create | ||
| 25 | * additional wrappers (aptly named __ia32_sys_xyzzy) which decode the | ||
| 26 | * ia32 regs in the proper order for shared or "common" syscalls. As some | ||
| 27 | * syscalls may not be implemented, we need to expand COND_SYSCALL in | ||
| 28 | * kernel/sys_ni.c and SYS_NI in kernel/time/posix-stubs.c to cover this | ||
| 29 | * case as well. | ||
| 30 | */ | ||
| 31 | #define __IA32_COMPAT_SYS_STUBx(x, name, ...) \ | ||
| 32 | asmlinkage long __ia32_compat_sys##name(const struct pt_regs *regs);\ | ||
| 33 | ALLOW_ERROR_INJECTION(__ia32_compat_sys##name, ERRNO); \ | ||
| 34 | asmlinkage long __ia32_compat_sys##name(const struct pt_regs *regs)\ | ||
| 35 | { \ | ||
| 36 | return __se_compat_sys##name(SC_IA32_REGS_TO_ARGS(x,__VA_ARGS__));\ | ||
| 37 | } \ | ||
| 38 | |||
| 39 | #define __IA32_SYS_STUBx(x, name, ...) \ | ||
| 40 | asmlinkage long __ia32_sys##name(const struct pt_regs *regs); \ | ||
| 41 | ALLOW_ERROR_INJECTION(__ia32_sys##name, ERRNO); \ | ||
| 42 | asmlinkage long __ia32_sys##name(const struct pt_regs *regs) \ | ||
| 43 | { \ | ||
| 44 | return __se_sys##name(SC_IA32_REGS_TO_ARGS(x,__VA_ARGS__));\ | ||
| 45 | } | ||
| 46 | |||
| 47 | /* | ||
| 48 | * To keep the naming coherent, re-define SYSCALL_DEFINE0 to create an alias | ||
| 49 | * named __ia32_sys_*() | ||
| 50 | */ | ||
| 51 | #define SYSCALL_DEFINE0(sname) \ | ||
| 52 | SYSCALL_METADATA(_##sname, 0); \ | ||
| 53 | asmlinkage long __x64_sys_##sname(void); \ | ||
| 54 | ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \ | ||
| 55 | SYSCALL_ALIAS(__ia32_sys_##sname, __x64_sys_##sname); \ | ||
| 56 | asmlinkage long __x64_sys_##sname(void) | ||
| 57 | |||
| 58 | #define COND_SYSCALL(name) \ | ||
| 59 | cond_syscall(__x64_sys_##name); \ | ||
| 60 | cond_syscall(__ia32_sys_##name) | ||
| 61 | |||
| 62 | #define SYS_NI(name) \ | ||
| 63 | SYSCALL_ALIAS(__x64_sys_##name, sys_ni_posix_timers); \ | ||
| 64 | SYSCALL_ALIAS(__ia32_sys_##name, sys_ni_posix_timers) | ||
| 65 | |||
| 66 | #else /* CONFIG_IA32_EMULATION */ | ||
| 67 | #define __IA32_COMPAT_SYS_STUBx(x, name, ...) | ||
| 68 | #define __IA32_SYS_STUBx(x, fullname, name, ...) | ||
| 69 | #endif /* CONFIG_IA32_EMULATION */ | ||
| 70 | |||
| 71 | |||
| 72 | #ifdef CONFIG_X86_X32 | ||
| 73 | /* | ||
| 74 | * For the x32 ABI, we need to create a stub for compat_sys_*() which is aware | ||
| 75 | * of the x86-64-style parameter ordering of x32 syscalls. The syscalls common | ||
| 76 | * with x86_64 obviously do not need such care. | ||
| 77 | */ | ||
| 78 | #define __X32_COMPAT_SYS_STUBx(x, name, ...) \ | ||
| 79 | asmlinkage long __x32_compat_sys##name(const struct pt_regs *regs);\ | ||
| 80 | ALLOW_ERROR_INJECTION(__x32_compat_sys##name, ERRNO); \ | ||
| 81 | asmlinkage long __x32_compat_sys##name(const struct pt_regs *regs)\ | ||
| 82 | { \ | ||
| 83 | return __se_compat_sys##name(SC_X86_64_REGS_TO_ARGS(x,__VA_ARGS__));\ | ||
| 84 | } \ | ||
| 85 | |||
| 86 | #else /* CONFIG_X86_X32 */ | ||
| 87 | #define __X32_COMPAT_SYS_STUBx(x, name, ...) | ||
| 88 | #endif /* CONFIG_X86_X32 */ | ||
| 89 | |||
| 90 | |||
| 91 | #ifdef CONFIG_COMPAT | ||
| 92 | /* | ||
| 93 | * Compat means IA32_EMULATION and/or X86_X32. As they use a different | ||
| 94 | * mapping of registers to parameters, we need to generate stubs for each | ||
| 95 | * of them. | ||
| 96 | */ | ||
| 97 | #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ | ||
| 98 | static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ | ||
| 99 | static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ | ||
| 100 | __IA32_COMPAT_SYS_STUBx(x, name, __VA_ARGS__) \ | ||
| 101 | __X32_COMPAT_SYS_STUBx(x, name, __VA_ARGS__) \ | ||
| 102 | static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ | ||
| 103 | { \ | ||
| 104 | return __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\ | ||
| 105 | } \ | ||
| 106 | static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | ||
| 107 | |||
| 108 | /* | ||
| 109 | * As some compat syscalls may not be implemented, we need to expand | ||
| 110 | * COND_SYSCALL_COMPAT in kernel/sys_ni.c and COMPAT_SYS_NI in | ||
| 111 | * kernel/time/posix-stubs.c to cover this case as well. | ||
| 112 | */ | ||
| 113 | #define COND_SYSCALL_COMPAT(name) \ | ||
| 114 | cond_syscall(__ia32_compat_sys_##name); \ | ||
| 115 | cond_syscall(__x32_compat_sys_##name) | ||
| 116 | |||
| 117 | #define COMPAT_SYS_NI(name) \ | ||
| 118 | SYSCALL_ALIAS(__ia32_compat_sys_##name, sys_ni_posix_timers); \ | ||
| 119 | SYSCALL_ALIAS(__x32_compat_sys_##name, sys_ni_posix_timers) | ||
| 120 | |||
| 121 | #endif /* CONFIG_COMPAT */ | ||
| 122 | |||
| 123 | |||
| 124 | /* | ||
| 125 | * Instead of the generic __SYSCALL_DEFINEx() definition, this macro takes | ||
| 126 | * struct pt_regs *regs as the only argument of the syscall stub named | ||
| 127 | * __x64_sys_*(). It decodes just the registers it needs and passes them on to | ||
| 128 | * the __se_sys_*() wrapper performing sign extension and then to the | ||
| 129 | * __do_sys_*() function doing the actual job. These wrappers and functions | ||
| 130 | * are inlined (at least in very most cases), meaning that the assembly looks | ||
| 131 | * as follows (slightly re-ordered for better readability): | ||
| 132 | * | ||
| 133 | * <__x64_sys_recv>: <-- syscall with 4 parameters | ||
| 134 | * callq <__fentry__> | ||
| 135 | * | ||
| 136 | * mov 0x70(%rdi),%rdi <-- decode regs->di | ||
| 137 | * mov 0x68(%rdi),%rsi <-- decode regs->si | ||
| 138 | * mov 0x60(%rdi),%rdx <-- decode regs->dx | ||
| 139 | * mov 0x38(%rdi),%rcx <-- decode regs->r10 | ||
| 140 | * | ||
| 141 | * xor %r9d,%r9d <-- clear %r9 | ||
| 142 | * xor %r8d,%r8d <-- clear %r8 | ||
| 143 | * | ||
| 144 | * callq __sys_recvfrom <-- do the actual work in __sys_recvfrom() | ||
| 145 | * which takes 6 arguments | ||
| 146 | * | ||
| 147 | * cltq <-- extend return value to 64-bit | ||
| 148 | * retq <-- return | ||
| 149 | * | ||
| 150 | * This approach avoids leaking random user-provided register content down | ||
| 151 | * the call chain. | ||
| 152 | * | ||
| 153 | * If IA32_EMULATION is enabled, this macro generates an additional wrapper | ||
| 154 | * named __ia32_sys_*() which decodes the struct pt_regs *regs according | ||
| 155 | * to the i386 calling convention (bx, cx, dx, si, di, bp). | ||
| 156 | */ | ||
| 157 | #define __SYSCALL_DEFINEx(x, name, ...) \ | ||
| 158 | asmlinkage long __x64_sys##name(const struct pt_regs *regs); \ | ||
| 159 | ALLOW_ERROR_INJECTION(__x64_sys##name, ERRNO); \ | ||
| 160 | static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ | ||
| 161 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ | ||
| 162 | asmlinkage long __x64_sys##name(const struct pt_regs *regs) \ | ||
| 163 | { \ | ||
| 164 | return __se_sys##name(SC_X86_64_REGS_TO_ARGS(x,__VA_ARGS__));\ | ||
| 165 | } \ | ||
| 166 | __IA32_SYS_STUBx(x, name, __VA_ARGS__) \ | ||
| 167 | static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ | ||
| 168 | { \ | ||
| 169 | long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));\ | ||
| 170 | __MAP(x,__SC_TEST,__VA_ARGS__); \ | ||
| 171 | __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \ | ||
| 172 | return ret; \ | ||
| 173 | } \ | ||
| 174 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | ||
| 175 | |||
| 176 | /* | ||
| 177 | * As the generic SYSCALL_DEFINE0() macro does not decode any parameters for | ||
| 178 | * obvious reasons, and passing struct pt_regs *regs to it in %rdi does not | ||
| 179 | * hurt, we only need to re-define it here to keep the naming congruent to | ||
| 180 | * SYSCALL_DEFINEx() -- which is essential for the COND_SYSCALL() and SYS_NI() | ||
| 181 | * macros to work correctly. | ||
| 182 | */ | ||
| 183 | #ifndef SYSCALL_DEFINE0 | ||
| 184 | #define SYSCALL_DEFINE0(sname) \ | ||
| 185 | SYSCALL_METADATA(_##sname, 0); \ | ||
| 186 | asmlinkage long __x64_sys_##sname(void); \ | ||
| 187 | ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \ | ||
| 188 | asmlinkage long __x64_sys_##sname(void) | ||
| 189 | #endif | ||
| 190 | |||
| 191 | #ifndef COND_SYSCALL | ||
| 192 | #define COND_SYSCALL(name) cond_syscall(__x64_sys_##name) | ||
| 193 | #endif | ||
| 194 | |||
| 195 | #ifndef SYS_NI | ||
| 196 | #define SYS_NI(name) SYSCALL_ALIAS(__x64_sys_##name, sys_ni_posix_timers); | ||
| 197 | #endif | ||
| 198 | |||
| 199 | |||
| 200 | /* | ||
| 201 | * For VSYSCALLS, we need to declare these three syscalls with the new | ||
| 202 | * pt_regs-based calling convention for in-kernel use. | ||
| 203 | */ | ||
| 204 | struct pt_regs; | ||
| 205 | asmlinkage long __x64_sys_getcpu(const struct pt_regs *regs); | ||
| 206 | asmlinkage long __x64_sys_gettimeofday(const struct pt_regs *regs); | ||
| 207 | asmlinkage long __x64_sys_time(const struct pt_regs *regs); | ||
| 208 | |||
| 209 | #endif /* _ASM_X86_SYSCALL_WRAPPER_H */ | ||
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index ae6e05fdc24b..9fa979dd0d9d 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
| @@ -18,6 +18,12 @@ | |||
| 18 | /* Common in X86_32 and X86_64 */ | 18 | /* Common in X86_32 and X86_64 */ |
| 19 | /* kernel/ioport.c */ | 19 | /* kernel/ioport.c */ |
| 20 | long ksys_ioperm(unsigned long from, unsigned long num, int turn_on); | 20 | long ksys_ioperm(unsigned long from, unsigned long num, int turn_on); |
| 21 | |||
| 22 | #ifdef CONFIG_X86_32 | ||
| 23 | /* | ||
| 24 | * These definitions are only valid on pure 32-bit systems; x86-64 uses a | ||
| 25 | * different syscall calling convention | ||
| 26 | */ | ||
| 21 | asmlinkage long sys_ioperm(unsigned long, unsigned long, int); | 27 | asmlinkage long sys_ioperm(unsigned long, unsigned long, int); |
| 22 | asmlinkage long sys_iopl(unsigned int); | 28 | asmlinkage long sys_iopl(unsigned int); |
| 23 | 29 | ||
| @@ -32,7 +38,6 @@ asmlinkage long sys_set_thread_area(struct user_desc __user *); | |||
| 32 | asmlinkage long sys_get_thread_area(struct user_desc __user *); | 38 | asmlinkage long sys_get_thread_area(struct user_desc __user *); |
| 33 | 39 | ||
| 34 | /* X86_32 only */ | 40 | /* X86_32 only */ |
| 35 | #ifdef CONFIG_X86_32 | ||
| 36 | 41 | ||
| 37 | /* kernel/signal.c */ | 42 | /* kernel/signal.c */ |
| 38 | asmlinkage long sys_sigreturn(void); | 43 | asmlinkage long sys_sigreturn(void); |
| @@ -42,15 +47,5 @@ struct vm86_struct; | |||
| 42 | asmlinkage long sys_vm86old(struct vm86_struct __user *); | 47 | asmlinkage long sys_vm86old(struct vm86_struct __user *); |
| 43 | asmlinkage long sys_vm86(unsigned long, unsigned long); | 48 | asmlinkage long sys_vm86(unsigned long, unsigned long); |
| 44 | 49 | ||
| 45 | #else /* CONFIG_X86_32 */ | ||
| 46 | |||
| 47 | /* X86_64 only */ | ||
| 48 | /* kernel/process_64.c */ | ||
| 49 | asmlinkage long sys_arch_prctl(int, unsigned long); | ||
| 50 | |||
| 51 | /* kernel/sys_x86_64.c */ | ||
| 52 | asmlinkage long sys_mmap(unsigned long, unsigned long, unsigned long, | ||
| 53 | unsigned long, unsigned long, unsigned long); | ||
| 54 | |||
| 55 | #endif /* CONFIG_X86_32 */ | 50 | #endif /* CONFIG_X86_32 */ |
| 56 | #endif /* _ASM_X86_SYSCALLS_H */ | 51 | #endif /* _ASM_X86_SYSCALLS_H */ |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 7a37d9357bc4..dde444f932c1 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
| @@ -200,7 +200,7 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end) | |||
| 200 | { | 200 | { |
| 201 | struct acpi_madt_local_x2apic *processor = NULL; | 201 | struct acpi_madt_local_x2apic *processor = NULL; |
| 202 | #ifdef CONFIG_X86_X2APIC | 202 | #ifdef CONFIG_X86_X2APIC |
| 203 | int apic_id; | 203 | u32 apic_id; |
| 204 | u8 enabled; | 204 | u8 enabled; |
| 205 | #endif | 205 | #endif |
| 206 | 206 | ||
| @@ -222,10 +222,13 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end) | |||
| 222 | * to not preallocating memory for all NR_CPUS | 222 | * to not preallocating memory for all NR_CPUS |
| 223 | * when we use CPU hotplug. | 223 | * when we use CPU hotplug. |
| 224 | */ | 224 | */ |
| 225 | if (!apic->apic_id_valid(apic_id) && enabled) | 225 | if (!apic->apic_id_valid(apic_id)) { |
| 226 | printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); | 226 | if (enabled) |
| 227 | else | 227 | pr_warn(PREFIX "x2apic entry ignored\n"); |
| 228 | acpi_register_lapic(apic_id, processor->uid, enabled); | 228 | return 0; |
| 229 | } | ||
| 230 | |||
| 231 | acpi_register_lapic(apic_id, processor->uid, enabled); | ||
| 229 | #else | 232 | #else |
| 230 | printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); | 233 | printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); |
| 231 | #endif | 234 | #endif |
diff --git a/arch/x86/kernel/apic/apic_common.c b/arch/x86/kernel/apic/apic_common.c index a360801779ae..02b4839478b1 100644 --- a/arch/x86/kernel/apic/apic_common.c +++ b/arch/x86/kernel/apic/apic_common.c | |||
| @@ -40,7 +40,7 @@ int default_check_phys_apicid_present(int phys_apicid) | |||
| 40 | return physid_isset(phys_apicid, phys_cpu_present_map); | 40 | return physid_isset(phys_apicid, phys_cpu_present_map); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | int default_apic_id_valid(int apicid) | 43 | int default_apic_id_valid(u32 apicid) |
| 44 | { | 44 | { |
| 45 | return (apicid < 255); | 45 | return (apicid < 255); |
| 46 | } | 46 | } |
diff --git a/arch/x86/kernel/apic/apic_numachip.c b/arch/x86/kernel/apic/apic_numachip.c index 134e04506ab4..78778b54f904 100644 --- a/arch/x86/kernel/apic/apic_numachip.c +++ b/arch/x86/kernel/apic/apic_numachip.c | |||
| @@ -56,7 +56,7 @@ static u32 numachip2_set_apic_id(unsigned int id) | |||
| 56 | return id << 24; | 56 | return id << 24; |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | static int numachip_apic_id_valid(int apicid) | 59 | static int numachip_apic_id_valid(u32 apicid) |
| 60 | { | 60 | { |
| 61 | /* Trust what bootloader passes in MADT */ | 61 | /* Trust what bootloader passes in MADT */ |
| 62 | return 1; | 62 | return 1; |
diff --git a/arch/x86/kernel/apic/x2apic.h b/arch/x86/kernel/apic/x2apic.h index b107de381cb5..a49b3604027f 100644 --- a/arch/x86/kernel/apic/x2apic.h +++ b/arch/x86/kernel/apic/x2apic.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* Common bits for X2APIC cluster/physical modes. */ | 1 | /* Common bits for X2APIC cluster/physical modes. */ |
| 2 | 2 | ||
| 3 | int x2apic_apic_id_valid(int apicid); | 3 | int x2apic_apic_id_valid(u32 apicid); |
| 4 | int x2apic_apic_id_registered(void); | 4 | int x2apic_apic_id_registered(void); |
| 5 | void __x2apic_send_IPI_dest(unsigned int apicid, int vector, unsigned int dest); | 5 | void __x2apic_send_IPI_dest(unsigned int apicid, int vector, unsigned int dest); |
| 6 | unsigned int x2apic_get_apic_id(unsigned long id); | 6 | unsigned int x2apic_get_apic_id(unsigned long id); |
diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c index e2829bf40e4a..b5cf9e7b3830 100644 --- a/arch/x86/kernel/apic/x2apic_phys.c +++ b/arch/x86/kernel/apic/x2apic_phys.c | |||
| @@ -101,7 +101,7 @@ static int x2apic_phys_probe(void) | |||
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | /* Common x2apic functions, also used by x2apic_cluster */ | 103 | /* Common x2apic functions, also used by x2apic_cluster */ |
| 104 | int x2apic_apic_id_valid(int apicid) | 104 | int x2apic_apic_id_valid(u32 apicid) |
| 105 | { | 105 | { |
| 106 | return 1; | 106 | return 1; |
| 107 | } | 107 | } |
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c index f11910b44638..efaf2d4f9c3c 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c | |||
| @@ -557,7 +557,7 @@ static void uv_send_IPI_all(int vector) | |||
| 557 | uv_send_IPI_mask(cpu_online_mask, vector); | 557 | uv_send_IPI_mask(cpu_online_mask, vector); |
| 558 | } | 558 | } |
| 559 | 559 | ||
| 560 | static int uv_apic_id_valid(int apicid) | 560 | static int uv_apic_id_valid(u32 apicid) |
| 561 | { | 561 | { |
| 562 | return 1; | 562 | return 1; |
| 563 | } | 563 | } |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 4702fbd98f92..8a5b185735e1 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
| @@ -848,18 +848,6 @@ void get_cpu_cap(struct cpuinfo_x86 *c) | |||
| 848 | c->x86_power = edx; | 848 | c->x86_power = edx; |
| 849 | } | 849 | } |
| 850 | 850 | ||
| 851 | if (c->extended_cpuid_level >= 0x80000008) { | ||
| 852 | cpuid(0x80000008, &eax, &ebx, &ecx, &edx); | ||
| 853 | |||
| 854 | c->x86_virt_bits = (eax >> 8) & 0xff; | ||
| 855 | c->x86_phys_bits = eax & 0xff; | ||
| 856 | c->x86_capability[CPUID_8000_0008_EBX] = ebx; | ||
| 857 | } | ||
| 858 | #ifdef CONFIG_X86_32 | ||
| 859 | else if (cpu_has(c, X86_FEATURE_PAE) || cpu_has(c, X86_FEATURE_PSE36)) | ||
| 860 | c->x86_phys_bits = 36; | ||
| 861 | #endif | ||
| 862 | |||
| 863 | if (c->extended_cpuid_level >= 0x8000000a) | 851 | if (c->extended_cpuid_level >= 0x8000000a) |
| 864 | c->x86_capability[CPUID_8000_000A_EDX] = cpuid_edx(0x8000000a); | 852 | c->x86_capability[CPUID_8000_000A_EDX] = cpuid_edx(0x8000000a); |
| 865 | 853 | ||
| @@ -874,6 +862,23 @@ void get_cpu_cap(struct cpuinfo_x86 *c) | |||
| 874 | apply_forced_caps(c); | 862 | apply_forced_caps(c); |
| 875 | } | 863 | } |
| 876 | 864 | ||
| 865 | static void get_cpu_address_sizes(struct cpuinfo_x86 *c) | ||
| 866 | { | ||
| 867 | u32 eax, ebx, ecx, edx; | ||
| 868 | |||
| 869 | if (c->extended_cpuid_level >= 0x80000008) { | ||
| 870 | cpuid(0x80000008, &eax, &ebx, &ecx, &edx); | ||
| 871 | |||
| 872 | c->x86_virt_bits = (eax >> 8) & 0xff; | ||
| 873 | c->x86_phys_bits = eax & 0xff; | ||
| 874 | c->x86_capability[CPUID_8000_0008_EBX] = ebx; | ||
| 875 | } | ||
| 876 | #ifdef CONFIG_X86_32 | ||
| 877 | else if (cpu_has(c, X86_FEATURE_PAE) || cpu_has(c, X86_FEATURE_PSE36)) | ||
| 878 | c->x86_phys_bits = 36; | ||
| 879 | #endif | ||
| 880 | } | ||
| 881 | |||
| 877 | static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c) | 882 | static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c) |
| 878 | { | 883 | { |
| 879 | #ifdef CONFIG_X86_32 | 884 | #ifdef CONFIG_X86_32 |
| @@ -965,6 +970,7 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) | |||
| 965 | cpu_detect(c); | 970 | cpu_detect(c); |
| 966 | get_cpu_vendor(c); | 971 | get_cpu_vendor(c); |
| 967 | get_cpu_cap(c); | 972 | get_cpu_cap(c); |
| 973 | get_cpu_address_sizes(c); | ||
| 968 | setup_force_cpu_cap(X86_FEATURE_CPUID); | 974 | setup_force_cpu_cap(X86_FEATURE_CPUID); |
| 969 | 975 | ||
| 970 | if (this_cpu->c_early_init) | 976 | if (this_cpu->c_early_init) |
| @@ -1097,6 +1103,8 @@ static void generic_identify(struct cpuinfo_x86 *c) | |||
| 1097 | 1103 | ||
| 1098 | get_cpu_cap(c); | 1104 | get_cpu_cap(c); |
| 1099 | 1105 | ||
| 1106 | get_cpu_address_sizes(c); | ||
| 1107 | |||
| 1100 | if (c->cpuid_level >= 0x00000001) { | 1108 | if (c->cpuid_level >= 0x00000001) { |
| 1101 | c->initial_apicid = (cpuid_ebx(1) >> 24) & 0xFF; | 1109 | c->initial_apicid = (cpuid_ebx(1) >> 24) & 0xFF; |
| 1102 | #ifdef CONFIG_X86_32 | 1110 | #ifdef CONFIG_X86_32 |
diff --git a/arch/x86/kernel/cpu/cpuid-deps.c b/arch/x86/kernel/cpu/cpuid-deps.c index 904b0a3c4e53..2c0bd38a44ab 100644 --- a/arch/x86/kernel/cpu/cpuid-deps.c +++ b/arch/x86/kernel/cpu/cpuid-deps.c | |||
| @@ -19,7 +19,7 @@ struct cpuid_dep { | |||
| 19 | * called from cpu hotplug. It shouldn't do anything in this case, | 19 | * called from cpu hotplug. It shouldn't do anything in this case, |
| 20 | * but it's difficult to tell that to the init reference checker. | 20 | * but it's difficult to tell that to the init reference checker. |
| 21 | */ | 21 | */ |
| 22 | const static struct cpuid_dep cpuid_deps[] = { | 22 | static const struct cpuid_dep cpuid_deps[] = { |
| 23 | { X86_FEATURE_XSAVEOPT, X86_FEATURE_XSAVE }, | 23 | { X86_FEATURE_XSAVEOPT, X86_FEATURE_XSAVE }, |
| 24 | { X86_FEATURE_XSAVEC, X86_FEATURE_XSAVE }, | 24 | { X86_FEATURE_XSAVEC, X86_FEATURE_XSAVE }, |
| 25 | { X86_FEATURE_XSAVES, X86_FEATURE_XSAVE }, | 25 | { X86_FEATURE_XSAVES, X86_FEATURE_XSAVE }, |
diff --git a/arch/x86/xen/apic.c b/arch/x86/xen/apic.c index 2163888497d3..5e53bfbe5823 100644 --- a/arch/x86/xen/apic.c +++ b/arch/x86/xen/apic.c | |||
| @@ -112,7 +112,7 @@ static int xen_madt_oem_check(char *oem_id, char *oem_table_id) | |||
| 112 | return xen_pv_domain(); | 112 | return xen_pv_domain(); |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | static int xen_id_always_valid(int apicid) | 115 | static int xen_id_always_valid(u32 apicid) |
| 116 | { | 116 | { |
| 117 | return 1; | 117 | return 1; |
| 118 | } | 118 | } |
diff --git a/include/linux/compat.h b/include/linux/compat.h index f188eab10570..081281ad5772 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -24,6 +24,17 @@ | |||
| 24 | #include <asm/siginfo.h> | 24 | #include <asm/siginfo.h> |
| 25 | #include <asm/signal.h> | 25 | #include <asm/signal.h> |
| 26 | 26 | ||
| 27 | #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 28 | /* | ||
| 29 | * It may be useful for an architecture to override the definitions of the | ||
| 30 | * COMPAT_SYSCALL_DEFINE0 and COMPAT_SYSCALL_DEFINEx() macros, in particular | ||
| 31 | * to use a different calling convention for syscalls. To allow for that, | ||
| 32 | + the prototypes for the compat_sys_*() functions below will *not* be included | ||
| 33 | * if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 34 | */ | ||
| 35 | #include <asm/syscall_wrapper.h> | ||
| 36 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 37 | |||
| 27 | #ifndef COMPAT_USE_64BIT_TIME | 38 | #ifndef COMPAT_USE_64BIT_TIME |
| 28 | #define COMPAT_USE_64BIT_TIME 0 | 39 | #define COMPAT_USE_64BIT_TIME 0 |
| 29 | #endif | 40 | #endif |
| @@ -32,10 +43,12 @@ | |||
| 32 | #define __SC_DELOUSE(t,v) ((__force t)(unsigned long)(v)) | 43 | #define __SC_DELOUSE(t,v) ((__force t)(unsigned long)(v)) |
| 33 | #endif | 44 | #endif |
| 34 | 45 | ||
| 46 | #ifndef COMPAT_SYSCALL_DEFINE0 | ||
| 35 | #define COMPAT_SYSCALL_DEFINE0(name) \ | 47 | #define COMPAT_SYSCALL_DEFINE0(name) \ |
| 36 | asmlinkage long compat_sys_##name(void); \ | 48 | asmlinkage long compat_sys_##name(void); \ |
| 37 | ALLOW_ERROR_INJECTION(compat_sys_##name, ERRNO); \ | 49 | ALLOW_ERROR_INJECTION(compat_sys_##name, ERRNO); \ |
| 38 | asmlinkage long compat_sys_##name(void) | 50 | asmlinkage long compat_sys_##name(void) |
| 51 | #endif /* COMPAT_SYSCALL_DEFINE0 */ | ||
| 39 | 52 | ||
| 40 | #define COMPAT_SYSCALL_DEFINE1(name, ...) \ | 53 | #define COMPAT_SYSCALL_DEFINE1(name, ...) \ |
| 41 | COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) | 54 | COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) |
| @@ -50,18 +63,25 @@ | |||
| 50 | #define COMPAT_SYSCALL_DEFINE6(name, ...) \ | 63 | #define COMPAT_SYSCALL_DEFINE6(name, ...) \ |
| 51 | COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) | 64 | COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) |
| 52 | 65 | ||
| 53 | #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ | 66 | /* |
| 54 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ | 67 | * The asmlinkage stub is aliased to a function named __se_compat_sys_*() which |
| 55 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))\ | 68 | * sign-extends 32-bit ints to longs whenever needed. The actual work is |
| 56 | __attribute__((alias(__stringify(compat_SyS##name)))); \ | 69 | * done within __do_compat_sys_*(). |
| 57 | ALLOW_ERROR_INJECTION(compat_sys##name, ERRNO); \ | 70 | */ |
| 58 | static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ | 71 | #ifndef COMPAT_SYSCALL_DEFINEx |
| 59 | asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__));\ | 72 | #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ |
| 60 | asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))\ | 73 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ |
| 61 | { \ | 74 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ |
| 62 | return C_SYSC##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__)); \ | 75 | __attribute__((alias(__stringify(__se_compat_sys##name)))); \ |
| 63 | } \ | 76 | ALLOW_ERROR_INJECTION(compat_sys##name, ERRNO); \ |
| 64 | static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | 77 | static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ |
| 78 | asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ | ||
| 79 | asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ | ||
| 80 | { \ | ||
| 81 | return __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\ | ||
| 82 | } \ | ||
| 83 | static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | ||
| 84 | #endif /* COMPAT_SYSCALL_DEFINEx */ | ||
| 65 | 85 | ||
| 66 | #ifndef compat_user_stack_pointer | 86 | #ifndef compat_user_stack_pointer |
| 67 | #define compat_user_stack_pointer() current_user_stack_pointer() | 87 | #define compat_user_stack_pointer() current_user_stack_pointer() |
| @@ -519,7 +539,12 @@ int __compat_save_altstack(compat_stack_t __user *, unsigned long); | |||
| 519 | * Please note that these prototypes here are only provided for information | 539 | * Please note that these prototypes here are only provided for information |
| 520 | * purposes, for static analysis, and for linking from the syscall table. | 540 | * purposes, for static analysis, and for linking from the syscall table. |
| 521 | * These functions should not be called elsewhere from kernel code. | 541 | * These functions should not be called elsewhere from kernel code. |
| 542 | * | ||
| 543 | * As the syscall calling convention may be different from the default | ||
| 544 | * for architectures overriding the syscall calling convention, do not | ||
| 545 | * include the prototypes if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 522 | */ | 546 | */ |
| 547 | #ifndef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 523 | asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); | 548 | asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); |
| 524 | asmlinkage long compat_sys_io_submit(compat_aio_context_t ctx_id, int nr, | 549 | asmlinkage long compat_sys_io_submit(compat_aio_context_t ctx_id, int nr, |
| 525 | u32 __user *iocb); | 550 | u32 __user *iocb); |
| @@ -957,6 +982,8 @@ asmlinkage long compat_sys_stime(compat_time_t __user *tptr); | |||
| 957 | /* obsolete: net/socket.c */ | 982 | /* obsolete: net/socket.c */ |
| 958 | asmlinkage long compat_sys_socketcall(int call, u32 __user *args); | 983 | asmlinkage long compat_sys_socketcall(int call, u32 __user *args); |
| 959 | 984 | ||
| 985 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 986 | |||
| 960 | 987 | ||
| 961 | /* | 988 | /* |
| 962 | * For most but not all architectures, "am I in a compat syscall?" and | 989 | * For most but not all architectures, "am I in a compat syscall?" and |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index b961184f597a..70fcda1a9049 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -81,6 +81,17 @@ union bpf_attr; | |||
| 81 | #include <linux/key.h> | 81 | #include <linux/key.h> |
| 82 | #include <trace/syscall.h> | 82 | #include <trace/syscall.h> |
| 83 | 83 | ||
| 84 | #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 85 | /* | ||
| 86 | * It may be useful for an architecture to override the definitions of the | ||
| 87 | * SYSCALL_DEFINE0() and __SYSCALL_DEFINEx() macros, in particular to use a | ||
| 88 | * different calling convention for syscalls. To allow for that, the prototypes | ||
| 89 | * for the sys_*() functions below will *not* be included if | ||
| 90 | * CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 91 | */ | ||
| 92 | #include <asm/syscall_wrapper.h> | ||
| 93 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 94 | |||
| 84 | /* | 95 | /* |
| 85 | * __MAP - apply a macro to syscall arguments | 96 | * __MAP - apply a macro to syscall arguments |
| 86 | * __MAP(n, m, t1, a1, t2, a2, ..., tn, an) will expand to | 97 | * __MAP(n, m, t1, a1, t2, a2, ..., tn, an) will expand to |
| @@ -91,7 +102,7 @@ union bpf_attr; | |||
| 91 | * for SYSCALL_DEFINE<n>/COMPAT_SYSCALL_DEFINE<n> | 102 | * for SYSCALL_DEFINE<n>/COMPAT_SYSCALL_DEFINE<n> |
| 92 | */ | 103 | */ |
| 93 | #define __MAP0(m,...) | 104 | #define __MAP0(m,...) |
| 94 | #define __MAP1(m,t,a) m(t,a) | 105 | #define __MAP1(m,t,a,...) m(t,a) |
| 95 | #define __MAP2(m,t,a,...) m(t,a), __MAP1(m,__VA_ARGS__) | 106 | #define __MAP2(m,t,a,...) m(t,a), __MAP1(m,__VA_ARGS__) |
| 96 | #define __MAP3(m,t,a,...) m(t,a), __MAP2(m,__VA_ARGS__) | 107 | #define __MAP3(m,t,a,...) m(t,a), __MAP2(m,__VA_ARGS__) |
| 97 | #define __MAP4(m,t,a,...) m(t,a), __MAP3(m,__VA_ARGS__) | 108 | #define __MAP4(m,t,a,...) m(t,a), __MAP3(m,__VA_ARGS__) |
| @@ -189,11 +200,13 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) | |||
| 189 | } | 200 | } |
| 190 | #endif | 201 | #endif |
| 191 | 202 | ||
| 203 | #ifndef SYSCALL_DEFINE0 | ||
| 192 | #define SYSCALL_DEFINE0(sname) \ | 204 | #define SYSCALL_DEFINE0(sname) \ |
| 193 | SYSCALL_METADATA(_##sname, 0); \ | 205 | SYSCALL_METADATA(_##sname, 0); \ |
| 194 | asmlinkage long sys_##sname(void); \ | 206 | asmlinkage long sys_##sname(void); \ |
| 195 | ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \ | 207 | ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \ |
| 196 | asmlinkage long sys_##sname(void) | 208 | asmlinkage long sys_##sname(void) |
| 209 | #endif /* SYSCALL_DEFINE0 */ | ||
| 197 | 210 | ||
| 198 | #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) | 211 | #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) |
| 199 | #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) | 212 | #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) |
| @@ -209,20 +222,28 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) | |||
| 209 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) | 222 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) |
| 210 | 223 | ||
| 211 | #define __PROTECT(...) asmlinkage_protect(__VA_ARGS__) | 224 | #define __PROTECT(...) asmlinkage_protect(__VA_ARGS__) |
| 225 | |||
| 226 | /* | ||
| 227 | * The asmlinkage stub is aliased to a function named __se_sys_*() which | ||
| 228 | * sign-extends 32-bit ints to longs whenever needed. The actual work is | ||
| 229 | * done within __do_sys_*(). | ||
| 230 | */ | ||
| 231 | #ifndef __SYSCALL_DEFINEx | ||
| 212 | #define __SYSCALL_DEFINEx(x, name, ...) \ | 232 | #define __SYSCALL_DEFINEx(x, name, ...) \ |
| 213 | asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ | 233 | asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ |
| 214 | __attribute__((alias(__stringify(SyS##name)))); \ | 234 | __attribute__((alias(__stringify(__se_sys##name)))); \ |
| 215 | ALLOW_ERROR_INJECTION(sys##name, ERRNO); \ | 235 | ALLOW_ERROR_INJECTION(sys##name, ERRNO); \ |
| 216 | static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ | 236 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ |
| 217 | asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ | 237 | asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ |
| 218 | asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ | 238 | asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ |
| 219 | { \ | 239 | { \ |
| 220 | long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \ | 240 | long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));\ |
| 221 | __MAP(x,__SC_TEST,__VA_ARGS__); \ | 241 | __MAP(x,__SC_TEST,__VA_ARGS__); \ |
| 222 | __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \ | 242 | __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \ |
| 223 | return ret; \ | 243 | return ret; \ |
| 224 | } \ | 244 | } \ |
| 225 | static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | 245 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) |
| 246 | #endif /* __SYSCALL_DEFINEx */ | ||
| 226 | 247 | ||
| 227 | /* | 248 | /* |
| 228 | * Called before coming back to user-mode. Returning to user-mode with an | 249 | * Called before coming back to user-mode. Returning to user-mode with an |
| @@ -252,7 +273,12 @@ static inline void addr_limit_user_check(void) | |||
| 252 | * Please note that these prototypes here are only provided for information | 273 | * Please note that these prototypes here are only provided for information |
| 253 | * purposes, for static analysis, and for linking from the syscall table. | 274 | * purposes, for static analysis, and for linking from the syscall table. |
| 254 | * These functions should not be called elsewhere from kernel code. | 275 | * These functions should not be called elsewhere from kernel code. |
| 276 | * | ||
| 277 | * As the syscall calling convention may be different from the default | ||
| 278 | * for architectures overriding the syscall calling convention, do not | ||
| 279 | * include the prototypes if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 255 | */ | 280 | */ |
| 281 | #ifndef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 256 | asmlinkage long sys_io_setup(unsigned nr_reqs, aio_context_t __user *ctx); | 282 | asmlinkage long sys_io_setup(unsigned nr_reqs, aio_context_t __user *ctx); |
| 257 | asmlinkage long sys_io_destroy(aio_context_t ctx); | 283 | asmlinkage long sys_io_destroy(aio_context_t ctx); |
| 258 | asmlinkage long sys_io_submit(aio_context_t, long, | 284 | asmlinkage long sys_io_submit(aio_context_t, long, |
| @@ -1076,6 +1102,8 @@ asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg); | |||
| 1076 | */ | 1102 | */ |
| 1077 | asmlinkage long sys_ni_syscall(void); | 1103 | asmlinkage long sys_ni_syscall(void); |
| 1078 | 1104 | ||
| 1105 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 1106 | |||
| 1079 | 1107 | ||
| 1080 | /* | 1108 | /* |
| 1081 | * Kernel code should not call syscalls (i.e., sys_xyzyyz()) directly. | 1109 | * Kernel code should not call syscalls (i.e., sys_xyzyyz()) directly. |
diff --git a/init/Kconfig b/init/Kconfig index 9d167a5b4a94..f013afc74b11 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
| @@ -1923,3 +1923,13 @@ source "kernel/Kconfig.locks" | |||
| 1923 | 1923 | ||
| 1924 | config ARCH_HAS_SYNC_CORE_BEFORE_USERMODE | 1924 | config ARCH_HAS_SYNC_CORE_BEFORE_USERMODE |
| 1925 | bool | 1925 | bool |
| 1926 | |||
| 1927 | # It may be useful for an architecture to override the definitions of the | ||
| 1928 | # SYSCALL_DEFINE() and __SYSCALL_DEFINEx() macros in <linux/syscalls.h> | ||
| 1929 | # and the COMPAT_ variants in <linux/compat.h>, in particular to use a | ||
| 1930 | # different calling convention for syscalls. They can also override the | ||
| 1931 | # macros for not-implemented syscalls in kernel/sys_ni.c and | ||
| 1932 | # kernel/time/posix-stubs.c. All these overrides need to be available in | ||
| 1933 | # <asm/syscall_wrapper.h>. | ||
| 1934 | config ARCH_HAS_SYSCALL_WRAPPER | ||
| 1935 | def_bool n | ||
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index 6cafc008f6db..9791364925dc 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c | |||
| @@ -5,6 +5,11 @@ | |||
| 5 | 5 | ||
| 6 | #include <asm/unistd.h> | 6 | #include <asm/unistd.h> |
| 7 | 7 | ||
| 8 | #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 9 | /* Architectures may override COND_SYSCALL and COND_SYSCALL_COMPAT */ | ||
| 10 | #include <asm/syscall_wrapper.h> | ||
| 11 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 12 | |||
| 8 | /* we can't #include <linux/syscalls.h> here, | 13 | /* we can't #include <linux/syscalls.h> here, |
| 9 | but tell gcc to not warn with -Wmissing-prototypes */ | 14 | but tell gcc to not warn with -Wmissing-prototypes */ |
| 10 | asmlinkage long sys_ni_syscall(void); | 15 | asmlinkage long sys_ni_syscall(void); |
| @@ -17,8 +22,13 @@ asmlinkage long sys_ni_syscall(void) | |||
| 17 | return -ENOSYS; | 22 | return -ENOSYS; |
| 18 | } | 23 | } |
| 19 | 24 | ||
| 25 | #ifndef COND_SYSCALL | ||
| 20 | #define COND_SYSCALL(name) cond_syscall(sys_##name) | 26 | #define COND_SYSCALL(name) cond_syscall(sys_##name) |
| 27 | #endif /* COND_SYSCALL */ | ||
| 28 | |||
| 29 | #ifndef COND_SYSCALL_COMPAT | ||
| 21 | #define COND_SYSCALL_COMPAT(name) cond_syscall(compat_sys_##name) | 30 | #define COND_SYSCALL_COMPAT(name) cond_syscall(compat_sys_##name) |
| 31 | #endif /* COND_SYSCALL_COMPAT */ | ||
| 22 | 32 | ||
| 23 | /* | 33 | /* |
| 24 | * This list is kept in the same order as include/uapi/asm-generic/unistd.h. | 34 | * This list is kept in the same order as include/uapi/asm-generic/unistd.h. |
diff --git a/kernel/time/posix-stubs.c b/kernel/time/posix-stubs.c index 6259dbc0191a..e0dbae98db9d 100644 --- a/kernel/time/posix-stubs.c +++ b/kernel/time/posix-stubs.c | |||
| @@ -19,6 +19,11 @@ | |||
| 19 | #include <linux/posix-timers.h> | 19 | #include <linux/posix-timers.h> |
| 20 | #include <linux/compat.h> | 20 | #include <linux/compat.h> |
| 21 | 21 | ||
| 22 | #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 23 | /* Architectures may override SYS_NI and COMPAT_SYS_NI */ | ||
| 24 | #include <asm/syscall_wrapper.h> | ||
| 25 | #endif | ||
| 26 | |||
| 22 | asmlinkage long sys_ni_posix_timers(void) | 27 | asmlinkage long sys_ni_posix_timers(void) |
| 23 | { | 28 | { |
| 24 | pr_err_once("process %d (%s) attempted a POSIX timer syscall " | 29 | pr_err_once("process %d (%s) attempted a POSIX timer syscall " |
| @@ -27,8 +32,13 @@ asmlinkage long sys_ni_posix_timers(void) | |||
| 27 | return -ENOSYS; | 32 | return -ENOSYS; |
| 28 | } | 33 | } |
| 29 | 34 | ||
| 35 | #ifndef SYS_NI | ||
| 30 | #define SYS_NI(name) SYSCALL_ALIAS(sys_##name, sys_ni_posix_timers) | 36 | #define SYS_NI(name) SYSCALL_ALIAS(sys_##name, sys_ni_posix_timers) |
| 37 | #endif | ||
| 38 | |||
| 39 | #ifndef COMPAT_SYS_NI | ||
| 31 | #define COMPAT_SYS_NI(name) SYSCALL_ALIAS(compat_sys_##name, sys_ni_posix_timers) | 40 | #define COMPAT_SYS_NI(name) SYSCALL_ALIAS(compat_sys_##name, sys_ni_posix_timers) |
| 41 | #endif | ||
| 32 | 42 | ||
| 33 | SYS_NI(timer_create); | 43 | SYS_NI(timer_create); |
| 34 | SYS_NI(timer_gettime); | 44 | SYS_NI(timer_gettime); |
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index de7cc540450f..fece57566d45 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
| @@ -1087,6 +1087,6 @@ const struct dma_map_ops swiotlb_dma_ops = { | |||
| 1087 | .unmap_sg = swiotlb_unmap_sg_attrs, | 1087 | .unmap_sg = swiotlb_unmap_sg_attrs, |
| 1088 | .map_page = swiotlb_map_page, | 1088 | .map_page = swiotlb_map_page, |
| 1089 | .unmap_page = swiotlb_unmap_page, | 1089 | .unmap_page = swiotlb_unmap_page, |
| 1090 | .dma_supported = swiotlb_dma_supported, | 1090 | .dma_supported = dma_direct_supported, |
| 1091 | }; | 1091 | }; |
| 1092 | #endif /* CONFIG_DMA_DIRECT_OPS */ | 1092 | #endif /* CONFIG_DMA_DIRECT_OPS */ |
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter index d84a5674e95e..a923f05edb36 100755 --- a/scripts/bloat-o-meter +++ b/scripts/bloat-o-meter | |||
| @@ -30,8 +30,8 @@ def getsizes(file, format): | |||
| 30 | if type in format: | 30 | if type in format: |
| 31 | # strip generated symbols | 31 | # strip generated symbols |
| 32 | if name.startswith("__mod_"): continue | 32 | if name.startswith("__mod_"): continue |
| 33 | if name.startswith("SyS_"): continue | 33 | if name.startswith("__se_sys"): continue |
| 34 | if name.startswith("compat_SyS_"): continue | 34 | if name.startswith("__se_compat_sys"): continue |
| 35 | if name == "linux_banner": continue | 35 | if name == "linux_banner": continue |
| 36 | # statics and some other optimizations adds random .NUMBER | 36 | # statics and some other optimizations adds random .NUMBER |
| 37 | name = re_NUMBER.sub('', name) | 37 | name = re_NUMBER.sub('', name) |
