diff options
author | Paul Mundt <lethal@linux-sh.org> | 2006-10-23 04:20:20 +0000 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2006-10-23 04:20:20 +0000 |
commit | 0b508dd647e667c92820ddfc82eb5f95b19d2db1 (patch) | |
tree | 882e403d52d6a21249c00a7b8b451e9c7eec9239 /libc/sysdeps/linux/sh/bits | |
parent | 44b161a8c584a50d77d63ad553e78991c7dc3617 (diff) |
Merge SH-2 trapa fixups from Mark.
2006-10-16 Mark Shinwell <shinwell@codesourcery.com>
* libc/sysdeps/linux/sh/vfork.S: Use __SH_SYSCALL_TRAP_BASE.
Also use __CONFIG_SH2__ rather than __sh2__, for consistency.
* libc/sysdeps/linux/sh/syscall.c: Use __SH_SYSCALL_TRAP_BASE.
* libc/sysdeps/linux/sh/bits/uClibc_arch_features.h: Use
__CONFIG_SH2__ rather than __sh2__, for consistency.
* libc/sysdeps/linux/sh/bits/syscalls.h (__SH_SYSCALL_TRAP_BASE):
New.
Use instead of hard-coded trap numbers in the various __NR_<name>
macros.
* libc/sysdeps/linux/sh/clone.S: Use __SH_SYSCALL_TRAP_BASE.
Also use __CONFIG_SH2__ rather than __sh2__, for consistency.
* libc/sysdeps/linux/sh/crti.S: Disable GOT-related code if
__HAVE_SHARED__ is not set.
* libc/sysdeps/linux/sh/pipe.c (pipe): Use __SH_SYSCALL_TRAP_BASE.
Diffstat (limited to 'libc/sysdeps/linux/sh/bits')
-rw-r--r-- | libc/sysdeps/linux/sh/bits/syscalls.h | 47 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/bits/uClibc_arch_features.h | 4 |
2 files changed, 31 insertions, 20 deletions
diff --git a/libc/sysdeps/linux/sh/bits/syscalls.h b/libc/sysdeps/linux/sh/bits/syscalls.h index 83b20f63e..f953ed3e8 100644 --- a/libc/sysdeps/linux/sh/bits/syscalls.h +++ b/libc/sysdeps/linux/sh/bits/syscalls.h @@ -4,6 +4,13 @@ # error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead." #endif +/* The Linux kernel uses different trap numbers on sh-2. */ +#ifdef __CONFIG_SH2__ +# define __SH_SYSCALL_TRAP_BASE 0x20 +#else +# define __SH_SYSCALL_TRAP_BASE 0x10 +#endif + /* This includes the `__NR_<name>' syscall numbers taken from the Linux kernel * header files. It also defines the traditional `SYS_<name>' macros for older * programs. */ @@ -33,9 +40,9 @@ do { \ type name(void) \ { \ register long __sc0 __asm__ ("r3") = __NR_##name; \ -__asm__ __volatile__ ("trapa #0x10" \ +__asm__ __volatile__ ("trapa %1" \ : "=z" (__sc0) \ - : "0" (__sc0) \ + : "i" (__SH_SYSCALL_TRAP_BASE), "0" (__sc0) \ : "memory" ); \ __syscall_return(type,__sc0); \ } @@ -45,9 +52,9 @@ type name(type1 arg1) \ { \ register long __sc0 __asm__ ("r3") = __NR_##name; \ register long __sc4 __asm__ ("r4") = (long) arg1; \ -__asm__ __volatile__ ("trapa #0x11" \ +__asm__ __volatile__ ("trapa %1" \ : "=z" (__sc0) \ - : "0" (__sc0), "r" (__sc4) \ + : "i" (__SH_SYSCALL_TRAP_BASE + 1), "0" (__sc0), "r" (__sc4) \ : "memory"); \ __syscall_return(type,__sc0); \ } @@ -58,9 +65,10 @@ type name(type1 arg1,type2 arg2) \ register long __sc0 __asm__ ("r3") = __NR_##name; \ register long __sc4 __asm__ ("r4") = (long) arg1; \ register long __sc5 __asm__ ("r5") = (long) arg2; \ -__asm__ __volatile__ ("trapa #0x12" \ +__asm__ __volatile__ ("trapa %1" \ : "=z" (__sc0) \ - : "0" (__sc0), "r" (__sc4), "r" (__sc5) \ + : "i" (__SH_SYSCALL_TRAP_BASE + 2), "0" (__sc0), "r" (__sc4), \ + "r" (__sc5) \ : "memory"); \ __syscall_return(type,__sc0); \ } @@ -72,9 +80,10 @@ register long __sc0 __asm__ ("r3") = __NR_##name; \ register long __sc4 __asm__ ("r4") = (long) arg1; \ register long __sc5 __asm__ ("r5") = (long) arg2; \ register long __sc6 __asm__ ("r6") = (long) arg3; \ -__asm__ __volatile__ ("trapa #0x13" \ +__asm__ __volatile__ ("trapa %1" \ : "=z" (__sc0) \ - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6) \ + : "i" (__SH_SYSCALL_TRAP_BASE + 3), "0" (__sc0), "r" (__sc4), \ + "r" (__sc5), "r" (__sc6) \ : "memory"); \ __syscall_return(type,__sc0); \ } @@ -87,9 +96,10 @@ register long __sc4 __asm__ ("r4") = (long) arg1; \ register long __sc5 __asm__ ("r5") = (long) arg2; \ register long __sc6 __asm__ ("r6") = (long) arg3; \ register long __sc7 __asm__ ("r7") = (long) arg4; \ -__asm__ __volatile__ ("trapa #0x14" \ +__asm__ __volatile__ ("trapa %1" \ : "=z" (__sc0) \ - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), \ + : "i" (__SH_SYSCALL_TRAP_BASE + 4), "0" (__sc0), "r" (__sc4), \ + "r" (__sc5), "r" (__sc6), \ "r" (__sc7) \ : "memory" ); \ __syscall_return(type,__sc0); \ @@ -104,18 +114,19 @@ register long __sc5 __asm__ ("r5") = (long) arg2; \ register long __sc6 __asm__ ("r6") = (long) arg3; \ register long __sc7 __asm__ ("r7") = (long) arg4; \ register long __sc0 __asm__ ("r0") = (long) arg5; \ -__asm__ __volatile__ ("trapa #0x15" \ +__asm__ __volatile__ ("trapa %1" \ : "=z" (__sc0) \ - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), "r" (__sc7), \ - "r" (__sc3) \ + : "i" (__SH_SYSCALL_TRAP_BASE + 5), "0" (__sc0), "r" (__sc4), \ + "r" (__sc5), "r" (__sc6), "r" (__sc7), "r" (__sc3) \ : "memory" ); \ __syscall_return(type,__sc0); \ } -/* Add in _syscall6 which is not in the kernel header */ #ifndef __SH_SYSCALL6_TRAPA -# define __SH_SYSCALL6_TRAPA "0x16" +#define __SH_SYSCALL6_TRAPA __SH_SYSCALL_TRAP_BASE + 6 #endif + +/* Add in _syscall6 which is not in the kernel header */ #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ { \ @@ -126,10 +137,10 @@ register long __sc6 __asm__ ("r6") = (long) arg3; \ register long __sc7 __asm__ ("r7") = (long) arg4; \ register long __sc0 __asm__ ("r0") = (long) arg5; \ register long __sc1 __asm__ ("r1") = (long) arg6; \ -__asm__ __volatile__ ("trapa #" __SH_SYSCALL6_TRAPA \ +__asm__ __volatile__ ("trapa %1" \ : "=z" (__sc0) \ - : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), "r" (__sc7), \ - "r" (__sc3), "r" (__sc1) \ + : "i" (__SH_SYSCALL6_TRAPA), "0" (__sc0), "r" (__sc4), \ + "r" (__sc5), "r" (__sc6), "r" (__sc7), "r" (__sc3), "r" (__sc1) \ : "memory" ); \ __syscall_return(type,__sc0); \ } diff --git a/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h b/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h index 7b9a0efbb..e2b480e75 100644 --- a/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h +++ b/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h @@ -6,9 +6,9 @@ #define _BITS_UCLIBC_ARCH_FEATURES_H /* instruction used when calling abort() to kill yourself */ -#if defined(__sh2__) +#if defined(__CONFIG_SH2__) # define __UCLIBC_ABORT_INSTRUCTION__ "trapa #32" -#else /* defined(__sh__) */ +#else # define __UCLIBC_ABORT_INSTRUCTION__ "trapa #0xff" #endif |