[U-Boot-Users] [PATCH] Fix ppc4xx clear_bss() code

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

On Wed, 5 Dec 2007 17:43:20 +0100 agustschin@t-online.de (Anatolij Gustschin) wrote:
ppc4xx clear_bss() fails if BSS segment size is not divisible by 4 without remainder. This patch provides fix for this problem.
Isn't it better to fix the linker script so that the size _is_ divisible by 4?
Haavard

In message 20071205194258.79f67211@siona you wrote:
ppc4xx clear_bss() fails if BSS segment size is not divisible by 4 without remainder. This patch provides fix for this problem.
Isn't it better to fix the linker script so that the size _is_ divisible by 4?
From the robustness point of view Anatolij's patch is needed - it is
a desirable feature of software to show correct behaviour even with (slightly) wrong input.
ACKED.
Best regards,
Wolfgang Denk
participants (3)
-
agustschin@t-online.de
-
Haavard Skinnemoen
-
Wolfgang Denk