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 Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel