diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-12 09:30:36 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-12 09:30:36 -0700 |
commit | 65d52cc9d47975f4fbd0a50e62f4a49be2c0514a (patch) | |
tree | 01f8eccc8ffac28112a58e397d96e8eba2de5ebf /lib | |
parent | d614aec4752f8c61b2e7cb77806b6bd59aa50836 (diff) | |
parent | 5933048c69edb546f1e93c26dc93816f0be9f754 (diff) | |
download | linux-3.10-65d52cc9d47975f4fbd0a50e62f4a49be2c0514a.tar.gz linux-3.10-65d52cc9d47975f4fbd0a50e62f4a49be2c0514a.tar.bz2 linux-3.10-65d52cc9d47975f4fbd0a50e62f4a49be2c0514a.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-module-and-param
* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-module-and-param:
module: cleanup FIXME comments about trimming exception table entries.
module: trim exception table on init free.
module: merge module_alloc() finally
uml module: fix uml build process due to this merge
x86 module: merge the rest functions with macros
x86 module: merge the same functions in module_32.c and module_64.c
uvesafb: improve parameter handling.
module_param: allow 'bool' module_params to be bool, not just int.
module_param: add __same_type convenience wrapper for __builtin_types_compatible_p
module_param: split perm field into flags and perm
module_param: invbool should take a 'bool', not an 'int'
cyber2000fb.c: use proper method for stopping unload if CONFIG_ARCH_SHARK
Diffstat (limited to 'lib')
-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 179c0874559..4cac81ec225 100644 --- a/lib/extable.c +++ b/lib/extable.c @@ -39,7 +39,26 @@ void sort_extable(struct exception_table_entry *start, sort(start, finish - start, sizeof(struct exception_table_entry), cmp_ex, NULL); } -#endif + +#ifdef CONFIG_MODULES +/* + * If the exception table is sorted, any referring to the module init + * will be at the beginning or the end. + */ +void trim_init_extable(struct module *m) +{ + /*trim the beginning*/ + while (m->num_exentries && within_module_init(m->extable[0].insn, m)) { + m->extable++; + m->num_exentries--; + } + /*trim the end*/ + while (m->num_exentries && + within_module_init(m->extable[m->num_exentries-1].insn, m)) + m->num_exentries--; +} +#endif /* CONFIG_MODULES */ +#endif /* !ARCH_HAS_SORT_EXTABLE */ #ifndef ARCH_HAS_SEARCH_EXTABLE /* |