From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Date: Sat, 17 Oct 2009 21:15:04 -0500 Subject: [U-Boot] [PATCH v3] arm926ejs: 8-byte align stack to avoid LDRD/STRD problems In-Reply-To: <20091006084422.3ba8b5c8@marrow.netinsight.se> References: <73173D32E9439E4ABB5151606C3E19E202EF7E99DC@SC-VEXCH1.marvell.com> <20091005152318.30bc6678@marrow.netinsight.se> <200910051635.05113.sr@denx.de> <20091005165324.510fdadc@marrow.netinsight.se> <20091006084422.3ba8b5c8@marrow.netinsight.se> Message-ID: <4ADA7A28.1060707@windriver.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 I have committed this to arm/master-sync 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 */