xref: /openbmc/linux/arch/powerpc/lib/restart_table.c (revision f23699c93becd746295aaa506537882a46a62219)
1 #include <asm/interrupt.h>
2 #include <asm/kprobes.h>
3 
4 struct restart_table_entry {
5 	unsigned long start;
6 	unsigned long end;
7 	unsigned long fixup;
8 };
9 
10 extern struct restart_table_entry __start___restart_table[];
11 extern struct restart_table_entry __stop___restart_table[];
12 
13 /* Given an address, look for it in the kernel exception table */
14 unsigned long search_kernel_restart_table(unsigned long addr)
15 {
16 	struct restart_table_entry *rte = __start___restart_table;
17 
18 	while (rte < __stop___restart_table) {
19 		unsigned long start = rte->start;
20 		unsigned long end = rte->end;
21 		unsigned long fixup = rte->fixup;
22 
23 		if (addr >= start && addr < end)
24 			return fixup;
25 
26 		rte++;
27 	}
28 	return 0;
29 }
30 NOKPROBE_SYMBOL(search_kernel_restart_table);
31