diff options
author | Brian Gerst <brgerst@gmail.com> | 2020-03-13 15:51:42 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2020-03-21 16:03:24 +0100 |
commit | 25c619e59b395a8c970d339f9c714302738e350e (patch) | |
tree | 74567402d083b53756dfafac858c9ff6f70168ca /arch/x86/entry/syscall_32.c | |
parent | 121b32a58a3af89a780cf194ce3769fc4120e574 (diff) |
x86/entry/32: Enable pt_regs based syscalls
Enable pt_regs based syscalls for 32-bit. This makes the 32-bit native
kernel consistent with the 64-bit kernel, and improves the syscall
interface by not needing to push all 6 potential arguments onto the stack.
Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Dominik Brodowski <linux@dominikbrodowski.net>
Link: https://lkml.kernel.org/r/20200313195144.164260-17-brgerst@gmail.com
Diffstat (limited to 'arch/x86/entry/syscall_32.c')
-rw-r--r-- | arch/x86/entry/syscall_32.c | 15 |
1 files changed, 2 insertions, 13 deletions
diff --git a/arch/x86/entry/syscall_32.c b/arch/x86/entry/syscall_32.c index 41ec9c66fe15..097413c705ad 100644 --- a/arch/x86/entry/syscall_32.c +++ b/arch/x86/entry/syscall_32.c @@ -4,33 +4,22 @@ #include <linux/linkage.h> #include <linux/sys.h> #include <linux/cache.h> +#include <linux/syscalls.h> #include <asm/unistd.h> #include <asm/syscall.h> -#ifdef CONFIG_IA32_EMULATION -/* On X86_64, we use struct pt_regs * to pass parameters to syscalls */ #define __SYSCALL_I386(nr, sym) extern asmlinkage long __ia32_##sym(const struct pt_regs *); -#define __sys_ni_syscall __ia32_sys_ni_syscall -#else /* CONFIG_IA32_EMULATION */ -#define __SYSCALL_I386(nr, sym) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); -extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); -#define __sys_ni_syscall sys_ni_syscall -#endif /* CONFIG_IA32_EMULATION */ #include <asm/syscalls_32.h> #undef __SYSCALL_I386 -#ifdef CONFIG_IA32_EMULATION #define __SYSCALL_I386(nr, sym) [nr] = __ia32_##sym, -#else /* CONFIG_IA32_EMULATION */ -#define __SYSCALL_I386(nr, sym) [nr] = sym, -#endif /* CONFIG_IA32_EMULATION */ __visible const sys_call_ptr_t ia32_sys_call_table[__NR_ia32_syscall_max+1] = { /* * Smells like a compiler bug -- it doesn't work * when the & below is removed. */ - [0 ... __NR_ia32_syscall_max] = &__sys_ni_syscall, + [0 ... __NR_ia32_syscall_max] = &__ia32_sys_ni_syscall, #include <asm/syscalls_32.h> }; |