diff options
Diffstat (limited to 'arch/um/sys-i386/stub_segv.c')
-rw-r--r-- | arch/um/sys-i386/stub_segv.c | 19 |
1 files changed, 2 insertions, 17 deletions
diff --git a/arch/um/sys-i386/stub_segv.c b/arch/um/sys-i386/stub_segv.c index b3999cb76bfd..28ccf737a79f 100644 --- a/arch/um/sys-i386/stub_segv.c +++ b/arch/um/sys-i386/stub_segv.c | |||
@@ -1,32 +1,17 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2004 Jeff Dike (jdike@addtoit.com) | 2 | * Copyright (C) 2004 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) |
3 | * Licensed under the GPL | 3 | * Licensed under the GPL |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <signal.h> | ||
7 | #include <sys/select.h> /* The only way I can see to get sigset_t */ | ||
8 | #include <asm/unistd.h> | ||
9 | #include "as-layout.h" | ||
10 | #include "uml-config.h" | ||
11 | #include "sysdep/stub.h" | 6 | #include "sysdep/stub.h" |
12 | #include "sysdep/sigcontext.h" | 7 | #include "sysdep/sigcontext.h" |
13 | #include "sysdep/faultinfo.h" | ||
14 | 8 | ||
15 | void __attribute__ ((__section__ (".__syscall_stub"))) | 9 | void __attribute__ ((__section__ (".__syscall_stub"))) |
16 | stub_segv_handler(int sig) | 10 | stub_segv_handler(int sig) |
17 | { | 11 | { |
18 | struct sigcontext *sc = (struct sigcontext *) (&sig + 1); | 12 | struct sigcontext *sc = (struct sigcontext *) (&sig + 1); |
19 | int pid; | ||
20 | 13 | ||
21 | GET_FAULTINFO_FROM_SC(*((struct faultinfo *) STUB_DATA), sc); | 14 | GET_FAULTINFO_FROM_SC(*((struct faultinfo *) STUB_DATA), sc); |
22 | 15 | ||
23 | pid = stub_syscall0(__NR_getpid); | 16 | trap_myself(); |
24 | stub_syscall2(__NR_kill, pid, SIGUSR1); | ||
25 | |||
26 | /* Load pointer to sigcontext into esp, since we need to leave | ||
27 | * the stack in its original form when we do the sigreturn here, by | ||
28 | * hand. | ||
29 | */ | ||
30 | __asm__ __volatile__("mov %0,%%esp ; movl %1, %%eax ; " | ||
31 | "int $0x80" : : "a" (sc), "g" (__NR_sigreturn)); | ||
32 | } | 17 | } |