
ppc4xx clear_bss() fails if BSS segment size is not divisible by 4 without remainder. This patch provides fix for this problem.
Signed-off-by: Anatolij Gustschin agust@denx.de --- cpu/ppc4xx/start.S | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/cpu/ppc4xx/start.S b/cpu/ppc4xx/start.S index 9626b65..9175e31 100644 --- a/cpu/ppc4xx/start.S +++ b/cpu/ppc4xx/start.S @@ -1566,16 +1566,25 @@ clear_bss: lwz r4,GOT(_end)
cmplw 0, r3, r4 - beq 6f + beq 7f
li r0, 0 -5: + + andi. r5, r4, 3 + beq 6f + sub r4, r4, r5 + mtctr r5 + mr r5, r4 +5: stb r0, 0(r5) + addi r5, r5, 1 + bdnz 5b +6: stw r0, 0(r3) addi r3, r3, 4 cmplw 0, r3, r4 - bne 5b -6: + bne 6b
+7: mr r3, r9 /* Init Data pointer */ mr r4, r10 /* Destination Address */ bl board_init_r