| From 6c5979631b4b03c9288776562c18036765e398c1 Mon Sep 17 00:00:00 2001 |
| From: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Date: Wed, 11 Feb 2009 13:04:38 -0800 |
| Subject: syscall define: fix uml compile bug |
| |
| From: Heiko Carstens <heiko.carstens@de.ibm.com> |
| |
| commit 6c5979631b4b03c9288776562c18036765e398c1 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| include/linux/syscalls.h | 28 ++++++++++++++-------------- |
| 1 file changed, 14 insertions(+), 14 deletions(-) |
| |
| --- a/include/linux/syscalls.h |
| +++ b/include/linux/syscalls.h |
| @@ -95,13 +95,13 @@ struct old_linux_dirent; |
| #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) |
| #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) |
| |
| -#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
| -#define SYSCALL_DEFINE1(...) SYSCALL_DEFINEx(1, __VA_ARGS__) |
| -#define SYSCALL_DEFINE2(...) SYSCALL_DEFINEx(2, __VA_ARGS__) |
| -#define SYSCALL_DEFINE3(...) SYSCALL_DEFINEx(3, __VA_ARGS__) |
| -#define SYSCALL_DEFINE4(...) SYSCALL_DEFINEx(4, __VA_ARGS__) |
| -#define SYSCALL_DEFINE5(...) SYSCALL_DEFINEx(5, __VA_ARGS__) |
| -#define SYSCALL_DEFINE6(...) SYSCALL_DEFINEx(6, __VA_ARGS__) |
| +#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
| +#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) |
| +#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) |
| +#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) |
| +#define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__) |
| +#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__) |
| +#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) |
| |
| #ifdef CONFIG_PPC64 |
| #define SYSCALL_ALIAS(alias, name) \ |
| @@ -116,21 +116,21 @@ struct old_linux_dirent; |
| |
| #define SYSCALL_DEFINE(name) static inline long SYSC_##name |
| #define SYSCALL_DEFINEx(x, name, ...) \ |
| - asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)); \ |
| - static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)); \ |
| - asmlinkage long SyS_##name(__SC_LONG##x(__VA_ARGS__)) \ |
| + asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)); \ |
| + static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)); \ |
| + asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__)) \ |
| { \ |
| __SC_TEST##x(__VA_ARGS__); \ |
| - return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__)); \ |
| + return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__)); \ |
| } \ |
| - SYSCALL_ALIAS(sys_##name, SyS_##name); \ |
| - static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)) |
| + SYSCALL_ALIAS(sys##name, SyS##name); \ |
| + static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)) |
| |
| #else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
| |
| #define SYSCALL_DEFINE(name) asmlinkage long sys_##name |
| #define SYSCALL_DEFINEx(x, name, ...) \ |
| - asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)) |
| + asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)) |
| |
| #endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
| |