From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vitaly Kuzmichev Date: Tue, 15 Jun 2010 17:16:06 +0400 Subject: [U-Boot] [PATCH] ARM1136: Align stack to 8 bytes In-Reply-To: <47F3F98010FF784EBEE6526EAAB078D10635E718@tq-mailsrv.tq-net.de> References: <47F3F98010FF784EBEE6526EAAB078D10635E718@tq-mailsrv.tq-net.de> Message-ID: <4C177D16.3060600@mvista.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Ok, but probably other ARM starters should be fixed too? I have no possibility to check all ARM CPUs, but I believe this patch won't break them. On 06/15/2010 03:16 PM, Martin Krause wrote: > Hi Vitaly, > > the exact same problem applies to ARM1176. Maybe you could update > your patch and add the same line to /arch/arm/cpu/arm1176/start.S. > I am currently not working on an top-of-tree U-Boot, so it would > be not so easy for me to create a separate patch for ARM1176. > > Regards, > Martin > > u-boot-bounces at lists.denx.de wrote on Tuesday, June 15, 2010 12:52 PM: >> 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 further 'push' into the stack >> overwrites first 4 bytes of VLA. >> >> Signed-off-by: Vitaly Kuzmichev >> Signed-off-by: George G. Davis >> --- >> arch/arm/cpu/arm1136/start.S | 1 + >> 1 files changed, 1 insertions(+), 0 deletions(-) >> >> diff --git a/arch/arm/cpu/arm1136/start.S >> b/arch/arm/cpu/arm1136/start.S index 957f438..d0c5717 100644 >> --- a/arch/arm/cpu/arm1136/start.S >> +++ b/arch/arm/cpu/arm1136/start.S >> @@ -185,6 +185,7 @@ stack_setup: >> #endif >> sub sp, r0, #12 /* leave 3 words for abort-stack */ >> #endif /* CONFIG_PRELOADER */ >> + bic sp, sp, #7 /* 8-byte alignment */ >> >> clear_bss: >> ldr r0, _bss_start /* find start of bss segment */