--- /dev/null
+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,40 @@
+ 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);
+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 \