diff options
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/alpha/sysdep.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/sysdep.h | 54 |
2 files changed, 35 insertions, 21 deletions
diff --git a/sysdeps/unix/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S index 50c84c1166..4c7c134333 100644 --- a/sysdeps/unix/alpha/sysdep.S +++ b/sysdeps/unix/alpha/sysdep.S @@ -45,7 +45,7 @@ .ent __syscall_error __syscall_error: -#if defined(_LIBC_REENTRANT) && defined(USE___THREAD) +#if defined(_LIBC_REENTRANT) && USE___THREAD LOADGP PROLOGUE diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h index 3bf25e6fd2..da65caea41 100644 --- a/sysdeps/unix/sysv/linux/alpha/sysdep.h +++ b/sysdeps/unix/sysv/linux/alpha/sysdep.h @@ -93,105 +93,117 @@ #define inline_syscall0(name) \ { \ + register long _sc_0 __asm__("$0"); \ register long _sc_19 __asm__("$19"); \ \ + _sc_0 = __NR_##name; \ __asm__("callsys # %0 %1 <= %2" \ - : "=v"(_sc_ret), "=r"(_sc_19) \ - : "0"(__NR_##name) \ + : "=r"(_sc_0), "=r"(_sc_19) \ + : "0"(_sc_0) \ : inline_syscall_clobbers, \ "$16", "$17", "$18", "$20", "$21"); \ - _sc_err = _sc_19; \ + _sc_ret = _sc_0, _sc_err = _sc_19; \ } #define inline_syscall1(name,arg1) \ { \ + register long _sc_0 __asm__("$0"); \ register long _sc_16 __asm__("$16"); \ register long _sc_19 __asm__("$19"); \ \ + _sc_0 = __NR_##name; \ _sc_16 = (long) (arg1); \ __asm__("callsys # %0 %1 <= %2 %3" \ - : "=v"(_sc_ret), "=r"(_sc_19), \ + : "=r"(_sc_0), "=r"(_sc_19), \ "=r"(_sc_16) \ - : "0"(__NR_##name), "2"(_sc_16) \ + : "0"(_sc_0), "2"(_sc_16) \ : inline_syscall_clobbers, \ "$17", "$18", "$20", "$21"); \ - _sc_err = _sc_19; \ + _sc_ret = _sc_0, _sc_err = _sc_19; \ } #define inline_syscall2(name,arg1,arg2) \ { \ + register long _sc_0 __asm__("$0"); \ register long _sc_16 __asm__("$16"); \ register long _sc_17 __asm__("$17"); \ register long _sc_19 __asm__("$19"); \ \ + _sc_0 = __NR_##name; \ _sc_16 = (long) (arg1); \ _sc_17 = (long) (arg2); \ __asm__("callsys # %0 %1 <= %2 %3 %4" \ - : "=v"(_sc_ret), "=r"(_sc_19), \ + : "=r"(_sc_0), "=r"(_sc_19), \ "=r"(_sc_16), "=r"(_sc_17) \ - : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17) \ + : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17) \ : inline_syscall_clobbers, \ "$18", "$20", "$21"); \ - _sc_err = _sc_19; \ + _sc_ret = _sc_0, _sc_err = _sc_19; \ } #define inline_syscall3(name,arg1,arg2,arg3) \ { \ + register long _sc_0 __asm__("$0"); \ register long _sc_16 __asm__("$16"); \ register long _sc_17 __asm__("$17"); \ register long _sc_18 __asm__("$18"); \ register long _sc_19 __asm__("$19"); \ \ + _sc_0 = __NR_##name; \ _sc_16 = (long) (arg1); \ _sc_17 = (long) (arg2); \ _sc_18 = (long) (arg3); \ __asm__("callsys # %0 %1 <= %2 %3 %4 %5" \ - : "=v"(_sc_ret), "=r"(_sc_19), \ + : "=r"(_sc_0), "=r"(_sc_19), \ "=r"(_sc_16), "=r"(_sc_17), "=r"(_sc_18) \ - : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17), \ + : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \ "4"(_sc_18) \ : inline_syscall_clobbers, "$20", "$21"); \ - _sc_err = _sc_19; \ + _sc_ret = _sc_0, _sc_err = _sc_19; \ } #define inline_syscall4(name,arg1,arg2,arg3,arg4) \ { \ + register long _sc_0 __asm__("$0"); \ register long _sc_16 __asm__("$16"); \ register long _sc_17 __asm__("$17"); \ register long _sc_18 __asm__("$18"); \ register long _sc_19 __asm__("$19"); \ \ + _sc_0 = __NR_##name; \ _sc_16 = (long) (arg1); \ _sc_17 = (long) (arg2); \ _sc_18 = (long) (arg3); \ _sc_19 = (long) (arg4); \ __asm__("callsys # %0 %1 <= %2 %3 %4 %5 %6" \ - : "=v"(_sc_ret), "=r"(_sc_19), \ + : "=r"(_sc_0), "=r"(_sc_19), \ "=r"(_sc_16), "=r"(_sc_17), "=r"(_sc_18) \ - : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17), \ + : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \ "4"(_sc_18), "1"(_sc_19) \ : inline_syscall_clobbers, "$20", "$21"); \ - _sc_err = _sc_19; \ + _sc_ret = _sc_0, _sc_err = _sc_19; \ } #define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5) \ { \ + register long _sc_0 __asm__("$0"); \ register long _sc_16 __asm__("$16"); \ register long _sc_17 __asm__("$17"); \ register long _sc_18 __asm__("$18"); \ register long _sc_19 __asm__("$19"); \ register long _sc_20 __asm__("$20"); \ \ + _sc_0 = __NR_##name; \ _sc_16 = (long) (arg1); \ _sc_17 = (long) (arg2); \ _sc_18 = (long) (arg3); \ _sc_19 = (long) (arg4); \ _sc_20 = (long) (arg5); \ __asm__("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7" \ - : "=v"(_sc_ret), "=r"(_sc_19), \ + : "=r"(_sc_0), "=r"(_sc_19), \ "=r"(_sc_16), "=r"(_sc_17), "=r"(_sc_18), \ "=r"(_sc_20) \ - : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17), \ + : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \ "4"(_sc_18), "1"(_sc_19), "5"(_sc_20) \ : inline_syscall_clobbers, "$21"); \ _sc_ret = _sc_0, _sc_err = _sc_19; \ @@ -199,6 +211,7 @@ #define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6) \ { \ + register long _sc_0 __asm__("$0"); \ register long _sc_16 __asm__("$16"); \ register long _sc_17 __asm__("$17"); \ register long _sc_18 __asm__("$18"); \ @@ -206,6 +219,7 @@ register long _sc_20 __asm__("$20"); \ register long _sc_21 __asm__("$21"); \ \ + _sc_0 = __NR_##name; \ _sc_16 = (long) (arg1); \ _sc_17 = (long) (arg2); \ _sc_18 = (long) (arg3); \ @@ -213,14 +227,14 @@ _sc_20 = (long) (arg5); \ _sc_21 = (long) (arg6); \ __asm__("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7 %8" \ - : "=v"(_sc_ret), "=r"(_sc_19) \ + : "=r"(_sc_0), "=r"(_sc_19) \ "=r"(_sc_16), "=r"(_sc_17), "=r"(_sc_18), \ "=r"(_sc_20), "=r"(_sc_21) \ - : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17), \ + : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \ "4"(_sc_18), "1"(_sc_19), "5"(_sc_20), \ "6"(_sc_21) \ : inline_syscall_clobbers); \ - _sc_err = _sc_19; \ + _sc_ret = _sc_0, _sc_err = _sc_19; \ } #endif /* _LINUX_ALPHA_SYSDEP_H */ |