diff options
Diffstat (limited to 'arch/um/sys-i386/fault.c')
-rw-r--r-- | arch/um/sys-i386/fault.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/arch/um/sys-i386/fault.c b/arch/um/sys-i386/fault.c new file mode 100644 index 000000000000..d0bbcdfdb53f --- /dev/null +++ b/arch/um/sys-i386/fault.c | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2002 - 2004 Jeff Dike (jdike@addtoit.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #include <signal.h> | ||
7 | #include "sysdep/ptrace.h" | ||
8 | #include "sysdep/sigcontext.h" | ||
9 | |||
10 | /* These two are from asm-um/uaccess.h and linux/module.h, check them. */ | ||
11 | struct exception_table_entry | ||
12 | { | ||
13 | unsigned long insn; | ||
14 | unsigned long fixup; | ||
15 | }; | ||
16 | |||
17 | const struct exception_table_entry *search_exception_tables(unsigned long add); | ||
18 | |||
19 | /* Compare this to arch/i386/mm/extable.c:fixup_exception() */ | ||
20 | int arch_fixup(unsigned long address, void *sc_ptr) | ||
21 | { | ||
22 | struct sigcontext *sc = sc_ptr; | ||
23 | const struct exception_table_entry *fixup; | ||
24 | |||
25 | fixup = search_exception_tables(address); | ||
26 | if(fixup != 0){ | ||
27 | sc->eip = fixup->fixup; | ||
28 | return(1); | ||
29 | } | ||
30 | return(0); | ||
31 | } | ||
32 | |||
33 | /* | ||
34 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
35 | * Emacs will notice this stuff at the end of the file and automatically | ||
36 | * adjust the settings for this buffer only. This must remain at the end | ||
37 | * of the file. | ||
38 | * --------------------------------------------------------------------------- | ||
39 | * Local variables: | ||
40 | * c-file-style: "linux" | ||
41 | * End: | ||
42 | */ | ||