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
=== 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
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel