@@ -21,6 +21,12 @@ struct pt_regs;
2121 ,,(unsigned int)regs->dx,,(unsigned int)regs->si \
2222 ,,(unsigned int)regs->di,,(unsigned int)regs->bp)
2323
24+ #define __SYS_STUB0 (abi , name ) \
25+ asmlinkage long __##abi##_##name(const struct pt_regs *regs); \
26+ ALLOW_ERROR_INJECTION(__##abi##_##name, ERRNO); \
27+ asmlinkage long __##abi##_##name(const struct pt_regs *regs) \
28+ __alias(__do_##name);
29+
2430#define __SYS_STUBx (abi , name , ...) \
2531 asmlinkage long __##abi##_##name(const struct pt_regs *regs); \
2632 ALLOW_ERROR_INJECTION(__##abi##_##name, ERRNO); \
@@ -30,10 +36,14 @@ struct pt_regs;
3036 }
3137
3238#ifdef CONFIG_X86_64
39+ #define __X64_SYS_STUB0 (name ) \
40+ __SYS_STUB0(x64, sys_##name)
41+
3342#define __X64_SYS_STUBx (x , name , ...) \
3443 __SYS_STUBx(x64, sys##name, \
3544 SC_X86_64_REGS_TO_ARGS(x, __VA_ARGS__))
3645#else /* CONFIG_X86_64 */
46+ #define __X64_SYS_STUB0 (name )
3747#define __X64_SYS_STUBx (x , name , ...)
3848#endif /* CONFIG_X86_64 */
3949
@@ -46,34 +56,20 @@ struct pt_regs;
4656 * kernel/sys_ni.c and SYS_NI in kernel/time/posix-stubs.c to cover this
4757 * case as well.
4858 */
49- #define __IA32_COMPAT_SYS_STUB0 (x , name ) \
50- asmlinkage long __ia32_compat_sys_##name(const struct pt_regs *regs);\
51- ALLOW_ERROR_INJECTION(__ia32_compat_sys_##name, ERRNO); \
52- asmlinkage long __ia32_compat_sys_##name(const struct pt_regs *regs)\
53- { \
54- return __se_compat_sys_##name(); \
55- }
59+ #define __IA32_COMPAT_SYS_STUB0 (name ) \
60+ __SYS_STUB0(ia32, compat_sys_##name)
5661
5762#define __IA32_COMPAT_SYS_STUBx (x , name , ...) \
5863 __SYS_STUBx(ia32, compat_sys##name, \
5964 SC_IA32_REGS_TO_ARGS(x, __VA_ARGS__))
6065
66+ #define __IA32_SYS_STUB0 (name ) \
67+ __SYS_STUB0(ia32, sys_##name)
68+
6169#define __IA32_SYS_STUBx (x , name , ...) \
6270 __SYS_STUBx(ia32, sys##name, \
6371 SC_IA32_REGS_TO_ARGS(x, __VA_ARGS__))
6472
65- /*
66- * To keep the naming coherent, re-define SYSCALL_DEFINE0 to create an alias
67- * named __ia32_sys_*()
68- */
69-
70- #define SYSCALL_DEFINE0 (sname ) \
71- SYSCALL_METADATA(_##sname, 0); \
72- asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused);\
73- ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
74- SYSCALL_ALIAS(__ia32_sys_##sname, __x64_sys_##sname); \
75- asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused)
76-
7773#define COND_SYSCALL (name ) \
7874 asmlinkage __weak long __x64_sys_##name(const struct pt_regs *__unused) \
7975 { \
@@ -89,7 +85,9 @@ struct pt_regs;
8985 SYSCALL_ALIAS(__ia32_sys_##name, sys_ni_posix_timers)
9086
9187#else /* CONFIG_IA32_EMULATION */
88+ #define __IA32_COMPAT_SYS_STUB0 (name )
9289#define __IA32_COMPAT_SYS_STUBx (x , name , ...)
90+ #define __IA32_SYS_STUB0 (name )
9391#define __IA32_SYS_STUBx (x , name , ...)
9492#endif /* CONFIG_IA32_EMULATION */
9593
@@ -100,20 +98,15 @@ struct pt_regs;
10098 * of the x86-64-style parameter ordering of x32 syscalls. The syscalls common
10199 * with x86_64 obviously do not need such care.
102100 */
103- #define __X32_COMPAT_SYS_STUB0 (x , name , ...) \
104- asmlinkage long __x32_compat_sys_##name(const struct pt_regs *regs);\
105- ALLOW_ERROR_INJECTION(__x32_compat_sys_##name, ERRNO); \
106- asmlinkage long __x32_compat_sys_##name(const struct pt_regs *regs)\
107- { \
108- return __se_compat_sys_##name();\
109- }
101+ #define __X32_COMPAT_SYS_STUB0 (name ) \
102+ __SYS_STUB0(x32, compat_sys_##name)
110103
111104#define __X32_COMPAT_SYS_STUBx (x , name , ...) \
112105 __SYS_STUBx(x32, compat_sys##name, \
113106 SC_X86_64_REGS_TO_ARGS(x, __VA_ARGS__))
114107
115108#else /* CONFIG_X86_X32 */
116- #define __X32_COMPAT_SYS_STUB0 (x , name )
109+ #define __X32_COMPAT_SYS_STUB0 (name )
117110#define __X32_COMPAT_SYS_STUBx (x , name , ...)
118111#endif /* CONFIG_X86_X32 */
119112
@@ -125,15 +118,12 @@ struct pt_regs;
125118 * of them.
126119 */
127120#define COMPAT_SYSCALL_DEFINE0 (name ) \
128- static long __se_compat_sys_##name(void); \
129- static inline long __do_compat_sys_##name(void); \
130- __IA32_COMPAT_SYS_STUB0(x, name) \
131- __X32_COMPAT_SYS_STUB0(x, name) \
132- static long __se_compat_sys_##name(void) \
133- { \
134- return __do_compat_sys_##name(); \
135- } \
136- static inline long __do_compat_sys_##name(void)
121+ static asmlinkage long \
122+ __do_compat_sys_##name(const struct pt_regs *__unused); \
123+ __IA32_COMPAT_SYS_STUB0(name) \
124+ __X32_COMPAT_SYS_STUB0(name) \
125+ static asmlinkage long \
126+ __do_compat_sys_##name(const struct pt_regs *__unused)
137127
138128#define COMPAT_SYSCALL_DEFINEx (x , name , ...) \
139129 static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
@@ -216,13 +206,14 @@ struct pt_regs;
216206 * SYSCALL_DEFINEx() -- which is essential for the COND_SYSCALL() and SYS_NI()
217207 * macros to work correctly.
218208 */
219- #ifndef SYSCALL_DEFINE0
220209#define SYSCALL_DEFINE0 (sname ) \
221210 SYSCALL_METADATA(_##sname, 0); \
222- asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused);\
223- ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
224- asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused)
225- #endif
211+ static asmlinkage long \
212+ __do_sys_##sname(const struct pt_regs *__unused); \
213+ __X64_SYS_STUB0(sname) \
214+ __IA32_SYS_STUB0(sname) \
215+ static asmlinkage long \
216+ __do_sys_##sname(const struct pt_regs *__unused)
226217
227218#ifndef COND_SYSCALL
228219#define COND_SYSCALL (name ) \
0 commit comments