From d716b126718d874f52ffb694e6c22b7235cec483 Mon Sep 17 00:00:00 2001
From: wdenk <wdenk>
Date: Mon, 12 Apr 2004 16:12:49 +0000
Subject: [PATCH] Add startup code to clear the BSS of standalone applications

---
 CHANGELOG         | 2 ++
 examples/mips.lds | 3 +++
 examples/nios.lds | 1 +
 examples/stubs.c  | 9 +++++++++
 4 files changed, 15 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index 3923ca8ed6..cd057958fb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,8 @@
 Changes for U-Boot 1.1.1:
 ======================================================================
 
+* add startup code to clear the BSS of standalone applications
+
 * Fix if / elif handling bug in HUSH shell
 
 ======================================================================
diff --git a/examples/mips.lds b/examples/mips.lds
index 8ed01c4458..9d9849bf5c 100644
--- a/examples/mips.lds
+++ b/examples/mips.lds
@@ -51,6 +51,9 @@ SECTIONS
 	.sdata  : { *(.sdata) }
 
 	. = ALIGN(4);
+	__bss_start = .;
 	.sbss  : { *(.sbss) }
 	.bss  : { *(.bss) }
+
+	_end = .;
 }
diff --git a/examples/nios.lds b/examples/nios.lds
index 527eb3ad45..dd5bfad7b1 100644
--- a/examples/nios.lds
+++ b/examples/nios.lds
@@ -57,4 +57,5 @@ SECTIONS
 	}
 	. = ALIGN(4);
 	__bss_end = .;
+	_end = .;
 }
diff --git a/examples/stubs.c b/examples/stubs.c
index a26337a926..a897d0d213 100644
--- a/examples/stubs.c
+++ b/examples/stubs.c
@@ -110,8 +110,17 @@ static void __attribute__((unused)) dummy(void)
 #include <_exports.h>
 }
 
+extern unsigned long __bss_start, _end;
+
 void app_startup(char **argv)
 {
+	unsigned long * cp = &__bss_start;
+
+	/* Zero out BSS */
+	while (cp < &_end) {
+		*cp++ = 0;
+	}
+
 #if defined(CONFIG_I386)
 	/* x86 does not have a dedicated register for passing global_data */
 	global_data = (gd_t *)argv[-1];
-- 
GitLab