[U-Boot] [PATCH 2/2] mpc85xx: Initial SP alignment is wrong.
Joakim Tjernlund
Joakim.Tjernlund at transmode.se
Fri Jul 20 11:20:46 CEST 2012
PowerPC mandates SP to be 16 bytes aligned.
Furthermore, a stack frame is added, pointing to the reset vector
which is just get in the way when gdb is walking the stack because
the reset vector may not accessible depending on emulator settings.
Also use a temp register so gdb doesn't pick up intermediate values.
Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund at transmode.se>
---
arch/powerpc/cpu/mpc85xx/start.S | 16 +++++-----------
1 files changed, 5 insertions(+), 11 deletions(-)
diff --git arch/powerpc/cpu/mpc85xx/start.S arch/powerpc/cpu/mpc85xx/start.S
index 8d66cf1..8c75af9 100644
--- arch/powerpc/cpu/mpc85xx/start.S
+++ arch/powerpc/cpu/mpc85xx/start.S
@@ -848,18 +848,12 @@ version_string:
.globl _start_cont
_start_cont:
/* Setup the stack in initial RAM,could be L2-as-SRAM or L1 dcache*/
- lis r1,CONFIG_SYS_INIT_RAM_ADDR at h
- ori r1,r1,CONFIG_SYS_INIT_SP_OFFSET at l
-
+ lis r2,(CONFIG_SYS_INIT_RAM_ADDR)@h
+ ori r2,r2,((CONFIG_SYS_INIT_SP_OFFSET-16)&~0xf)@l /* Align to 16 */
li r0,0
- stwu r0,-4(r1)
- stwu r0,-4(r1) /* Terminate call chain */
-
- stwu r1,-8(r1) /* Save back chain and move SP */
- lis r0,RESET_VECTOR at h /* Address of reset vector */
- ori r0,r0,RESET_VECTOR at l
- stwu r1,-8(r1) /* Save back chain and move SP */
- stw r0,+12(r1) /* Save return addr (underflow vect) */
+ stw r0,-4(r2) /* Store a NULL LR */
+ stw r0,0(r2) /* Store a NULL Back Chain */
+ mr r1,r2 /* Transfer to SP(r1) */
GET_GOT
bl cpu_init_early_f
--
1.7.3.4
More information about the U-Boot
mailing list