Patchwork [U-Boot,v5] arm: Fix clear bss loop for zero length bss

login
register
mail settings
Submitter Christian Riesch
Date Nov. 29, 2011, 10:58 a.m.
Message ID <1322564285-6911-1-git-send-email-christian.riesch@omicron.at>
Download mbox | patch
Permalink /patch/128276/
State Superseded
Delegated to: Albert ARIBAUD
Headers show

Comments

Christian Riesch - Nov. 29, 2011, 10:58 a.m.
This patch fixes the clear bss loop for bss sections that have
zero length, i.e., where __bss_start == __bss_end__.

Signed-off-by: Christian Riesch <christian.riesch@omicron.at>
Cc: Albert Aribaud <albert.u.boot@aribaud.net>
---
Hi,
this is v5 of a patch out of my recent patchset

[PATCH v3 00/15] Add an SPL to boot the da850evm from SPI
http://lists.denx.de/pipermail/u-boot/2011-November/111182.html

Changes for v5:
- correct subject line

Changes for v4:
- split the patchset since it is getting quite big

Regards, Christian

 arch/arm/cpu/arm926ejs/start.S |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)
Albert ARIBAUD - Nov. 30, 2011, 8:13 p.m.
Hi Christian,

Le 29/11/2011 11:58, Christian Riesch a écrit :
> This patch fixes the clear bss loop for bss sections that have
> zero length, i.e., where __bss_start == __bss_end__.

Just out of curiosity, did you actually hit a scenario when you had a 
really empty BSS? Not that I intend to reject this patch because of 
this, mind.

> Signed-off-by: Christian Riesch<christian.riesch@omicron.at>
> Cc: Albert Aribaud<albert.u.boot@aribaud.net>
> ---
> Hi,
> this is v5 of a patch out of my recent patchset
>
> [PATCH v3 00/15] Add an SPL to boot the da850evm from SPI
> http://lists.denx.de/pipermail/u-boot/2011-November/111182.html
>
> Changes for v5:
> - correct subject line
>
> Changes for v4:
> - split the patchset since it is getting quite big
>
> Regards, Christian
>
>   arch/arm/cpu/arm926ejs/start.S |    8 +++++---
>   1 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S
> index 8b5355b..772793c 100644
> --- a/arch/arm/cpu/arm926ejs/start.S
> +++ b/arch/arm/cpu/arm926ejs/start.S
> @@ -299,10 +299,12 @@ clear_bss:
>   #endif
>   	mov	r2, #0x00000000		/* clear			    */
>
> -clbss_l:str	r2, [r0]		/* clear loop...		    */
> +clbss_l:cmp	r0, r1			/* clear loop...		    */
> +	beq	clbss_e

For safety, you had better use a bge here, in case r1-r0 is not a 
multiple of 4.

> +	str	r2, [r0]
>   	add	r0, r0, #4
> -	cmp	r0, r1
> -	bne	clbss_l
> +	b	clbss_l
> +clbss_e:
>
>   #ifndef CONFIG_SPL_BUILD
>   	bl coloured_LED_init

Amicalement,
Christian Riesch - Nov. 30, 2011, 9:02 p.m.
Hi Albert,

On Wednesday, November 30, 2011, Albert ARIBAUD <albert.u.boot@aribaud.net>
wrote:
> Hi Christian,
>
> Le 29/11/2011 11:58, Christian Riesch a écrit :
>>
>> This patch fixes the clear bss loop for bss sections that have
>> zero length, i.e., where __bss_start == __bss_end__.
>
> Just out of curiosity, did you actually hit a scenario when you had a
really empty BSS? Not that I intend to reject this patch because of this,
mind.

Yes, I did. The patchset in [1] (which is not a complete SPL but was for
testing only, it hangs after initialization of the hardware) results in an
empty bss.
It took me quite some time to find out why my board didn't get out of the
relocation code... ;-)

[1] http://lists.denx.de/pipermail/u-boot/2011-November/109886.html

>
>> Signed-off-by: Christian Riesch<christian.riesch@omicron.at>
>> Cc: Albert Aribaud<albert.u.boot@aribaud.net>
>> ---
>> Hi,
>> this is v5 of a patch out of my recent patchset
>>
>> [PATCH v3 00/15] Add an SPL to boot the da850evm from SPI
>> http://lists.denx.de/pipermail/u-boot/2011-November/111182.html
>>
>> Changes for v5:
>> - correct subject line
>>
>> Changes for v4:
>> - split the patchset since it is getting quite big
>>
>> Regards, Christian
>>
>>  arch/arm/cpu/arm926ejs/start.S |    8 +++++---
>>  1 files changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm/cpu/arm926ejs/start.S
b/arch/arm/cpu/arm926ejs/start.S
>> index 8b5355b..772793c 100644
>> --- a/arch/arm/cpu/arm926ejs/start.S
>> +++ b/arch/arm/cpu/arm926ejs/start.S
>> @@ -299,10 +299,12 @@ clear_bss:
>>  #endif
>>        mov     r2, #0x00000000         /* clear
   */
>>
>> -clbss_l:str    r2, [r0]                /* clear loop...
   */
>> +clbss_l:cmp    r0, r1                  /* clear loop...
   */
>> +       beq     clbss_e
>
> For safety, you had better use a bge here, in case r1-r0 is not a
multiple of 4.

Ok, I'll change that.

>
>> +       str     r2, [r0]
>>        add     r0, r0, #4
>> -       cmp     r0, r1
>> -       bne     clbss_l
>> +       b       clbss_l
>> +clbss_e:
>>
>>  #ifndef CONFIG_SPL_BUILD
>>        bl coloured_LED_init
>

Thanks for your comments!
Regards, Christian

> Amicalement,
> --
> Albert.
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
Christian Riesch - Dec. 1, 2011, 7:53 a.m.
Hi Albert,

On Wed, Nov 30, 2011 at 9:13 PM, Albert ARIBAUD
<albert.u.boot@aribaud.net> wrote:
> Le 29/11/2011 11:58, Christian Riesch a écrit :
>> This patch fixes the clear bss loop for bss sections that have
>> zero length, i.e., where __bss_start == __bss_end__.
[...]
>> diff --git a/arch/arm/cpu/arm926ejs/start.S
>> b/arch/arm/cpu/arm926ejs/start.S
>> index 8b5355b..772793c 100644
>> --- a/arch/arm/cpu/arm926ejs/start.S
>> +++ b/arch/arm/cpu/arm926ejs/start.S
>> @@ -299,10 +299,12 @@ clear_bss:
>>  #endif
>>        mov     r2, #0x00000000         /* clear
>>  */
>>
>> -clbss_l:str    r2, [r0]                /* clear loop...
>>  */
>> +clbss_l:cmp    r0, r1                  /* clear loop...
>>  */
>> +       beq     clbss_e
>
>
> For safety, you had better use a bge here, in case r1-r0 is not a multiple
> of 4.

Shouldn't it be bhs instead because we are dealing with unsigned
numbers here? bge is signed >=.

Regards, Christian

>
>
>> +       str     r2, [r0]
>>        add     r0, r0, #4
>> -       cmp     r0, r1
>> -       bne     clbss_l
>> +       b       clbss_l
>> +clbss_e:
>>
>>  #ifndef CONFIG_SPL_BUILD
>>        bl coloured_LED_init
>
>
> Amicalement,
> --
> Albert.
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

Patch

diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S
index 8b5355b..772793c 100644
--- a/arch/arm/cpu/arm926ejs/start.S
+++ b/arch/arm/cpu/arm926ejs/start.S
@@ -299,10 +299,12 @@  clear_bss:
 #endif
 	mov	r2, #0x00000000		/* clear			    */
 
-clbss_l:str	r2, [r0]		/* clear loop...		    */
+clbss_l:cmp	r0, r1			/* clear loop...		    */
+	beq	clbss_e
+	str	r2, [r0]
 	add	r0, r0, #4
-	cmp	r0, r1
-	bne	clbss_l
+	b	clbss_l
+clbss_e:
 
 #ifndef CONFIG_SPL_BUILD
 	bl coloured_LED_init