
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, #16 /* leave 3 words forsub sp, r0, #12 /* leave 3 words for abort-stack
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@denx.de