ARM U-Boot BSS zeroing

Message ID 20130513153729.GL28516@rocoto.smurfnet.nu
State New
Headers show

Commit Message

Leif Lindholm May 13, 2013, 3:37 p.m.
The import into the collaborative branch discarded the call to
get_real_bss_start before starting the BSS zeroing operation.

While get_real_bss_start might have been a bit of an ugly hack,
simply discarding it means that we now end up doing unaligned
STR operations, and any platform with MMU disabled fails to boot.

The attached patch prepends a bytewise zeroing loop until
word-aligned, and then continue as before.

/
    Leif

Patch hide | download patch | download mbox

=== modified file 'grub-core/kern/arm/uboot/startup.S'
--- grub-core/kern/arm/uboot/startup.S	2013-05-03 13:07:39 +0000
+++ grub-core/kern/arm/uboot/startup.S	2013-05-13 14:59:43 +0000
@@ -100,7 +100,13 @@ 
 	@ Since we _are_ the C run-time, we need to manually zero the BSS
 	@ region before continuing
 	ldr	r0, =EXT_C(__bss_start)	@ zero from here
-	ldr	r1, =EXT_C(_end)		@ to here
+	@ If unaligned, bytewise zero until base address aligned.
+	mov	r1, #0
+1:	tst	r0, #3
+	beq	2f
+	strb	r1, [r0], #1
+	b	1b
+2:	ldr	r1, =EXT_C(_end)		@ to here
 	mov	r2, #0
 1:	str	r2, [r0], #4
 	cmp	r0, r1