diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-i386/uaccess.h | 4 | ||||
| -rw-r--r-- | include/asm-ppc/uaccess.h | 2 | ||||
| -rw-r--r-- | include/asm-sparc64/uaccess.h | 4 | ||||
| -rw-r--r-- | include/linux/module.h | 23 |
4 files changed, 21 insertions, 12 deletions
diff --git a/include/asm-i386/uaccess.h b/include/asm-i386/uaccess.h index 377038170a0b..ef7f1101a94c 100644 --- a/include/asm-i386/uaccess.h +++ b/include/asm-i386/uaccess.h @@ -92,10 +92,6 @@ struct exception_table_entry unsigned long insn, fixup; }; -/* Returns 0 if exception not found and fixup otherwise. */ -extern unsigned long search_exception_table(unsigned long); - - /* * These are the main single-value transfer routines. They automatically * use the right size if we just have the right pointer type. diff --git a/include/asm-ppc/uaccess.h b/include/asm-ppc/uaccess.h index 1931d72ce8a9..51bb269cf589 100644 --- a/include/asm-ppc/uaccess.h +++ b/include/asm-ppc/uaccess.h @@ -56,8 +56,6 @@ struct exception_table_entry unsigned long insn, fixup; }; -/* Returns 0 if exception not found and fixup otherwise. */ -extern unsigned long search_exception_table(unsigned long); extern void sort_exception_table(void); /* diff --git a/include/asm-sparc64/uaccess.h b/include/asm-sparc64/uaccess.h index 5d9b9d4a070a..3f04ac105de9 100644 --- a/include/asm-sparc64/uaccess.h +++ b/include/asm-sparc64/uaccess.h @@ -84,8 +84,8 @@ struct exception_table_entry unsigned insn, fixup; }; -/* Returns 0 if exception not found and fixup otherwise. */ -extern unsigned long search_exception_table(unsigned long, unsigned long *); +/* Special exable search, which handles ranges. Returns fixup */ +unsigned long search_extables_range(unsigned long addr, unsigned long *g2); extern void __ret_efault(void); diff --git a/include/linux/module.h b/include/linux/module.h index 90159b356136..035fc8ce7a1d 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -43,6 +43,12 @@ struct kernel_symbol extern int init_module(void); extern void cleanup_module(void); +/* Archs provide a method of finding the correct exception table. */ +const struct exception_table_entry * +search_extable(const struct exception_table_entry *first, + const struct exception_table_entry *last, + unsigned long value); + #ifdef MODULE /* For replacement modutils, use an alias not a pointer. */ @@ -111,6 +117,9 @@ struct kernel_symbol_group const struct kernel_symbol *syms; }; +/* Given an address, look for it in the exception tables */ +const struct exception_table_entry *search_exception_tables(unsigned long add); + struct exception_table { struct list_head list; @@ -300,11 +309,21 @@ const char *module_address_lookup(unsigned long addr, unsigned long *offset, char **modname); +/* For extable.c to search modules' exception tables. */ +const struct exception_table_entry *search_module_extables(unsigned long addr); + #else /* !CONFIG_MODULES... */ #define EXPORT_SYMBOL(sym) #define EXPORT_SYMBOL_GPL(sym) #define EXPORT_SYMBOL_NOVERS(sym) +/* Given an address, look for it in the exception tables. */ +static inline const struct exception_table_entry * +search_module_extables(unsigned long addr) +{ + return NULL; +} + /* Get/put a kernel symbol (calls should be symmetric) */ #define symbol_get(x) (&(x)) #define symbol_put(x) do { } while(0) @@ -344,10 +363,6 @@ __attribute__((section(".gnu.linkonce.this_module"))) = { #endif /* KBUILD_MODNAME */ #endif /* MODULE */ -/* For archs to search exception tables */ -extern struct list_head extables; -extern spinlock_t modlist_lock; - #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x) /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */ |
