diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/alpha')
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/brk.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/clone.S | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/getitimer.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/getrusage.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/gettimeofday.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/rt_sigaction.S | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/select.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/setitimer.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/settimeofday.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/sigsuspend.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/syscall.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/sysdep.h | 202 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/utimes.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/wait4.S | 2 |
16 files changed, 132 insertions, 123 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S index 3cd1ae0fbd..e01abebe0e 100644 --- a/sysdeps/unix/sysv/linux/alpha/brk.S +++ b/sysdeps/unix/sysv/linux/alpha/brk.S @@ -74,7 +74,7 @@ $ok: stq a0, __curbrk /* What a horrible way to die. */ $err0: ldi v0, ENOMEM $err1: addq sp, 8, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(__brk) diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S index f1f62146ac..42df98a9b4 100644 --- a/sysdeps/unix/sysv/linux/alpha/clone.S +++ b/sysdeps/unix/sysv/linux/alpha/clone.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson <rth@tamu.edu>, 1996. @@ -24,7 +24,9 @@ #define _ERRNO_H 1 #include <bits/errno.h> -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) */ +/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, + pid_t *tid, void *tls); + */ .text ENTRY(__clone) @@ -49,24 +51,29 @@ ENTRY(__clone) stq a0,0(a1) stq a3,8(a1) - /* Do the system call */ + /* Shift the flags, tid and tls arguments into place; the + child_stack argument is already correct. */ mov a2,a0 + mov a4,a2 + mov a5,a3 + + /* Do the system call. */ ldiq v0,__NR_clone call_pal PAL_callsys bne a3,$error beq v0,thread_start - /* Successful return from the parent */ + /* Successful return from the parent. */ ret - /* Something bad happened -- no child created */ + /* Something bad happened -- no child created. */ $error: #ifndef PROF br gp,1f 1: ldgp gp,0(gp) #endif - jmp zero,__syscall_error + SYSCALL_ERROR_HANDLER END(__clone) @@ -85,11 +92,11 @@ thread_start: ldq a0,8(sp) addq sp,16,sp - /* Call the user's function */ + /* Call the user's function. */ jsr ra,(pv) ldgp gp,0(ra) - /* Call _exit rather than doing it inline for breakpoint purposes */ + /* Call _exit rather than doing it inline for breakpoint purposes. */ mov v0,a0 jsr ra,_exit diff --git a/sysdeps/unix/sysv/linux/alpha/getitimer.S b/sysdeps/unix/sysv/linux/alpha/getitimer.S index 03ceea10f0..543256272c 100644 --- a/sysdeps/unix/sysv/linux/alpha/getitimer.S +++ b/sysdeps/unix/sysv/linux/alpha/getitimer.S @@ -97,7 +97,7 @@ $do32: ldi v0, SYS_ify(osf_getitimer) .align 3 $error: addq sp, 16, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(GETITIMER) diff --git a/sysdeps/unix/sysv/linux/alpha/getrusage.S b/sysdeps/unix/sysv/linux/alpha/getrusage.S index 13762a87b1..dd3eced775 100644 --- a/sysdeps/unix/sysv/linux/alpha/getrusage.S +++ b/sysdeps/unix/sysv/linux/alpha/getrusage.S @@ -129,7 +129,7 @@ $do32: ldi v0, SYS_ify(osf_getrusage) .align 3 $error: addq sp, 16, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(GETRUSAGE) diff --git a/sysdeps/unix/sysv/linux/alpha/gettimeofday.S b/sysdeps/unix/sysv/linux/alpha/gettimeofday.S index 60d642a125..71b8c134dc 100644 --- a/sysdeps/unix/sysv/linux/alpha/gettimeofday.S +++ b/sysdeps/unix/sysv/linux/alpha/gettimeofday.S @@ -94,7 +94,7 @@ $do32: ldi v0, SYS_ify(osf_gettimeofday) .align 3 $error: addq sp, 16, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(GETTIMEOFDAY) diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S index 650f7c0715..89e08b3dc9 100644 --- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S +++ b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S @@ -53,7 +53,7 @@ $error: 1: ldgp gp, 0(gp) #endif lda sp, 16(sp) - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(__ieee_get_fp_control) diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S index 53838fe84e..dc1bbbb962 100644 --- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S +++ b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S @@ -52,7 +52,7 @@ $error: 1: ldgp gp, 0(gp) #endif lda sp, 16(sp) - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(__ieee_set_fp_control) diff --git a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S b/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S index e3d01af928..5f166a7094 100644 --- a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S +++ b/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S @@ -56,7 +56,7 @@ ENTRY(__syscall_rt_sigaction) br gp,2f 2: ldgp gp,0(gp) #endif - jmp __syscall_error + SYSCALL_ERROR_HANDLER END(__syscall_rt_sigaction) @@ -82,6 +82,6 @@ ENTRY(__syscall_rt_sigaction) ldgp $29,0($27) .prologue 1 ldi $0,ENOSYS - jmp __syscall_error + SYSCALL_ERROR_HANDLER END(__syscall_rt_sigaction) #endif diff --git a/sysdeps/unix/sysv/linux/alpha/select.S b/sysdeps/unix/sysv/linux/alpha/select.S index 57030aaa4e..d3b206df6e 100644 --- a/sysdeps/unix/sysv/linux/alpha/select.S +++ b/sysdeps/unix/sysv/linux/alpha/select.S @@ -112,7 +112,7 @@ $do32: .align 3 $error: addq sp, 64, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(SELECT) diff --git a/sysdeps/unix/sysv/linux/alpha/setitimer.S b/sysdeps/unix/sysv/linux/alpha/setitimer.S index 2cc126337d..fdc3d27a8c 100644 --- a/sysdeps/unix/sysv/linux/alpha/setitimer.S +++ b/sysdeps/unix/sysv/linux/alpha/setitimer.S @@ -113,7 +113,7 @@ $do32: .align 3 $error: addq sp, 48, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(SETITIMER) diff --git a/sysdeps/unix/sysv/linux/alpha/settimeofday.S b/sysdeps/unix/sysv/linux/alpha/settimeofday.S index 03e9206d48..339913ff51 100644 --- a/sysdeps/unix/sysv/linux/alpha/settimeofday.S +++ b/sysdeps/unix/sysv/linux/alpha/settimeofday.S @@ -94,7 +94,7 @@ $do32: .align 3 $error: addq sp, 16, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(SETTIMEOFDAY) diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S index d6a17851ca..955d82ecc8 100644 --- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S +++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S @@ -47,7 +47,7 @@ error: br gp, 1f 1: ldgp gp, 0(gp) #endif - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(__sigsuspend) diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S index c354bb6161..10a32d5dc8 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscall.S +++ b/sysdeps/unix/sysv/linux/alpha/syscall.S @@ -70,7 +70,7 @@ $error: br gp, 2f 2: ldgp gp, 0(gp) #endif - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(__syscall) diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h index e56adca8ed..3bf25e6fd2 100644 --- a/sysdeps/unix/sysv/linux/alpha/sysdep.h +++ b/sysdeps/unix/sysv/linux/alpha/sysdep.h @@ -17,6 +17,9 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#ifndef _LINUX_ALPHA_SYSDEP_H +#define _LINUX_ALPHA_SYSDEP_H 1 + #ifdef __ASSEMBLER__ #include <asm/pal.h> @@ -88,118 +91,114 @@ of the hard-register variables as much as possible. Thus we copy in/out as close to the asm as possible. */ -#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" \ - : "=r"(_sc_0), "=r"(_sc_19) \ - : "0"(_sc_0) \ - : inline_syscall_clobbers); \ - _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" \ - : "=r"(_sc_0), "=r"(_sc_19) \ - : "0"(_sc_0), "r"(_sc_16) \ - : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall2(name,arg1,arg2) \ +#define inline_syscall0(name) \ { \ - 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" \ - : "=r"(_sc_0), "=r"(_sc_19) \ - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17) \ - : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ + __asm__("callsys # %0 %1 <= %2" \ + : "=v"(_sc_ret), "=r"(_sc_19) \ + : "0"(__NR_##name) \ + : inline_syscall_clobbers, \ + "$16", "$17", "$18", "$20", "$21"); \ + _sc_err = _sc_19; \ } -#define inline_syscall3(name,arg1,arg2,arg3) \ +#define inline_syscall1(name,arg1) \ { \ - 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" \ - : "=r"(_sc_0), "=r"(_sc_19) \ - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ - "r"(_sc_18) \ - : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ + __asm__("callsys # %0 %1 <= %2 %3" \ + : "=v"(_sc_ret), "=r"(_sc_19), \ + "=r"(_sc_16) \ + : "0"(__NR_##name), "2"(_sc_16) \ + : inline_syscall_clobbers, \ + "$17", "$18", "$20", "$21"); \ + _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" \ - : "=r"(_sc_0), "=r"(_sc_19) \ - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ - "r"(_sc_18), "1"(_sc_19) \ - : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ +#define inline_syscall2(name,arg1,arg2) \ +{ \ + register long _sc_16 __asm__("$16"); \ + register long _sc_17 __asm__("$17"); \ + register long _sc_19 __asm__("$19"); \ + \ + _sc_16 = (long) (arg1); \ + _sc_17 = (long) (arg2); \ + __asm__("callsys # %0 %1 <= %2 %3 %4" \ + : "=v"(_sc_ret), "=r"(_sc_19), \ + "=r"(_sc_16), "=r"(_sc_17) \ + : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17) \ + : inline_syscall_clobbers, \ + "$18", "$20", "$21"); \ + _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" \ - : "=r"(_sc_0), "=r"(_sc_19) \ - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ - "r"(_sc_18), "1"(_sc_19), "r"(_sc_20) \ - : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ +#define inline_syscall3(name,arg1,arg2,arg3) \ +{ \ + 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_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_16), "=r"(_sc_17), "=r"(_sc_18) \ + : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17), \ + "4"(_sc_18) \ + : inline_syscall_clobbers, "$20", "$21"); \ + _sc_err = _sc_19; \ +} + +#define inline_syscall4(name,arg1,arg2,arg3,arg4) \ +{ \ + 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_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_16), "=r"(_sc_17), "=r"(_sc_18) \ + : "0"(__NR_##name), "2"(_sc_16), "3"(_sc_17), \ + "4"(_sc_18), "1"(_sc_19) \ + : inline_syscall_clobbers, "$20", "$21"); \ + _sc_err = _sc_19; \ +} + +#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5) \ +{ \ + 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_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_16), "=r"(_sc_17), "=r"(_sc_18), \ + "=r"(_sc_20) \ + : "0"(__NR_##name), "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; \ } #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"); \ @@ -207,7 +206,6 @@ 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); \ @@ -215,10 +213,14 @@ _sc_20 = (long) (arg5); \ _sc_21 = (long) (arg6); \ __asm__("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7 %8" \ - : "=r"(_sc_0), "=r"(_sc_19) \ - : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ - "r"(_sc_18), "1"(_sc_19), "r"(_sc_20), \ - "r"(_sc_21) \ + : "=v"(_sc_ret), "=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), \ + "4"(_sc_18), "1"(_sc_19), "5"(_sc_20), \ + "6"(_sc_21) \ : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ + _sc_err = _sc_19; \ } + +#endif /* _LINUX_ALPHA_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/utimes.S b/sysdeps/unix/sysv/linux/alpha/utimes.S index e9c16db39d..a939255d27 100644 --- a/sysdeps/unix/sysv/linux/alpha/utimes.S +++ b/sysdeps/unix/sysv/linux/alpha/utimes.S @@ -99,7 +99,7 @@ $do32: .align 3 $error: addq sp, 16, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(UTIMES) diff --git a/sysdeps/unix/sysv/linux/alpha/wait4.S b/sysdeps/unix/sysv/linux/alpha/wait4.S index b695047890..17c5a97952 100644 --- a/sysdeps/unix/sysv/linux/alpha/wait4.S +++ b/sysdeps/unix/sysv/linux/alpha/wait4.S @@ -132,7 +132,7 @@ $do32: ldi v0, SYS_ify(osf_wait4) .align 3 $error: addq sp, 32, sp - jmp zero, __syscall_error + SYSCALL_ERROR_HANDLER END(WAIT4) |