From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Roese Date: Mon, 5 Oct 2009 16:35:05 +0200 Subject: [U-Boot] [PATCH] arm926ejs: 16-byte align stack to avoid LDRD/STRD problems In-Reply-To: References: <73173D32E9439E4ABB5151606C3E19E202EF7E99DC@SC-VEXCH1.marvell.com> <20091005152318.30bc6678@marrow.netinsight.se> Message-ID: <200910051635.05113.sr@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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