diff options
author | Olaf Hering <olaf@aepfle.de> | 2006-10-20 15:57:15 +0200 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-10-25 11:39:27 +1000 |
commit | fb20f65a01a97bdf4bb746eecfc24a08561e2648 (patch) | |
tree | 2082553fbc91d56aa36b21f36738354f1d8c7edd | |
parent | aa7a32cbdac50bb46a75722faa359993dab07c61 (diff) | |
download | blackbird-op-linux-fb20f65a01a97bdf4bb746eecfc24a08561e2648.tar.gz blackbird-op-linux-fb20f65a01a97bdf4bb746eecfc24a08561e2648.zip |
[POWERPC] Fix hang in start_ldr if _end or _edata is unaligned
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>
-rw-r--r-- | arch/ppc/boot/simple/relocate.S | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/ppc/boot/simple/relocate.S b/arch/ppc/boot/simple/relocate.S index 0c021556d78e..1bbbcd2f2bcb 100644 --- a/arch/ppc/boot/simple/relocate.S +++ b/arch/ppc/boot/simple/relocate.S @@ -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 |