[U-Boot] [PATCH 1/1] Fix in interrupt handling part of arm926ejs.

Himanshu Chauhan hschauhan at nulltrace.org
Fri Oct 29 21:40:31 CEST 2010


Macro get_bad_stack used to load SVC mode stack pointer
in r13 and then re-use the register, without saving,
for further modifying the spsr, thus trashing the r13.
r13 is never loaded again after this.

Signed-off-by: Himanshu Chauhan <hschauhan at nulltrace.org>
---
 arch/arm/cpu/arm926ejs/start.S |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S
index 7397882..47d7aac 100644
--- a/arch/arm/cpu/arm926ejs/start.S
+++ b/arch/arm/cpu/arm926ejs/start.S
@@ -523,9 +523,8 @@ cpu_init_crit:
 	str	lr, [r13]	@ save caller lr in position 0 of saved stack
 	mrs	lr, spsr	@ get the spsr
 	str	lr, [r13, #4]	@ save spsr in position 1 of saved stack
-	mov	r13, #MODE_SVC	@ prepare SVC-Mode
-	@ msr	spsr_c, r13
-	msr	spsr, r13	@ switch modes, make sure moves will execute
+	mov	lr, #MODE_SVC	@ prepare SVC-Mode
+	msr	spsr, lr	@ switch modes, make sure moves will execute
 	mov	lr, pc		@ capture return pc
 	movs	pc, lr		@ jump to next instruction & switch modes.
 	.endm
-- 
1.7.0.4



More information about the U-Boot mailing list