Browse Source

arm926ejs: 8-byte align stack to avoid LDRD/STRD problems

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>
Simon Kagstrom 15 years ago
parent
commit
8003c361de
1 changed files with 1 additions and 0 deletions
  1. 1 0
      cpu/arm926ejs/start.S

+ 1 - 0
cpu/arm926ejs/start.S

@@ -172,6 +172,7 @@ stack_setup:
 	sub	r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
 	sub	r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
 #endif
 #endif
 	sub	sp, r0, #12		/* leave 3 words for abort-stack    */
 	sub	sp, r0, #12		/* leave 3 words for abort-stack    */
+	bic	sp, r0, #7		/* 8-byte align stack for ABI compliance */
 
 
 clear_bss:
 clear_bss:
 	ldr	r0, _bss_start		/* find start of bss segment        */
 	ldr	r0, _bss_start		/* find start of bss segment        */