Commit 39859aea authored by Rohan McLure's avatar Rohan McLure Committed by Michael Ellerman

powerpc: Enable compile-time check for syscall handlers

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: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarRohan McLure <rmclure@linux.ibm.com>
Reviewed-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220921065605.1051927-18-rmclure@linux.ibm.com
parent 8cd1def4
...@@ -10,36 +10,26 @@ ...@@ -10,36 +10,26 @@
* PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) * 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>
#ifdef CONFIG_RELOCATABLE #define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, entry)
.section .data.rel.ro,"aw" #define __SYSCALL(nr, entry) [nr] = (unsigned long) &entry,
#else
.section .rodata,"a"
#endif
#ifdef CONFIG_PPC64 const unsigned long sys_call_table[] = {
.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:
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
#include <asm/syscall_table_64.h> #include <asm/syscall_table_64.h>
#else #else
#include <asm/syscall_table_32.h> #include <asm/syscall_table_32.h>
#endif #endif
};
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
#undef __SYSCALL_WITH_COMPAT #undef __SYSCALL_WITH_COMPAT
#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat) #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat)
.globl compat_sys_call_table const unsigned long compat_sys_call_table[] = {
compat_sys_call_table:
#define compat_sys_sigsuspend sys_sigsuspend
#include <asm/syscall_table_32.h> #include <asm/syscall_table_32.h>
#endif };
#endif /* CONFIG_COMPAT */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment