
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@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 */