[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-arm-kernel
Subject:    patch for vector stubs
From:       Philip Blundell <philb () gnu ! org>
Date:       2001-12-28 15:37:17
[Download RAW message or body]

This is against 2.4.16.  It's not necessary to load R13 anew each time an
exception happens; you can just initialise it once and then leave it alone.

p.

--- entry-armv.S	Sun Dec  2 13:45:08 2001
+++ entry-armv.S	Fri Dec 28 11:51:19 2001
@@ -875,7 +875,6 @@
 vector_IRQ:	@
 		@ save mode specific registers
 		@
-		ldr	r13, .LCsirq
 		sub	lr, lr, #4
 		str	lr, [r13]			@ save lr_IRQ
 		mrs	lr, spsr
@@ -883,8 +882,7 @@
 		@
 		@ now branch to the relevent MODE handling routine
 		@
-		mov	r13, #I_BIT | MODE_SVC
-		msr	spsr_c, r13			@ switch to SVC_32 mode
+		msr	spsr_c, #I_BIT | MODE_SVC	@ switch to SVC_32 mode
 
 		and	lr, lr, #15
 		ldr	lr, [pc, lr, lsl #2]
@@ -916,7 +914,6 @@
 vector_data:	@
 		@ save mode specific registers
 		@
-		ldr	r13, .LCsabt
 		sub	lr, lr, #8
 		str	lr, [r13]
 		mrs	lr, spsr
@@ -924,8 +921,7 @@
 		@
 		@ now branch to the relevent MODE handling routine
 		@
-		mov	r13, #I_BIT | MODE_SVC
-		msr	spsr_c, r13			@ switch to SVC_32 mode
+		msr	spsr_c, #I_BIT | MODE_SVC	@ switch to SVC_32 mode
 
 		and	lr, lr, #15
 		ldr	lr, [pc, lr, lsl #2]
@@ -958,7 +954,6 @@
 		@
 		@ save mode specific registers
 		@
-		ldr	r13, .LCsabt
 		sub	lr, lr, #4
 		str	lr, [r13]			@ save lr_ABT
 		mrs	lr, spsr
@@ -966,8 +961,7 @@
 		@
 		@ now branch to the relevent MODE handling routine
 		@
-		mov	r13, #I_BIT | MODE_SVC
-		msr	spsr_c, r13			@ switch to SVC_32 mode
+		msr	spsr_c, #I_BIT | MODE_SVC	@ switch to SVC_32 mode
 
 		ands	lr, lr, #15
 		ldr	lr, [pc, lr, lsl #2]
@@ -1000,15 +994,13 @@
 		@
 		@ save mode specific registers
 		@
-		ldr	r13, .LCsund
 		str	lr, [r13]			@ save lr_UND
 		mrs	lr, spsr
 		str	lr, [r13, #4]			@ save spsr_UND
 		@
 		@ now branch to the relevent MODE handling routine
 		@
-		mov	r13, #I_BIT | MODE_SVC
-		msr	spsr_c, r13			@ switch to SVC_32 mode
+		msr	spsr_c, #I_BIT | MODE_SVC	@ switch to SVC_32 mode
 
 		and	lr, lr, #15
 		ldr	lr, [pc, lr, lsl #2]
@@ -1064,10 +1056,6 @@
 
 .LCvswi:	.word	vector_swi
 
-.LCsirq:	.word	__temp_irq
-.LCsund:	.word	__temp_und
-.LCsabt:	.word	__temp_abt
-
 __stubs_end:
 
 		.equ	__real_stubs_start, .LCvectors + 0x200
@@ -1095,6 +1083,16 @@
 		str	r3, [r2], #4
 		cmp	r0, r1
 		blt	1b
+
+		mrs	r0, cpsr
+		msr	cpsr, #ABT_MODE | I_BIT
+		ldr	r13, =__temp_abt
+		msr	cpsr, #UND_MODE | I_BIT
+		ldr	r13, =__temp_und
+		msr	cpsr, #IRQ_MODE | I_BIT
+		ldr	r13, =__temp_irq
+		msr	cpsr, r0
+	
 		LOADREGS(fd, sp!, {r4 - r6, pc})
 
 		.data



_______________________________________________
http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
Please visit the above address for information on this list.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic