From e853ea00f30f9f8e9bbcc4e58505f2b0a0479590 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 16 Dec 2004 16:49:39 +0000 Subject: [PATCH] Update. 2004-12-16 Jakub Jelinek * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Add support for NPTL where the PID is stored at userlevel and needs to be reset when CLONE_THREAD is not used. * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h (SYSCALL_ERROR_HANDLER): If RTLD_PRIVATE_ERRNO, use rtld_errno instead of errno. * sysdeps/unix/sysv/linux/sparc/sparc64/socket.S: Include sysdep-cancel.h instead of sysdep.h. Handle cancellation. * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Regenerate. * sysdeps/ieee754/ldbl-128/e_expl.c: Include stdlib.h. --- ChangeLog | 15 +++++ nptl/ChangeLog | 5 ++ nptl/sysdeps/sparc/tcb-offsets.sym | 1 + nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 2 + sysdeps/ieee754/ldbl-128/e_expl.c | 1 + sysdeps/sparc/sparc64/fpu/libm-test-ulps | 64 +++++++++++++++++++++- sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 20 ++++++- sysdeps/unix/sysv/linux/sparc/sparc64/socket.S | 36 +++++++++++- sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h | 4 +- 9 files changed, 140 insertions(+), 8 deletions(-) create mode 100644 nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S diff --git a/ChangeLog b/ChangeLog index f965348d19..c22c8cdabd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2004-12-16 Jakub Jelinek + + * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Add support + for NPTL where the PID is stored at userlevel and needs to be reset + when CLONE_THREAD is not used. + + * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h + (SYSCALL_ERROR_HANDLER): If RTLD_PRIVATE_ERRNO, use rtld_errno + instead of errno. + * sysdeps/unix/sysv/linux/sparc/sparc64/socket.S: Include + sysdep-cancel.h instead of sysdep.h. Handle cancellation. + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Regenerate. + + * sysdeps/ieee754/ldbl-128/e_expl.c: Include stdlib.h. + 2004-12-15 Jakub Jelinek * sysdeps/unix/sysv/linux/gethostid.c: Make bi-arch safe. diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 5d910edcf2..f551a54bbf 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2004-12-16 Jakub Jelinek + + * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S: New file. + * sysdeps/sparc/tcb-offsets.sym: Add TID. + 2004-12-15 Jakub Jelinek * sysdeps/unix/sysv/linux/s390/s390-32/clone.S: New file. diff --git a/nptl/sysdeps/sparc/tcb-offsets.sym b/nptl/sysdeps/sparc/tcb-offsets.sym index c6e230a315..237f975b25 100644 --- a/nptl/sysdeps/sparc/tcb-offsets.sym +++ b/nptl/sysdeps/sparc/tcb-offsets.sym @@ -3,3 +3,4 @@ MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) PID offsetof (struct pthread, pid) +TID offsetof (struct pthread, tid) diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S new file mode 100644 index 0000000000..da6197c00d --- /dev/null +++ b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -0,0 +1,2 @@ +#define RESET_PID +#include diff --git a/sysdeps/ieee754/ldbl-128/e_expl.c b/sysdeps/ieee754/ldbl-128/e_expl.c index e4cf8564bf..31ff16f8c0 100644 --- a/sysdeps/ieee754/ldbl-128/e_expl.c +++ b/sysdeps/ieee754/ldbl-128/e_expl.c @@ -66,6 +66,7 @@ #include #include #include +#include #include "t_expl.h" static const long double C[] = { diff --git a/sysdeps/sparc/sparc64/fpu/libm-test-ulps b/sysdeps/sparc/sparc64/fpu/libm-test-ulps index d9e60f5e4c..b398e68414 100644 --- a/sysdeps/sparc/sparc64/fpu/libm-test-ulps +++ b/sysdeps/sparc/sparc64/fpu/libm-test-ulps @@ -1,6 +1,9 @@ # Begin of automatic generation # atan2 +Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994380": +float: 6 +ifloat: 6 Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025": float: 3 ifloat: 3 @@ -130,9 +133,14 @@ double: 1 idouble: 1 # ccos +Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": double: 1 float: 1 @@ -146,9 +154,13 @@ ifloat: 1 Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": double: 1 float: 1 @@ -195,11 +207,16 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": double: 1 float: 5 idouble: 1 ifloat: 5 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": double: 1 float: 1 @@ -342,11 +359,17 @@ ildouble: 1 ldouble: 1 # csin +Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i": +ildouble: 1 +ldouble: 1 Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": ildouble: 1 ldouble: 1 # csinh +Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": double: 1 idouble: 1 @@ -376,6 +399,11 @@ ldouble: 1 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": double: 1 idouble: 1 @@ -388,6 +416,11 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": +ildouble: 1 +ldouble: 1 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": float: 1 ifloat: 1 @@ -644,11 +677,15 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1": double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 1 +ldouble: 1 # log10 Test "log10 (0.75) == -0.124938736608299953132449886193870744": @@ -906,8 +943,8 @@ idouble: 1 # Maximal error of functions: Function: "atan2": -float: 3 -ifloat: 3 +float: 6 +ifloat: 6 ildouble: 1 ldouble: 1 @@ -996,20 +1033,28 @@ double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: Imaginary part of "ccos": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: Real part of "ccosh": double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: Imaginary part of "ccosh": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: Real part of "cexp": float: 1 @@ -1036,12 +1081,15 @@ ifloat: 3 Function: Real part of "clog10": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: Imaginary part of "clog10": double: 1 float: 5 idouble: 1 ifloat: 5 +ildouble: 1 ldouble: 1 Function: "cos": @@ -1072,9 +1120,15 @@ Function: Real part of "csin": ildouble: 1 ldouble: 1 +Function: Imaginary part of "csin": +ildouble: 1 +ldouble: 1 + Function: Real part of "csinh": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: Imaginary part of "csinh": double: 1 @@ -1095,6 +1149,8 @@ ldouble: 1 Function: Real part of "ctan": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 Function: Imaginary part of "ctan": double: 1 @@ -1107,10 +1163,14 @@ double: 1 float: 2 idouble: 1 ifloat: 2 +ildouble: 1 +ldouble: 1 Function: Imaginary part of "ctanh": float: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 Function: "erf": double: 1 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S index 5bebe35628..66cdbf3ca7 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1996, 1997, 1998, 2000, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2000, 2003, 2004 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@tamu.edu). @@ -22,6 +23,10 @@ #include #include +#include + +#define CLONE_VM 0x00000100 +#define CLONE_THREAD 0x00010000 /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, pid_t *ptid, void *tls, pid_t *ctid); */ @@ -69,6 +74,19 @@ __clone: .type __thread_start,@function __thread_start: +#ifdef RESET_PID + sethi %hi(CLONE_THREAD), %l0 + andcc %i2, %l0, %g0 + bne 1f + andcc %i2, CLONE_VM, %g0 + bne,a 2f + mov -1,%o0 + set __NR_getpid,%g1 + ta 0x10 +2: st %o0,[%g7 + PID] + st %o0,[%g7 + TID] +1: +#endif call %i0 mov %i3,%o0 call _exit,0 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S b/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S index 750c1258ed..575416ff3f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/socket.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2002, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Miguel de Icaza , 1997. @@ -17,7 +17,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include +#include #include #define P(a, b) P2(a, b) @@ -63,7 +63,12 @@ ENTRY (__socket) #endif #endif - mov P(SOCKOP_,socket), %o0 /* arg 1: socket subfunction */ +#if defined NEED_CANCELLATION && defined CENABLE + SINGLE_THREAD_P + cmp %g1, 0 + bne .Lsocket_cancel +#endif + mov P(SOCKOP_,socket), %o0 /* arg 1: socket subfunction */ add %sp, STACK_BIAS + 128, %o1 /* arg 2: parameter block */ LOADSYSCALL(socketcall) ta 0x6d @@ -73,6 +78,31 @@ ENTRY (__socket) retl nop +#if defined NEED_CANCELLATION && defined CENABLE +.Lsocket_cancel: + cfi_startproc + save %sp, -160, %sp + cfi_def_cfa_register (%fp) + cfi_window_save + cfi_register (%o7, %i7) + CENABLE + nop + mov %o0, %l0 + add %sp, 160 + STACK_BIAS + 128, %o1 + mov P(SOCKOP_,socket), %o0 + LOADSYSCALL(socketcall) + ta 0x6d + + bcs,pn %xcc, __syscall_error_handler2 + mov %o0, %l1 + CDISABLE + mov %l0, %o0 + jmpl %i7 + 8, %g0 + restore %g0, %l1, %o0 + cfi_endproc + SYSCALL_ERROR_HANDLER2 +#endif + SYSCALL_ERROR_HANDLER END (__socket) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h index 37a68aaeba..3c6492aeca 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 2000, 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson , 1997. @@ -85,7 +85,7 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler) \ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7; \ call __sparc64.get_pic.l7; \ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7; \ - ldx [%l7 + errno], %l0; \ + ldx [%l7 + rtld_errno], %l0; \ st %i0, [%l0]; \ jmpl %i7+8, %g0; \ restore %g0, -1, %o0; \ -- 2.11.4.GIT