2021-01-06 00:54:09

by Jinyang He

[permalink] [raw]
Subject: [PATCH] MIPS: zboot: Avoid endless loop in clear BSS.

Commit 2ee1503e546f ("MIPS: zboot: head.S clean up").

After .noreorder removed, clear BSS fall into endless loop. The bne
instruction will add nop to the delay slot at compile time. So a0
register will not increment by 4. Fix it and clear BSS from _edata
to (_end - 1).

Signed-off-by: Jinyang He <[email protected]>
---
arch/mips/boot/compressed/head.S | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/boot/compressed/head.S b/arch/mips/boot/compressed/head.S
index 070b2fb..5795d0a 100644
--- a/arch/mips/boot/compressed/head.S
+++ b/arch/mips/boot/compressed/head.S
@@ -26,8 +26,8 @@
PTR_LA a0, _edata
PTR_LA a2, _end
1: sw zero, 0(a0)
+ addiu a0, a0, 4
bne a2, a0, 1b
- addiu a0, a0, 4

PTR_LA a0, (.heap) /* heap address */
PTR_LA sp, (.stack + 8192) /* stack address */
--
2.1.0


2021-01-06 02:07:22

by Jiaxun Yang

[permalink] [raw]
Subject: Re: [PATCH] MIPS: zboot: Avoid endless loop in clear BSS.



On Wed, Jan 6, 2021, at 8:47 AM, Jinyang He wrote:
> Commit 2ee1503e546f ("MIPS: zboot: head.S clean up").
>
> After .noreorder removed, clear BSS fall into endless loop. The bne
> instruction will add nop to the delay slot at compile time. So a0
> register will not increment by 4. Fix it and clear BSS from _edata
> to (_end - 1).

Oops, my fault.
My QEMU based local test setup somehow never really tested zboot.

Reviewed-by: Jiaxun Yang <[email protected]>

Thanks!

- Jiaxun

>
> Signed-off-by: Jinyang He <[email protected]>
> ---
> arch/mips/boot/compressed/head.S | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/mips/boot/compressed/head.S b/arch/mips/boot/compressed/head.S
> index 070b2fb..5795d0a 100644
> --- a/arch/mips/boot/compressed/head.S
> +++ b/arch/mips/boot/compressed/head.S
> @@ -26,8 +26,8 @@
> PTR_LA a0, _edata
> PTR_LA a2, _end
> 1: sw zero, 0(a0)
> + addiu a0, a0, 4
> bne a2, a0, 1b
> - addiu a0, a0, 4
>
> PTR_LA a0, (.heap) /* heap address */
> PTR_LA sp, (.stack + 8192) /* stack address */
> --
> 2.1.0
>
>

--
- Jiaxun

2021-01-07 16:32:04

by Thomas Bogendoerfer

[permalink] [raw]
Subject: Re: [PATCH] MIPS: zboot: Avoid endless loop in clear BSS.

On Wed, Jan 06, 2021 at 08:47:39AM +0800, Jinyang He wrote:
> Commit 2ee1503e546f ("MIPS: zboot: head.S clean up").
>
> After .noreorder removed, clear BSS fall into endless loop. The bne
> instruction will add nop to the delay slot at compile time. So a0
> register will not increment by 4. Fix it and clear BSS from _edata
> to (_end - 1).
>
> Signed-off-by: Jinyang He <[email protected]>
> ---
> arch/mips/boot/compressed/head.S | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

applied to mips-next.

Thomas.

--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]