-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH] uml: fix syscall table by including $(SUBARCH)'s one, for x86-64
Reuse asm-x86-64/unistd.h to build our syscall table, like x86-64 already does. Like for i386, we must add some #defines for all the (right!) changes UML does to x86-64 syscall table. Note: I noted a bogus: [ __NR_sched_yield ] = (syscall_handler_t *) yield, while doing this patch (which could only be a workaround for some strange bug, but I would ignore this possibility). I'm changing this without notice. Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
- Loading branch information
Paolo 'Blaisorblade' Giarrusso
authored and
Linus Torvalds
committed
May 1, 2005
1 parent
ddcd6b1
commit 80f9507
Showing
5 changed files
with
73 additions
and
318 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* System call table for UML/x86-64, copied from arch/x86_64/kernel/syscall.c | ||
* with some changes for UML. */ | ||
|
||
#include <linux/linkage.h> | ||
#include <linux/sys.h> | ||
#include <linux/cache.h> | ||
#include <linux/config.h> | ||
|
||
#define __NO_STUBS | ||
|
||
/* Below you can see, in terms of #define's, the differences between the x86-64 | ||
* and the UML syscall table. */ | ||
|
||
/* Not going to be implemented by UML, since we have no hardware. */ | ||
#define stub_iopl sys_ni_syscall | ||
#define sys_ioperm sys_ni_syscall | ||
|
||
/* The UML TLS problem. Note that x86_64 does not implement this, so the below | ||
* is needed only for the ia32 compatibility. */ | ||
/*#define sys_set_thread_area sys_ni_syscall | ||
#define sys_get_thread_area sys_ni_syscall*/ | ||
|
||
/* For __NR_time. The x86-64 name hopefully will change from sys_time64 to | ||
* sys_time (since the current situation is bogus). I've sent a patch to cleanup | ||
* this. Remove below the obsoleted line. */ | ||
#define sys_time64 um_time | ||
#define sys_time um_time | ||
|
||
/* On UML we call it this way ("old" means it's not mmap2) */ | ||
#define sys_mmap old_mmap | ||
/* On x86-64 sys_uname is actually sys_newuname plus a compatibility trick. | ||
* See arch/x86_64/kernel/sys_x86_64.c */ | ||
#define sys_uname sys_uname64 | ||
|
||
#define stub_clone sys_clone | ||
#define stub_fork sys_fork | ||
#define stub_vfork sys_vfork | ||
#define stub_execve sys_execve | ||
#define stub_rt_sigsuspend sys_rt_sigsuspend | ||
#define stub_sigaltstack sys_sigaltstack | ||
#define stub_rt_sigreturn sys_rt_sigreturn | ||
|
||
#define __SYSCALL(nr, sym) extern asmlinkage void sym(void) ; | ||
#undef _ASM_X86_64_UNISTD_H_ | ||
#include <asm-x86_64/unistd.h> | ||
|
||
#undef __SYSCALL | ||
#define __SYSCALL(nr, sym) [ nr ] = sym, | ||
#undef _ASM_X86_64_UNISTD_H_ | ||
|
||
typedef void (*sys_call_ptr_t)(void); | ||
|
||
extern void sys_ni_syscall(void); | ||
|
||
sys_call_ptr_t sys_call_table[__NR_syscall_max+1] __cacheline_aligned = { | ||
/* Smells like a like a compiler bug -- it doesn't work when the & below is removed. */ | ||
[0 ... __NR_syscall_max] = &sys_ni_syscall, | ||
#include <asm-x86_64/unistd.h> | ||
}; |
Oops, something went wrong.