changeset 2773:4db2c98d89f8

* src/vectors.S (start): The loop to initialize BSS was using a BLS to terminate. This caused an extra zero to be stored beyond the end of __bss_end. Usually this is benign, but when __bss_end is at the very top of RAM, and the hardware generates an exception for illegal accesses, this can crash the program before it even starts. The fix is to use a BLT instructions which will terminate the loop 1 word earlier.
author nickg
date Mon, 09 Feb 2009 15:34:49 +0000
parents 7337b9f24edf
children 1a58c9c41c50
files packages/hal/arm/arch/current/ChangeLog packages/hal/arm/arch/current/src/vectors.S
diffstat 2 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/arm/arch/current/ChangeLog
+++ b/packages/hal/arm/arch/current/ChangeLog
@@ -1,3 +1,13 @@
+2009-02-09  Nick Garnett  <nickg@ecoscentric.com>
+
+	* src/vectors.S (start): The loop to initialize BSS was using a
+	BLS to terminate. This caused an extra zero to be stored beyond
+	the end of __bss_end. Usually this is benign, but when __bss_end
+	is at the very top of RAM, and the hardware generates an exception
+	for illegal accesses, this can crash the program before it even
+	starts. The fix is to use a BLT instructions which will terminate
+	the loop 1 word earlier.
+
 2009-02-02  Bart Veer  <bartv@ecoscentric.com>
 
 	* cdl/hal_arm.cdl: add new architectural CFLAGS and LDFLAGS
--- a/packages/hal/arm/arch/current/src/vectors.S
+++ b/packages/hal/arm/arch/current/src/vectors.S
@@ -450,7 +450,7 @@ 2:
         beq     2f
 1:      str     r0,[r1],#4
         cmp     r1,r2
-        bls     1b
+        blt     1b
 2:
 
         // Run kernel + application in THUMB mode