[POWERPC] Fix hang in start_ldr if _end or _edata is unaligned
authorOlaf Hering <olaf@aepfle.de>
Fri, 20 Oct 2006 13:57:15 +0000 (15:57 +0200)
committerPaul Mackerras <paulus@samba.org>
Wed, 25 Oct 2006 01:39:27 +0000 (11:39 +1000)
Quick fix for lack of memset(__bss_start, 0, _end-__bss_start) in
load_kernel().  If edata is unaligned, the loop will overwrite all
memory because r3 and r4 will never be equal.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/ppc/boot/simple/relocate.S

index 0c021556d78e25a822e573aea1d521fd06c0d8e5..1bbbcd2f2bcbd44c033329f479cc0def95ce7630 100644 (file)
@@ -154,8 +154,8 @@ do_relocate_out:
 
 start_ldr:
 /* Clear all of BSS and set up stack for C calls */
-       lis     r3,edata@h
-       ori     r3,r3,edata@l
+       lis     r3,__bss_start@h
+       ori     r3,r3,__bss_start@l
        lis     r4,end@h
        ori     r4,r4,end@l
        subi    r3,r3,4
@@ -163,7 +163,7 @@ start_ldr:
        li      r0,0
 50:    stwu    r0,4(r3)
        cmpw    cr0,r3,r4
-       bne     50b
+       blt     50b
 90:    mr      r9,r1           /* Save old stack pointer (in case it matters) */
        lis     r1,.stack@h
        ori     r1,r1,.stack@l