Message ID | 20220725062813.119723-1-rmclure@linux.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc: Syscall wrapper and register clearing | expand |
On Mon, 2022-07-25 at 16:28 +1000, Rohan McLure wrote: > The table of syscall handlers and registered compatibility syscall > handlers has in past been produced using assembly, with function > references resolved at link time. This moves link-time errors to > compile-time, by rewriting systbl.S in C, and including the > linux/syscalls.h, linux/compat.h and asm/syscalls.h headers for > prototypes. > > Reported-by: Arnd Bergmann <arnd@arndb.de> > Signed-off-by: Rohan McLure <rmclure@linux.ibm.com> > --- > V1 -> V2: New patch. > --- > arch/powerpc/kernel/{systbl.S => systbl.c} | 27 ++++++++++---------- > 1 file changed, 14 insertions(+), 13 deletions(-) > > diff --git a/arch/powerpc/kernel/systbl.S > b/arch/powerpc/kernel/systbl.c > similarity index 59% > rename from arch/powerpc/kernel/systbl.S > rename to arch/powerpc/kernel/systbl.c > index cb3358886203..99ffdfef6b9c 100644 > --- a/arch/powerpc/kernel/systbl.S > +++ b/arch/powerpc/kernel/systbl.c > @@ -10,31 +10,32 @@ > * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) > */ > > -#include <asm/ppc_asm.h> > +#include <linux/syscalls.h> > +#include <linux/compat.h> > +#include <asm/unistd.h> > +#include <asm/syscalls.h> > > -.section .rodata,"a" > +#define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, > entry) > > -#ifdef CONFIG_PPC64 > - .p2align 3 > -#define __SYSCALL(nr, entry) .8byte entry > +#ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER > +#define __SYSCALL(nr, entry) [nr] = __powerpc_##entry, > +#define __powerpc_sys_ni_syscall sys_ni_syscall Keep this until patch 10. Otherwise looks alright to me. > #else > -#define __SYSCALL(nr, entry) .long entry > +#define __SYSCALL(nr, entry) [nr] = entry, > #endif > > -#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, > native) > -.globl sys_call_table > -sys_call_table: > +void *sys_call_table[] = { > #ifdef CONFIG_PPC64 > #include <asm/syscall_table_64.h> > #else > #include <asm/syscall_table_32.h> > #endif > +}; > > #ifdef CONFIG_COMPAT > #undef __SYSCALL_WITH_COMPAT > #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, > compat) > -.globl compat_sys_call_table > -compat_sys_call_table: > -#define compat_sys_sigsuspend sys_sigsuspend > +void *compat_sys_call_table[] = { > #include <asm/syscall_table_32.h> > -#endif > +}; > +#endif /* CONFIG_COMPAT */
diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.c similarity index 59% rename from arch/powerpc/kernel/systbl.S rename to arch/powerpc/kernel/systbl.c index cb3358886203..99ffdfef6b9c 100644 --- a/arch/powerpc/kernel/systbl.S +++ b/arch/powerpc/kernel/systbl.c @@ -10,31 +10,32 @@ * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) */ -#include <asm/ppc_asm.h> +#include <linux/syscalls.h> +#include <linux/compat.h> +#include <asm/unistd.h> +#include <asm/syscalls.h> -.section .rodata,"a" +#define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, entry) -#ifdef CONFIG_PPC64 - .p2align 3 -#define __SYSCALL(nr, entry) .8byte entry +#ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER +#define __SYSCALL(nr, entry) [nr] = __powerpc_##entry, +#define __powerpc_sys_ni_syscall sys_ni_syscall #else -#define __SYSCALL(nr, entry) .long entry +#define __SYSCALL(nr, entry) [nr] = entry, #endif -#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native) -.globl sys_call_table -sys_call_table: +void *sys_call_table[] = { #ifdef CONFIG_PPC64 #include <asm/syscall_table_64.h> #else #include <asm/syscall_table_32.h> #endif +}; #ifdef CONFIG_COMPAT #undef __SYSCALL_WITH_COMPAT #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat) -.globl compat_sys_call_table -compat_sys_call_table: -#define compat_sys_sigsuspend sys_sigsuspend +void *compat_sys_call_table[] = { #include <asm/syscall_table_32.h> -#endif +}; +#endif /* CONFIG_COMPAT */
The table of syscall handlers and registered compatibility syscall handlers has in past been produced using assembly, with function references resolved at link time. This moves link-time errors to compile-time, by rewriting systbl.S in C, and including the linux/syscalls.h, linux/compat.h and asm/syscalls.h headers for prototypes. Reported-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Rohan McLure <rmclure@linux.ibm.com> --- V1 -> V2: New patch. --- arch/powerpc/kernel/{systbl.S => systbl.c} | 27 ++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-)