arm926ejs: 8-byte align stack to avoid LDRD/STRD problems
authorSimon Kagstrom <simon.kagstrom@netinsight.net>
Tue, 6 Oct 2009 06:44:22 +0000 (08:44 +0200)
committerTom Rix <Tom.Rix@windriver.com>
Sat, 24 Oct 2009 14:55:25 +0000 (09:55 -0500)
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>
cpu/arm926ejs/start.S

index 8043322583a8870869dfa67c768b60dcf0f020ef..4421b6a99015dba90f58f39540379af2cad322bf 100644 (file)
@@ -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        */