aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/include/sysdep-x86_64
diff options
context:
space:
mode:
authorJeff Dike <jdike@addtoit.com>2005-11-22 00:32:09 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-22 12:13:41 -0500
commit17d469715c6453e4994e6617e8f644bf10f38584 (patch)
tree0bfc17100309b888315c3cae02adfd1783c04774 /arch/um/include/sysdep-x86_64
parente23181deec0d2a8be576faf9d71211abb84d5ccc (diff)
[PATCH] uml: properly invoke x86_64 system calls
This patch makes stub_segv use the stub_syscall macros. This was needed anyway, but the bug that prompted this was the discovery that gcc was storing stuff in RCX, which is trashed across a system call. This is exactly the sort of problem that the new macros fix. There is a stub_syscall0 for getpid. stub_segv was changed to be a libc file, and that caused some include changes. Signed-off-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um/include/sysdep-x86_64')
-rw-r--r--arch/um/include/sysdep-x86_64/stub.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/um/include/sysdep-x86_64/stub.h b/arch/um/include/sysdep-x86_64/stub.h
index 2bd6e7a9728..c41689c13dc 100644
--- a/arch/um/include/sysdep-x86_64/stub.h
+++ b/arch/um/include/sysdep-x86_64/stub.h
@@ -6,7 +6,6 @@
6#ifndef __SYSDEP_STUB_H 6#ifndef __SYSDEP_STUB_H
7#define __SYSDEP_STUB_H 7#define __SYSDEP_STUB_H
8 8
9#include <asm/ptrace.h>
10#include <asm/unistd.h> 9#include <asm/unistd.h>
11#include <sysdep/ptrace_user.h> 10#include <sysdep/ptrace_user.h>
12 11
@@ -20,6 +19,17 @@ extern void stub_clone_handler(void);
20#define __syscall_clobber "r11","rcx","memory" 19#define __syscall_clobber "r11","rcx","memory"
21#define __syscall "syscall" 20#define __syscall "syscall"
22 21
22static inline long stub_syscall0(long syscall)
23{
24 long ret;
25
26 __asm__ volatile (__syscall
27 : "=a" (ret)
28 : "0" (syscall) : __syscall_clobber );
29
30 return ret;
31}
32
23static inline long stub_syscall2(long syscall, long arg1, long arg2) 33static inline long stub_syscall2(long syscall, long arg1, long arg2)
24{ 34{
25 long ret; 35 long ret;