about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2015-06-16 15:25:02 +0000
committerRich Felker <dalias@aerifal.cx>2015-06-16 15:25:02 +0000
commit10d0268ccfab9152250eeeed3952ce3fed44131a (patch)
treee5584cc6b44eb7405530d7c558c59e3ca495c6c3
parent3366a99b17847b58f2d8cc52cbb5d65deb824f8a (diff)
downloadmusl-10d0268ccfab9152250eeeed3952ce3fed44131a.tar.gz
musl-10d0268ccfab9152250eeeed3952ce3fed44131a.tar.xz
musl-10d0268ccfab9152250eeeed3952ce3fed44131a.zip
switch to using trap number 31 for syscalls on sh
nominally the low bits of the trap number on sh are the number of
syscall arguments, but they have never been used by the kernel, and
some code making syscalls does not even know the number of arguments
and needs to pass an arbitrary high number anyway.

sh3/sh4 traditionally used the trap range 16-31 for syscalls, but part
of this range overlapped with hardware exceptions/interrupts on sh2
hardware, so an incompatible range 32-47 was chosen for sh2.

using trap number 31 everywhere, since it's in the existing sh3/sh4
range and does not conflict with sh2 hardware, is a proposed
unification of the kernel syscall convention that will allow binaries
to be shared between sh2 and sh3/sh4. if this is not accepted into the
kernel, we can refit the sh2 target with runtime selection mechanisms
for the trap number, but doing so would be invasive and would entail
non-trivial overhead.
-rw-r--r--arch/sh/syscall_arch.h2
-rw-r--r--src/internal/sh/syscall.s2
-rw-r--r--src/process/sh/vfork.s2
-rw-r--r--src/signal/sh/restore.s4
-rw-r--r--src/thread/sh/__unmapself.s4
-rw-r--r--src/thread/sh/clone.s4
-rw-r--r--src/thread/sh/syscall_cp.s2
-rw-r--r--src/unistd/sh/pipe.s2
8 files changed, 11 insertions, 11 deletions
diff --git a/arch/sh/syscall_arch.h b/arch/sh/syscall_arch.h
index 7ee21a56..f63675a8 100644
--- a/arch/sh/syscall_arch.h
+++ b/arch/sh/syscall_arch.h
@@ -8,7 +8,7 @@
  */
 #define __asm_syscall(trapno, ...) do {   \
 	__asm__ __volatile__ (                \
-		"trapa #" #trapno "\n"            \
+		"trapa #31\n"            \
 		"or r0, r0\n"                     \
 		"or r0, r0\n"                     \
 		"or r0, r0\n"                     \
diff --git a/src/internal/sh/syscall.s b/src/internal/sh/syscall.s
index d00712a9..331918a5 100644
--- a/src/internal/sh/syscall.s
+++ b/src/internal/sh/syscall.s
@@ -13,7 +13,7 @@ __syscall:
 	mov.l @r15, r7
 	mov.l @(4,r15), r0
 	mov.l @(8,r15), r1
-	trapa #22
+	trapa #31
 	or r0, r0
 	or r0, r0
 	or r0, r0
diff --git a/src/process/sh/vfork.s b/src/process/sh/vfork.s
index 30e17317..48cc9396 100644
--- a/src/process/sh/vfork.s
+++ b/src/process/sh/vfork.s
@@ -7,7 +7,7 @@ vfork:
 	mov #95, r3
 	add r3, r3
 
-	trapa #16
+	trapa #31
 	or    r0, r0
 	or    r0, r0
 	or    r0, r0
diff --git a/src/signal/sh/restore.s b/src/signal/sh/restore.s
index ab26034b..eaedcdfb 100644
--- a/src/signal/sh/restore.s
+++ b/src/signal/sh/restore.s
@@ -2,7 +2,7 @@
 .type   __restore, @function
 __restore:
 	mov   #119, r3  !__NR_sigreturn
-	trapa #16
+	trapa #31
 
 	or    r0, r0
 	or    r0, r0
@@ -15,7 +15,7 @@ __restore:
 __restore_rt:
 	mov   #100, r3  !__NR_rt_sigreturn
 	add   #73, r3
-	trapa #16
+	trapa #31
 
 	or    r0, r0
 	or    r0, r0
diff --git a/src/thread/sh/__unmapself.s b/src/thread/sh/__unmapself.s
index cad91bf6..0161d53d 100644
--- a/src/thread/sh/__unmapself.s
+++ b/src/thread/sh/__unmapself.s
@@ -3,7 +3,7 @@
 .type   __unmapself_sh_mmu, @function
 __unmapself_sh_mmu:
 	mov   #91, r3  ! SYS_munmap
-	trapa #18
+	trapa #31
 
 	or    r0, r0
 	or    r0, r0
@@ -13,7 +13,7 @@ __unmapself_sh_mmu:
 
 	mov   #1, r3   ! SYS_exit
 	mov   #0, r4
-	trapa #17
+	trapa #31
 
 	or    r0, r0
 	or    r0, r0
diff --git a/src/thread/sh/clone.s b/src/thread/sh/clone.s
index d6c9184d..f8ad8451 100644
--- a/src/thread/sh/clone.s
+++ b/src/thread/sh/clone.s
@@ -17,7 +17,7 @@ __clone:
 	mov.l @r15,     r6   ! r6 = ptid
 	mov.l @(8,r15), r7   ! r7 = ctid
 	mov.l @(4,r15), r0   ! r0 = tls
-	trapa #21
+	trapa #31
 
 	or r0, r0
 	or r0, r0
@@ -38,7 +38,7 @@ __clone:
 
 	mov   #1, r3   ! __NR_exit
 	mov   r0, r4
-	trapa #17
+	trapa #31
 
 	or   r0, r0
 	or   r0, r0
diff --git a/src/thread/sh/syscall_cp.s b/src/thread/sh/syscall_cp.s
index 6b28ddf0..c3caface 100644
--- a/src/thread/sh/syscall_cp.s
+++ b/src/thread/sh/syscall_cp.s
@@ -31,7 +31,7 @@ L1:	.long __cancel@PLT-(1b-.)
 	mov.l @(4,r15), r7
 	mov.l @(8,r15), r0
 	mov.l @(12,r15), r1
-	trapa #22
+	trapa #31
 
 __cp_end:
 	! work around hardware bug
diff --git a/src/unistd/sh/pipe.s b/src/unistd/sh/pipe.s
index d865ae3a..46c4908e 100644
--- a/src/unistd/sh/pipe.s
+++ b/src/unistd/sh/pipe.s
@@ -2,7 +2,7 @@
 .type   pipe, @function
 pipe:
 	mov    #42, r3
-	trapa  #17
+	trapa  #31
 
 	! work around hardware bug
 	or     r0, r0