Index: linux-2.4.21/arch/um/kernel/Makefile =================================================================== --- linux-2.4.21.orig/arch/um/kernel/Makefile 2004-04-24 02:37:58.000000000 -0400 +++ linux-2.4.21/arch/um/kernel/Makefile 2004-04-24 02:51:03.000000000 -0400 @@ -37,7 +37,8 @@ export-objs-$(CONFIG_GPROF) += gprof_syms.o export-objs-$(CONFIG_GCOV) += gmon_syms.o -export-objs = ksyms.o process_kern.o signal_kern.o user_syms.o $(export-objs-y) +export-objs = ksyms.o process_kern.o signal_kern.o user_syms.o sysrq.o \ + $(export-objs-y) CFLAGS_user_syms.o = -D__AUTOCONF_INCLUDED__ $(DMODULES-y) $(DMODVERSIONS-y) \ -I/usr/include -I../include Index: linux-2.4.21/arch/um/kernel/sysrq.c =================================================================== --- linux-2.4.21.orig/arch/um/kernel/sysrq.c 2004-04-24 02:37:58.000000000 -0400 +++ linux-2.4.21/arch/um/kernel/sysrq.c 2004-04-24 02:51:03.000000000 -0400 @@ -86,6 +86,37 @@ show_trace((unsigned long *)esp); } +#ifdef CONFIG_MODULES +extern struct module *module_list; +extern struct module kernel_module; +#endif + +int is_kernel_text_address(unsigned long addr) +{ + int retval = 0; +#ifdef CONFIG_MODULES + struct module *mod; +#endif + if (addr >= (unsigned long) &_stext && + addr <= (unsigned long) &_etext) + return 1; + +#ifdef CONFIG_MODULES + for (mod = module_list; mod != &kernel_module; mod = mod->next) { + /* mod_bound tests for addr being inside the vmalloc'ed + * module area. Of course it'd be better to test only + * for the .text subset... */ + if (mod_bound(addr, 0, mod)) { + retval = 1; + break; + } + } +#endif + return retval; +} + +EXPORT_SYMBOL(is_kernel_text_address); + /* * Overrides for Emacs so that we follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically Index: linux-2.4.21/arch/i386/kernel/Makefile =================================================================== --- linux-2.4.21.orig/arch/i386/kernel/Makefile 2004-04-24 02:39:05.000000000 -0400 +++ linux-2.4.21/arch/i386/kernel/Makefile 2004-04-24 02:51:26.000000000 -0400 @@ -20,7 +20,7 @@ O_TARGET := kernel.o -export-objs := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o time.o traps.o dr_alloc.o +export-objs := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o time.o traps.o dr_alloc.o traps.o ifdef CONFIG_X86_SPEEDSTEP_ICH export-objs += speedstep-lib.o Index: linux-2.4.21/arch/i386/kernel/traps.c =================================================================== --- linux-2.4.21.orig/arch/i386/kernel/traps.c 2004-04-24 02:42:58.000000000 -0400 +++ linux-2.4.21/arch/i386/kernel/traps.c 2004-04-24 02:51:03.000000000 -0400 @@ -1339,3 +1339,41 @@ cobalt_init(); #endif } + +#ifdef CONFIG_MODULES +extern struct module *module_list; +extern struct module kernel_module; +#endif + +int is_kernel_text_address(unsigned long addr) +{ + int retval = 0; +#ifdef CONFIG_MODULES + struct module *mod; +#endif + if (addr >= (unsigned long) &_stext && + addr <= (unsigned long) &_etext); + return 1; + +#ifdef CONFIG_MODULES + for (mod = module_list; mod != &kernel_module; mod = mod->next) { + /* mod_bound tests for addr being inside the vmalloc'ed + * module area. Of course it'd be better to test only + * for the .text subset... */ + if (mod_bound(addr, 0, mod)) { + retval = 1; + break; + } + } +#endif + + return retval; +} + +int lookup_symbol(unsigned long address, char *buf, int buflen) +{ + return -ENOSYS; +} + +EXPORT_SYMBOL_GPL(is_kernel_text_address); +EXPORT_SYMBOL_GPL(lookup_symbol);