Commit | Line | Data |
---|---|---|
f23699c9 NP |
1 | #include <asm/interrupt.h> |
2 | #include <asm/kprobes.h> | |
3 | ||
325678fd NP |
4 | struct soft_mask_table_entry { |
5 | unsigned long start; | |
6 | unsigned long end; | |
7 | }; | |
8 | ||
f23699c9 NP |
9 | struct restart_table_entry { |
10 | unsigned long start; | |
11 | unsigned long end; | |
12 | unsigned long fixup; | |
13 | }; | |
14 | ||
325678fd NP |
15 | extern struct soft_mask_table_entry __start___soft_mask_table[]; |
16 | extern struct soft_mask_table_entry __stop___soft_mask_table[]; | |
17 | ||
f23699c9 NP |
18 | extern struct restart_table_entry __start___restart_table[]; |
19 | extern struct restart_table_entry __stop___restart_table[]; | |
20 | ||
325678fd NP |
21 | /* Given an address, look for it in the soft mask table */ |
22 | bool search_kernel_soft_mask_table(unsigned long addr) | |
23 | { | |
24 | struct soft_mask_table_entry *smte = __start___soft_mask_table; | |
25 | ||
26 | while (smte < __stop___soft_mask_table) { | |
27 | unsigned long start = smte->start; | |
28 | unsigned long end = smte->end; | |
29 | ||
30 | if (addr >= start && addr < end) | |
31 | return true; | |
32 | ||
33 | smte++; | |
34 | } | |
35 | return false; | |
36 | } | |
37 | NOKPROBE_SYMBOL(search_kernel_soft_mask_table); | |
38 | ||
f23699c9 NP |
39 | /* Given an address, look for it in the kernel exception table */ |
40 | unsigned long search_kernel_restart_table(unsigned long addr) | |
41 | { | |
42 | struct restart_table_entry *rte = __start___restart_table; | |
43 | ||
44 | while (rte < __stop___restart_table) { | |
45 | unsigned long start = rte->start; | |
46 | unsigned long end = rte->end; | |
47 | unsigned long fixup = rte->fixup; | |
48 | ||
49 | if (addr >= start && addr < end) | |
50 | return fixup; | |
51 | ||
52 | rte++; | |
53 | } | |
54 | return 0; | |
55 | } | |
56 | NOKPROBE_SYMBOL(search_kernel_restart_table); |