summaryrefslogtreecommitdiff
path: root/packages/linux/nslu2-kernel/2.6/thumb-swi.patch
blob: 2e73bb103ff2e1b0df5223af7b589285f725b193 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# This patch changes the thumb swi handling for any thumb swi with
# an immediate value != 0, those swis are mapped into the arm
# specific swis.  This implements a thumb breakpoint swi.
--- linux-2.6.12.2/arch/arm/kernel/entry-common.S.orig	2005-09-19 12:48:42.323365573 -0700
+++ linux-2.6.12.2/arch/arm/kernel/entry-common.S	2005-09-19 13:31:19.004247358 -0700
@@ -137,8 +137,11 @@
 	 */
 #ifdef CONFIG_ARM_THUMB
 	tst	r8, #PSR_T_BIT			@ this is SPSR from save_user_regs
-	addne	scno, r7, #__NR_SYSCALL_BASE	@ put OS number in
-	ldreq	scno, [lr, #-4]
+	ldrneh	ip, [lr, #-2]			@ thumb swi instruction
+	ldreq	scno, [lr, #-4]			@ arm swi instruction
+	addne	scno, r7, #__NR_SYSCALL_BASE	@ put OS number in to thumb r7 value
+	bicnes	ip, ip, #0xff00			@ clear thumb swi bits
+	addne	scno, ip, #__ARM_NR_BASE	@ thumb swi0->r7, swi!0->arm swi
 #else
 	ldr	scno, [lr, #-4]			@ get SWI instruction
 #endif