vserver 1.9.3
[linux-2.6.git] / arch / um / sys-i386 / fault.c
index 6a0ec33..d0bbcdf 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
+ * Copyright (C) 2002 - 2004 Jeff Dike (jdike@addtoit.com)
  * Licensed under the GPL
  */
 
@@ -7,16 +7,24 @@
 #include "sysdep/ptrace.h"
 #include "sysdep/sigcontext.h"
 
-extern unsigned long search_exception_table(unsigned long addr);
+/* These two are from asm-um/uaccess.h and linux/module.h, check them. */
+struct exception_table_entry
+{
+       unsigned long insn;
+       unsigned long fixup;
+};
 
+const struct exception_table_entry *search_exception_tables(unsigned long add);
+
+/* Compare this to arch/i386/mm/extable.c:fixup_exception() */
 int arch_fixup(unsigned long address, void *sc_ptr)
 {
        struct sigcontext *sc = sc_ptr;
-       unsigned long fixup;
+       const struct exception_table_entry *fixup;
 
        fixup = search_exception_tables(address);
        if(fixup != 0){
-               sc->eip = fixup;
+               sc->eip = fixup->fixup;
                return(1);
        }
        return(0);