[U-Boot] [PATCH v3] arm926ejs: 8-byte align stack to avoid LDRD/STRD problems

Tom Tom.Rix at windriver.com
Tue Oct 6 18:50:19 CEST 2009


Simon Kagstrom wrote:
> U-boot for Marvell Kirkwood boards no longer work after the EABI changes
> introduced in commit f772acf8a584067033eff1e231fcd1fb3a00d3d9. This
> turns out to be caused by a stack alignment issue. The armv5te
> instructions ldrd/strd instructions require 8-byte alignment to work
> properly (otherwise undefined behavior).
> 
> Tested on an OpenRD base board, where both printouts and ubifs stuff now
> works.
> 
> Signed-off-by: Simon Kagstrom <simon.kagstrom at netinsight.net>

I was going to hack something in omap start.S to test this for
you but I see it is already being done.

There is still a chance some board is dependent on the misaligned
stack or just is getting lucky.

It is better to push this change and see, than not.

Ack

Tom


> ---
> ChangeLog:
>  v2: Update after Andrews comments
>    * Mask away the low address bits to get 16-byte alignment
>  v3: Update after Andrews and Måns comments
>    * Use bic instruction to clear low address bits (I'm a ARM asm newbie as
>      you can see)
>    * Update description to actually match the code
> 
> Thanks again for all the comments!
> 
>  cpu/arm926ejs/start.S |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/cpu/arm926ejs/start.S b/cpu/arm926ejs/start.S
> index 8043322..4421b6a 100644
> --- a/cpu/arm926ejs/start.S
> +++ b/cpu/arm926ejs/start.S
> @@ -172,6 +172,7 @@ stack_setup:
>  	sub	r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
>  #endif
>  	sub	sp, r0, #12		/* leave 3 words for abort-stack    */
> +	bic	sp, r0, #7		/* 8-byte align stack for ABI compliance */
>  
>  clear_bss:
>  	ldr	r0, _bss_start		/* find start of bss segment        */



More information about the U-Boot mailing list