Merge branch 'upstream' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev
[linux-2.6] / arch / um / sys-i386 / fault.c
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  */