xref: /linux/arch/x86/um/fault.c (revision 24168c5e6dfbdd5b414f048f47f75d64533296ca)
1 /*
2  * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3  * Licensed under the GPL
4  */
5 
6 #include <arch.h>
7 #include <sysdep/ptrace.h>
8 
9 /* These two are from asm-um/uaccess.h and linux/module.h, check them. */
10 struct exception_table_entry
11 {
12 	unsigned long insn;
13 	unsigned long fixup;
14 };
15 
16 const struct exception_table_entry *search_exception_tables(unsigned long add);
17 
18 /* Compare this to arch/i386/mm/extable.c:fixup_exception() */
19 int arch_fixup(unsigned long address, struct uml_pt_regs *regs)
20 {
21 	const struct exception_table_entry *fixup;
22 
23 	fixup = search_exception_tables(address);
24 	if (fixup) {
25 		UPT_IP(regs) = fixup->fixup;
26 		return 1;
27 	}
28 	return 0;
29 }
30