From 9b767d19e6f76c10bb0486c113f28145fdd850e5 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 7 Oct 2000 22:28:05 +0000 Subject: Update. 2000-10-07 Ulrich Drepper * include/features.h (__STDC_ISO_10646__): Set to correct date. Patch by Markus Kuhn . 2000-10-06 Jes Sorensen * sysdeps/ia64/fpu/fraiseexcpt.c (feraiseexcept): Implement overflow generation by adding DBL_MAX to DBL_MAX instead of setting the bits manually in the fpsr and generating the exception with kill() if necessary. (feraiseexcept): Implement underflow by dividing DBL_MIN by DBL_MIN - similar to the overflow change described above. 2000-08-27 H.J. Lu * sysdeps/unix/sysv/linux/ia64/clone.S: Make it a dummy as clone is not supported under Linux/ia64, use clone2. 2000-10-06 Jakub Jelinek * malloc/malloc.h (__THROW): Define to nothing if not gcc. * misc/sys/cdefs.h (__THROW): Likewise. --- ChangeLog | 24 +++++++++++ include/features.h | 4 +- malloc/malloc.h | 4 +- misc/sys/cdefs.h | 1 + sysdeps/ia64/fpu/fraiseexcpt.c | 23 ++--------- sysdeps/unix/sysv/linux/ia64/clone.S | 77 +----------------------------------- 6 files changed, 35 insertions(+), 98 deletions(-) diff --git a/ChangeLog b/ChangeLog index cbe9141..bbc00d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +2000-10-07 Ulrich Drepper + + * include/features.h (__STDC_ISO_10646__): Set to correct date. + Patch by Markus Kuhn . + +2000-10-06 Jes Sorensen + + * sysdeps/ia64/fpu/fraiseexcpt.c (feraiseexcept): Implement + overflow generation by adding DBL_MAX to DBL_MAX instead of + setting the bits manually in the fpsr and generating the exception + with kill() if necessary. + (feraiseexcept): Implement underflow by dividing DBL_MIN by + DBL_MIN - similar to the overflow change described above. + +2000-08-27 H.J. Lu + + * sysdeps/unix/sysv/linux/ia64/clone.S: Make it a dummy as clone + is not supported under Linux/ia64, use clone2. + +2000-10-06 Jakub Jelinek + + * malloc/malloc.h (__THROW): Define to nothing if not gcc. + * misc/sys/cdefs.h (__THROW): Likewise. + 2000-10-05 Jakub Jelinek * sysdeps/sparc/sparc64/fpu/libm-test-ulps: New file. diff --git a/include/features.h b/include/features.h index 6f7da36..dc30b13 100644 --- a/include/features.h +++ b/include/features.h @@ -243,8 +243,8 @@ #define __STDC_IEC_559__ 1 #define __STDC_IEC_559_COMPLEX__ 1 -/* wchar_t uses Unicode 3.0. */ -#define __STDC_ISO_10646__ 200001L +/* wchar_t uses ISO 10646-1:2000 / Unicode 3.0 */ +#define __STDC_ISO_10646__ 200010L /* This macro indicates that the installed library is the GNU C Library. For historic reasons the value now is 6 and this will stay from now diff --git a/malloc/malloc.h b/malloc/malloc.h index decf61c..270642e 100644 --- a/malloc/malloc.h +++ b/malloc/malloc.h @@ -1,5 +1,5 @@ /* Prototypes and definition for malloc implementation. - Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1999, 2000 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 @@ -76,6 +76,8 @@ #else /* Not GCC. */ +# define __THROW + # if (defined __STDC__ && __STDC__) || defined __cplusplus # define __MALLOC_P(args) args diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index a4535e3..3174a85 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -54,6 +54,7 @@ # define __inline /* No inline functions. */ +# define __THROW # define __P(args) args # define __PMT(args) args diff --git a/sysdeps/ia64/fpu/fraiseexcpt.c b/sysdeps/ia64/fpu/fraiseexcpt.c index 78a8811..57111a9 100644 --- a/sysdeps/ia64/fpu/fraiseexcpt.c +++ b/sysdeps/ia64/fpu/fraiseexcpt.c @@ -51,35 +51,20 @@ feraiseexcept (int excepts) if (FE_DIVBYZERO & excepts) __asm__ __volatile__ ("frcpa.s0 %0,p1=f1,f0" : "=f" (tmp) : : "p1" ); - /* XXX There seem to be no reliable way to generate - overflow/underflow exceptions without causing inexact exceptions - as well. */ /* Next: overflow. */ if (FE_OVERFLOW & excepts) { - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - fpsr |= (FE_OVERFLOW << 13); - __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r" (fpsr)); + dummy = DBL_MAX; - if (!((unsigned long int) fpsr & FE_OVERFLOW)) - { - pid_t pid = getpid (); - kill (pid, SIGFPE); - } + __asm__ __volatile__ ("fadd.d.s0 %0=%1,%1" : "=f" (dummy) : "0" (dummy)); } /* Next: underflow. */ if (FE_UNDERFLOW & excepts) { - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - fpsr |= (FE_UNDERFLOW << 13); - __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r" (fpsr)); + dummy = DBL_MIN; - if (!((unsigned long int) fpsr & FE_UNDERFLOW)) - { - pid_t pid = getpid(); - kill (pid, SIGFPE); - } + __asm__ __volatile__ ("fnma.d.s0 %0=%1,%1,f0" : "=f" (tmp) : "f" (dummy)); } /* Last: inexact. */ diff --git a/sysdeps/unix/sysv/linux/ia64/clone.S b/sysdeps/unix/sysv/linux/ia64/clone.S index 75a33d2..0cfaeab 100644 --- a/sysdeps/unix/sysv/linux/ia64/clone.S +++ b/sysdeps/unix/sysv/linux/ia64/clone.S @@ -1,76 +1 @@ -/* Copyright (C) 1999,2000 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* clone is even more special than fork as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */ - -/* - * Used for both clone and fork system calls. Note that if fn is NULL - * then clone was called from fork. - */ - -ENTRY(__clone) - add r2 = -16, r33 // save space for fn and arg - cmp.ne p6,p0 = 0,r33 - ;; -(p6) add r33 = -16, r33 - add r12 = -16, r12 - ;; -(p6) st8 [r2] = r32, 8 // save fn for child - st8 [r12] = r32 // save fn for parent - ;; -(p6) st8 [r2] = r35 // save arg for child - mov r32 = r34 // put flags in out0 - DO_CALL (SYS_ify (clone)) -1: - ld8 r33 = [r12], 8 // recover fn - ;; - ld8 r32 = [r12], 8 // recover arg - - cmp.eq p6,p0=-1,r10 -(p6) br.cond.spnt.many __syscall_error // handle error - - cmp.ne p7,p0=0,r8 -(p7) ret // parent process, just return - - cmp.eq p8,p0=0,r33 -(p8) ret // fork call, return - - alloc loc0 = ar.pfs,2,2,2,0 - ;; - ld8 r2 = [in1], 8 // get address of fn - mov out0 = in0 - mov loc1 = gp // save gp across indirect call - ;; - ld8 gp = [in1] // set new gp - mov b6 = r2 - br.call.sptk b0 = b6 // call thread routine - ;; - - mov ar.pfs = loc0 - mov gp = loc1 - mov r32 = r8 // exit value - ;; - br.call.sptk b0 = _exit // we're out of here - -PSEUDO_END(__clone) - -weak_alias (__clone, clone) +/* clone is not supported under Linux/ia64, use clone2. */ -- cgit v1.1