Index: etherboot-5.4.3/src/core/main.c
===================================================================
--- etherboot-5.4.3.orig/src/core/main.c	2008-07-08 14:57:49.000000000 -0700
+++ etherboot-5.4.3/src/core/main.c	2008-07-08 14:58:15.000000000 -0700
@@ -37,6 +37,7 @@
 int	url_port;		
 
 char as_main_program = 1;
+char need_bss_clear = 1;
 
 /* in_call(): the entry point to Etherboot.  Generally called from
  * arch_in_call(), which in turn will have been invoked from
@@ -209,8 +210,11 @@
 	char *p;
 	int state;
 
-	for (p = _bss; p < _ebss; p++)
-		*p = 0;	/* Zero BSS */
+	if (need_bss_clear) {
+		for (p = _bss; p < _ebss; p++)
+			*p = 0;	/* Zero BSS */
+		need_bss_clear = 0;
+	}
 
 	console_init();
 	arch_main(data,params);
Index: etherboot-5.4.3/src/core/pxe_export.c
===================================================================
--- etherboot-5.4.3.orig/src/core/pxe_export.c	2008-07-08 14:57:49.000000000 -0700
+++ etherboot-5.4.3/src/core/pxe_export.c	2008-07-08 14:58:15.000000000 -0700
@@ -1302,6 +1302,7 @@
  */
 PXENV_EXIT_t pxenv_undi_loader ( undi_loader_t *loader ) {
 	uint32_t loader_phys = virt_to_phys ( loader );
+	char *p;
 
 	DBG ( "PXENV_UNDI_LOADER" );
 	
@@ -1313,6 +1314,11 @@
 	 * this, but it's currently split interestingly between main()
 	 * and main_loop()...
 	 */
+	if (need_bss_clear) {
+		for (p = _bss; p < _ebss; p++)
+			*p = 0;	/* Zero BSS */
+		need_bss_clear = 0;
+	}
 	console_init();
 	cpu_setup();
 	setup_timers();
Index: etherboot-5.4.3/src/include/etherboot.h
===================================================================
--- etherboot-5.4.3.orig/src/include/etherboot.h	2008-07-08 14:57:49.000000000 -0700
+++ etherboot-5.4.3/src/include/etherboot.h	2008-07-08 14:58:09.000000000 -0700
@@ -231,6 +231,7 @@
 extern int main(in_call_data_t *data, va_list params);
 extern int loadkernel P((const char *fname));
 extern char as_main_program;
+extern char need_bss_clear;
 /* nic.c */
 extern void rx_qdrain P((void));
 extern int tftp P((const char *name, int (*)(unsigned char *, unsigned int, unsigned int, int)));
