diff options
Diffstat (limited to 'lib/extable.c')
| -rw-r--r-- | lib/extable.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/extable.c b/lib/extable.c index 179c08745595..4cac81ec225e 100644 --- a/lib/extable.c +++ b/lib/extable.c | |||
| @@ -39,7 +39,26 @@ void sort_extable(struct exception_table_entry *start, | |||
| 39 | sort(start, finish - start, sizeof(struct exception_table_entry), | 39 | sort(start, finish - start, sizeof(struct exception_table_entry), |
| 40 | cmp_ex, NULL); | 40 | cmp_ex, NULL); |
| 41 | } | 41 | } |
| 42 | #endif | 42 | |
| 43 | #ifdef CONFIG_MODULES | ||
| 44 | /* | ||
| 45 | * If the exception table is sorted, any referring to the module init | ||
| 46 | * will be at the beginning or the end. | ||
| 47 | */ | ||
| 48 | void trim_init_extable(struct module *m) | ||
| 49 | { | ||
| 50 | /*trim the beginning*/ | ||
| 51 | while (m->num_exentries && within_module_init(m->extable[0].insn, m)) { | ||
| 52 | m->extable++; | ||
| 53 | m->num_exentries--; | ||
| 54 | } | ||
| 55 | /*trim the end*/ | ||
| 56 | while (m->num_exentries && | ||
| 57 | within_module_init(m->extable[m->num_exentries-1].insn, m)) | ||
| 58 | m->num_exentries--; | ||
| 59 | } | ||
| 60 | #endif /* CONFIG_MODULES */ | ||
| 61 | #endif /* !ARCH_HAS_SORT_EXTABLE */ | ||
| 43 | 62 | ||
| 44 | #ifndef ARCH_HAS_SEARCH_EXTABLE | 63 | #ifndef ARCH_HAS_SEARCH_EXTABLE |
| 45 | /* | 64 | /* |
