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

Stefan Roese sr at denx.de
Mon Oct 5 16:35:05 CEST 2009


On Monday 05 October 2009 16:30:54 Andrew Dyer wrote:
> > diff --git a/cpu/arm926ejs/start.S b/cpu/arm926ejs/start.S
> > index 8043322..ca520eb 100644
> > --- a/cpu/arm926ejs/start.S
> > +++ b/cpu/arm926ejs/start.S
> > @@ -171,7 +171,8 @@ stack_setup:
> >  #ifdef CONFIG_USE_IRQ
> >        sub     r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
> >  #endif
> > -       sub     sp, r0, #12             /* leave 3 words for abort-stack
> >    */ +       sub     sp, r0, #16             /* leave 3 words for
> > abort-stack and */ +                                       /* align stack
> > for ldrd/strd */
> 
> This doesn't guarantee an alignment.  Right above this code is a
> series of subtractions by constants, any one of which could throw the
> alignment out of whack and be difficult to figure out.

Yes, good catch.

> IMHO it's much safer to do the subtraction to R0, then mask the bottom
> address bits out to guarantee alignment, then stuff the results into
> sp.

Full ack. Thanks.

Cheers,
Stefan

--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de


More information about the U-Boot mailing list