diff -u linux-2.4.20-gentoo-r7/arch/i386/vmlinux.lds.S.orig linux-2.4.20-gentoo-r7/arch/i386/vmlinux.lds.S
--- linux-2.4.20-gentoo-r7/arch/i386/vmlinux.lds.S.orig	2003-10-19 18:02:59.000000000 +0200
+++ linux-2.4.20-gentoo-r7/arch/i386/vmlinux.lds.S	2003-10-19 20:31:27.000000000 +0200
@@ -27,6 +27,7 @@
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  _data = .;
   .data : {			/* Data */
 	*(.data)
 	CONSTRUCTORS
diff -u linux-2.4.20-gentoo-r7/arch/i386/mm/init.c.orig linux-2.4.20-gentoo-r7/arch/i386/mm/init.c
--- linux-2.4.20-gentoo-r7/arch/i386/mm/init.c.orig	2003-10-19 18:02:59.000000000 +0200
+++ linux-2.4.20-gentoo-r7/arch/i386/mm/init.c	2003-10-19 20:25:35.000000000 +0200
@@ -97,7 +97,7 @@
 
 /* References to section boundaries */
 
-extern char _text, _etext, _edata, __bss_start, _end;
+extern char _text, _etext, _data, _edata, __bss_start, _end;
 extern char __init_begin, __init_end;
 
 static inline void set_pte_phys (unsigned long vaddr,
@@ -485,7 +485,7 @@
 	reservedpages = free_pages_init();
 
 	codesize =  (unsigned long) &_etext - (unsigned long) &_text;
-	datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
+	datasize =  (unsigned long) &_edata - (unsigned long) &_data;
 	initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
 
 	printk(KERN_INFO "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, %dk init, %ldk highmem)\n",