On Fri Sep 16, 2022 at 3:32 PM AEST, 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 <a...@arndb.de> > Signed-off-by: Rohan McLure <rmcl...@linux.ibm.com> > Reported-by: Nicholas Piggin <npig...@gmail.com> > --- > V1 -> V2: New patch. > V4 -> V5: For this patch only, represent handler function pointers as > unsigned long. Remove reference to syscall wrappers. Use asm/syscalls.h > which implies asm/syscall.h
Thanks, I think this is the right way to split the patches. I'm not sure if I reported this issue, but I really like the patch. Reviewed-by: Nicholas Piggin <npig...@gmail.com> > --- > arch/powerpc/kernel/{systbl.S => systbl.c} | 28 ++++++++------------ > 1 file changed, 11 insertions(+), 17 deletions(-) > > diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.c > similarity index 61% > rename from arch/powerpc/kernel/systbl.S > rename to arch/powerpc/kernel/systbl.c > index 6c1db3b6de2d..ce52bd2ec292 100644 > --- a/arch/powerpc/kernel/systbl.S > +++ b/arch/powerpc/kernel/systbl.c > @@ -10,32 +10,26 @@ > * PPC64 updates by Dave Engebretsen (engeb...@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) > +#define __SYSCALL(nr, entry) [nr] = (unsigned long) &entry, > > -#ifdef CONFIG_PPC64 > - .p2align 3 > -#define __SYSCALL(nr, entry) .8byte entry > -#else > - .p2align 2 > -#define __SYSCALL(nr, entry) .long entry > -#endif > - > -#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native) > -.globl sys_call_table > -sys_call_table: > +const unsigned long 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 > +const unsigned long compat_sys_call_table[] = { > #include <asm/syscall_table_32.h> > -#endif > +}; > +#endif /* CONFIG_COMPAT */ > -- > 2.34.1