Index: linux-2.4.22-vanilla/arch/i386/kernel/traps.c =================================================================== --- linux-2.4.22-vanilla.orig/arch/i386/kernel/traps.c 2003-05-16 05:28:59.000000000 +0400 +++ linux-2.4.22-vanilla/arch/i386/kernel/traps.c 2003-11-14 00:35:36.000000000 +0300 @@ -1004,3 +1004,35 @@ 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; +} + +EXPORT_SYMBOL_GPL(is_kernel_text_address); +EXPORT_SYMBOL_GPL(lookup_symbol); Index: linux-2.4.22-vanilla/arch/i386/kernel/Makefile =================================================================== --- linux-2.4.22-vanilla.orig/arch/i386/kernel/Makefile 2003-11-03 23:22:06.000000000 +0300 +++ linux-2.4.22-vanilla/arch/i386/kernel/Makefile 2003-11-14 00:30:28.000000000 +0300 @@ -14,7 +14,8 @@ O_TARGET := kernel.o -export-objs := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o time.o setup.o +export-objs := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o time.o \ + setup.o traps.o obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \ ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_i386.o \