linux/arch/powerpc/include/asm/syscall_wrapper.h
Michael Ellerman 9474689020 powerpc: Don't add __powerpc_ prefix to syscall entry points
When using syscall wrappers the __SYSCALL_DEFINEx() and related macros
add a "__powerpc_" prefix to all syscall entry points.

So for example sys_mmap becomes __powerpc_sys_mmap.

This risks breaking workflows and tools that expect the old naming
scheme. At a minimum setting a breakpoint on eg. sys_mmap with gdb no
longer works.

There seems to be no compelling reason to add the "__powerpc_" prefix,
other than that it follows what some other arches do (x86, arm64, s390).

But unlike other arches powerpc doesn't always enable syscall wrappers,
so the syscall entry points can change name depending on CONFIG options.

For those reasons drop the "__powerpc_" prefix, reverting to the
existing naming.

Doing so reveals two prototypes in signal.h that have the incorrect type
when syscall wrappers are enabled. There are already prototypes for both
functions in syscalls.h, so drop the ones from signal.h.

Fixes: 7e92e01b7245 ("powerpc: Provide syscall wrapper")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20221006135940.1223988-1-mpe@ellerman.id.au
2022-10-07 00:59:54 +11:00

50 lines
1.6 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* syscall_wrapper.h - powerpc specific wrappers to syscall definitions
*
* Based on arch/{x86,arm64}/include/asm/syscall_wrapper.h
*/
#ifndef __ASM_POWERPC_SYSCALL_WRAPPER_H
#define __ASM_POWERPC_SYSCALL_WRAPPER_H
struct pt_regs;
#define SC_POWERPC_REGS_TO_ARGS(x, ...) \
__MAP(x,__SC_ARGS \
,,regs->gpr[3],,regs->gpr[4],,regs->gpr[5] \
,,regs->gpr[6],,regs->gpr[7],,regs->gpr[8])
#define __SYSCALL_DEFINEx(x, name, ...) \
long sys##name(const struct pt_regs *regs); \
ALLOW_ERROR_INJECTION(sys##name, ERRNO); \
static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
long sys##name(const struct pt_regs *regs) \
{ \
return __se_sys##name(SC_POWERPC_REGS_TO_ARGS(x,__VA_ARGS__)); \
} \
static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
{ \
long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \
__MAP(x,__SC_TEST,__VA_ARGS__); \
__PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
return ret; \
} \
static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
#define SYSCALL_DEFINE0(sname) \
SYSCALL_METADATA(_##sname, 0); \
long sys_##sname(const struct pt_regs *__unused); \
ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \
long sys_##sname(const struct pt_regs *__unused)
#define COND_SYSCALL(name) \
long sys_##name(const struct pt_regs *regs); \
long __weak sys_##name(const struct pt_regs *regs) \
{ \
return sys_ni_syscall(); \
}
#endif // __ASM_POWERPC_SYSCALL_WRAPPER_H