diff options
author | Vitaly Kuzmichev <vkuzmichev@mvista.com> | 2010-06-15 22:18:11 +0400 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2010-06-22 22:15:07 +0200 |
commit | a71da1b6c96205549ca2e7cf991e2340181bbfcf (patch) | |
tree | 4956c3b08860ad3467ac68d51ec2d2c1f190ab6d /arch/arm/cpu/pxa | |
parent | 96b35730a43160afa025ac405961737dbb0682b4 (diff) | |
download | u-boot-imx-a71da1b6c96205549ca2e7cf991e2340181bbfcf.zip u-boot-imx-a71da1b6c96205549ca2e7cf991e2340181bbfcf.tar.gz u-boot-imx-a71da1b6c96205549ca2e7cf991e2340181bbfcf.tar.bz2 |
ARM: Align stack to 8 bytes
The ARM ABI requires that the stack be aligned to 8 bytes as it is noted
in Procedure Call Standard for the ARM Architecture:
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/index.html
Unaligned SP also causes the problem with variable-length arrays
allocation when VLA address becomes less than stack pointer during
aligning of this address, so the next 'push' in the stack overwrites
first 4 bytes of VLA.
Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
Tested on tx25(mx25), imx27lite(mx27), qong(mx31) and trab(s3c2400)
Tested-by: Wolfgang Denk <wd@denx.de>
Diffstat (limited to 'arch/arm/cpu/pxa')
-rw-r--r-- | arch/arm/cpu/pxa/start.S | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/arm/cpu/pxa/start.S b/arch/arm/cpu/pxa/start.S index 3989fa6..e07c8c2 100644 --- a/arch/arm/cpu/pxa/start.S +++ b/arch/arm/cpu/pxa/start.S @@ -140,10 +140,8 @@ stack_setup: #ifdef CONFIG_USE_IRQ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ) #endif /* CONFIG_USE_IRQ */ - sub r0, r0, #12 /* leave 3 words for abort-stack */ - bic sp, r0, #7 /* NOTE: stack MUST be aligned to */ - /* 8 bytes in case we want to use */ - /* 64bit datatypes (eg. VSPRINTF64) */ + sub sp, r0, #12 /* leave 3 words for abort-stack */ + bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ clear_bss: ldr r0, _bss_start /* find start of bss segment */ |