This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! This patch on top of: http://sources.redhat.com/ml/libc-hacker/2003-01/msg00033.html and http://sources.redhat.com/ml/libc-hacker/2003-01/msg00036.html makes alpha glibc build and make check without any failures. 2003-01-06 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/alpha/sysdep.h (PSEUDO): Use PSEUDO_PREPARE_ARGS. * sysdeps/unix/sysv/linux/alpha/sigsuspend.S: Add cancellation handling. * sysdeps/unix/sysv/linux/alpha/select.S: Likewise. linuxthreads/ * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Use PSEUDO_PREPARE_ARGS. Fix branch condition after SINGLE_THREAD_P. --- libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h.jj 2003-01-04 00:12:17.000000000 +0100 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h 2003-01-06 16:28:50.000000000 +0100 @@ -42,8 +42,9 @@ __LABEL(name) \ ldgp gp, 0(pv); \ .prologue 1; \ PSEUDO_PROF; \ + PSEUDO_PREPARE_ARGS \ SINGLE_THREAD_P(t0); \ - beq t0, $pseudo_cancel; \ + bne t0, $pseudo_cancel; \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ bne a3, $syscall_error; \ --- libc/sysdeps/unix/alpha/sysdep.h.jj 2002-11-08 11:39:38.000000000 +0100 +++ libc/sysdeps/unix/alpha/sysdep.h 2003-01-06 16:28:02.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995, 1996, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995, 1996, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Brendan Kehoe (brendan@zen.org). @@ -97,6 +97,7 @@ .ent name,0; \ __LABEL(name) \ PSEUDO_PROLOGUE; \ + PSEUDO_PREPARE_ARGS \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ bne a3, __syscall_error !samegp; \ @@ -109,6 +110,7 @@ __LABEL(name) \ .align 4; \ .ent name,0; \ __LABEL(name) \ + PSEUDO_PREPARE_ARGS \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ bne a3, 1996f; \ @@ -122,6 +124,9 @@ __LABEL(name) \ END(sym) #endif /* PIC && !RTLD_PRIVATE_ERRNO */ +#undef PSEUDO_PREPARE_ARGS +#define PSEUDO_PREPARE_ARGS /* Nothing. */ + #define r0 v0 #define r1 a4 --- libc/sysdeps/unix/sysv/linux/alpha/sigsuspend.S.jj 2002-12-16 00:20:56.000000000 +0100 +++ libc/sysdeps/unix/sysv/linux/alpha/sigsuspend.S 2003-01-06 16:41:30.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1993,1995,1996,1997,2002,2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Mosberger <davidm@cs.arizona.edu>, 1995. @@ -20,37 +20,14 @@ /* sigsuspend is a special syscall since it needs to dereference the sigset. This will have to change when we have more than 64 signals. */ -#include <sysdep.h> +#include <sysdep-cancel.h> - .text +#undef PSEUDO_PREPARE_ARGS +#define PSEUDO_PREPARE_ARGS ldq a0, 0(a0); -LEAF(__sigsuspend, 0) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - ldq a0, 0(a0) - ldi v0, __NR_sigsuspend - call_pal PAL_callsys - bne a3, error +PSEUDO(__sigsuspend, sigsuspend, 1) ret - -error: -#ifndef PROF - br gp, 1f -1: ldgp gp, 0(gp) -#endif - SYSCALL_ERROR_HANDLER - - END(__sigsuspend) - +PSEUDO_END(__sigsuspend) libc_hidden_def (__sigsuspend) weak_alias(__sigsuspend, sigsuspend) strong_alias (__sigsuspend, __libc_sigsuspend) --- libc/sysdeps/unix/sysv/linux/alpha/select.S.jj 2002-12-16 00:20:56.000000000 +0100 +++ libc/sysdeps/unix/sysv/linux/alpha/select.S 2003-01-07 01:11:04.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,7 +16,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <sysdep.h> +#include <sysdep-cancel.h> #define _ERRNO_H 1 #include <bits/errno.h> @@ -49,12 +49,20 @@ LEAF(SELECT, 64) #endif .prologue 1 +#ifdef CENABLE + SINGLE_THREAD_P (t1) +#else ldl t0, __libc_missing_axp_tv64 +#endif /* Save timeout early, since we'll need to recover this after the system call. */ stq a4, 48(sp) +#ifdef CENABLE + bne t1, $do_cancel +#endif + bne t0, $do32 /* Save arguments in case we do need to fall back. */ @@ -109,6 +117,93 @@ $do32: 2: addq sp, 64, sp ret +#ifdef CENABLE + .align 3 +$do_cancel: + /* Save arguments. */ + stq a0, 8(sp) + stq a1, 16(sp) + stq a2, 24(sp) + stq a3, 32(sp) + stq ra, 40(sp) + + CENABLE + + ldl t0, __libc_missing_axp_tv64 + bne t0, $do_cancel32 + + /* Recover the saved arguments. */ + ldq a4, 48(sp) + ldq a3, 32(sp) + ldq a2, 24(sp) + ldq a1, 16(sp) + ldq a0, 8(sp) + + ldi v0, SYS_ify(select) + callsys + bne a3, $cancel_err64 + + stq v0, 8(sp) + CDISABLE + ldq v0, 8(sp) + ldq ra, 40(sp) + + /* Everything ok. */ + addq sp, 64, sp + ret + + /* If we didn't get ENOSYS, it is a real error. */ + .align 3 +$cancel_err64: + cmpeq v0, ENOSYS, t0 + beq t0, $cancel_error + stl t0, __libc_missing_axp_tv64 + + /* Recover the saved arguments. */ + .align 3 +$do_cancel32: + ldq a4, 48(sp) + ldq a3, 32(sp) + ldq a2, 24(sp) + ldq a1, 16(sp) + ldq a0, 8(sp) + + /* If the timeout argument is present bounce to the smaller fmt. */ + beq a4, 1f + ldq t0, 0(a4) + ldq t1, 8(a4) + stl t0, 0(sp) + stl t1, 4(sp) + mov sp, a4 + +1: ldi v0, SYS_ify(osf_select) + callsys + bne a3, $cancel_error + + /* ... and bounce the remaining timeout back. */ + ldq a4, 48(sp) + beq a4, 2f + ldl t0, 0(sp) + ldl t1, 4(sp) + stq t0, 0(a4) + stq t1, 8(a4) + +2: stq v0, 8(sp) + CDISABLE + ldq v0, 8(sp) + ldq ra, 40(sp) + + addq sp, 64, sp + ret + + .align 3 +$cancel_error: + stq v0, 8(sp) + CDISABLE + ldq v0, 8(sp) + ldq ra, 40(sp) +#endif + .align 3 $error: addq sp, 64, sp Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |