Commit 6c5979631b4b03c9288776562c18036765e398c1

Authored by Heiko Carstens
Committed by Linus Torvalds
1 parent 0e4a9b5928

syscall define: fix uml compile bug

With the new system call defines we get this on uml:

arch/um/sys-i386/built-in.o: In function `sys_call_table':
(.rodata+0x308): undefined reference to `sys_sigprocmask'

Reason for this is that uml passes the preprocessor option
-Dsigprocmask=kernel_sigprocmask to gcc when compiling the kernel.
This causes SYSCALL_DEFINE3(sigprocmask, ...) to be expanded to
SYSCALL_DEFINEx(3, kernel_sigprocmask, ...) and finally to a system
call named sys_kernel_sigprocmask.  However sys_sigprocmask is missing
because of this.

To avoid macro expansion for the system call name just concatenate the
name at first define instead of carrying it through severel levels.
This was pointed out by Al Viro.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Reviewed-by: WANG Cong <wangcong@zeuux.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 14 additions and 14 deletions Side-by-side Diff

include/linux/syscalls.h
... ... @@ -95,13 +95,13 @@
95 95 #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__)
96 96 #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__)
97 97  
98   -#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)
99   -#define SYSCALL_DEFINE1(...) SYSCALL_DEFINEx(1, __VA_ARGS__)
100   -#define SYSCALL_DEFINE2(...) SYSCALL_DEFINEx(2, __VA_ARGS__)
101   -#define SYSCALL_DEFINE3(...) SYSCALL_DEFINEx(3, __VA_ARGS__)
102   -#define SYSCALL_DEFINE4(...) SYSCALL_DEFINEx(4, __VA_ARGS__)
103   -#define SYSCALL_DEFINE5(...) SYSCALL_DEFINEx(5, __VA_ARGS__)
104   -#define SYSCALL_DEFINE6(...) SYSCALL_DEFINEx(6, __VA_ARGS__)
  98 +#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)
  99 +#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
  100 +#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
  101 +#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
  102 +#define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
  103 +#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
  104 +#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
105 105  
106 106 #ifdef CONFIG_PPC64
107 107 #define SYSCALL_ALIAS(alias, name) \
108 108  
109 109  
110 110  
... ... @@ -121,21 +121,21 @@
121 121  
122 122 #define SYSCALL_DEFINE(name) static inline long SYSC_##name
123 123 #define SYSCALL_DEFINEx(x, name, ...) \
124   - asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)); \
125   - static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)); \
126   - asmlinkage long SyS_##name(__SC_LONG##x(__VA_ARGS__)) \
  124 + asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)); \
  125 + static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)); \
  126 + asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__)) \
127 127 { \
128 128 __SC_TEST##x(__VA_ARGS__); \
129   - return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__)); \
  129 + return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__)); \
130 130 } \
131   - SYSCALL_ALIAS(sys_##name, SyS_##name); \
132   - static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__))
  131 + SYSCALL_ALIAS(sys##name, SyS##name); \
  132 + static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__))
133 133  
134 134 #else /* CONFIG_HAVE_SYSCALL_WRAPPERS */
135 135  
136 136 #define SYSCALL_DEFINE(name) asmlinkage long sys_##name
137 137 #define SYSCALL_DEFINEx(x, name, ...) \
138   - asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__))
  138 + asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
139 139  
140 140 #endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */
141 141