diff options
-rw-r--r-- | ChangeLog | 24 | ||||
-rw-r--r-- | include/features.h | 4 | ||||
-rw-r--r-- | malloc/malloc.h | 4 | ||||
-rw-r--r-- | misc/sys/cdefs.h | 1 | ||||
-rw-r--r-- | sysdeps/ia64/fpu/fraiseexcpt.c | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/clone.S | 77 |
6 files changed, 35 insertions, 98 deletions
diff --git a/ChangeLog b/ChangeLog index cbe9141d72..bbc00d4fd3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +2000-10-07 Ulrich Drepper <drepper@redhat.com> + + * include/features.h (__STDC_ISO_10646__): Set to correct date. + Patch by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>. + +2000-10-06 Jes Sorensen <jes@linuxcare.com> + + * 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 <hjl@gnu.org> + + * 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 <jakub@redhat.com> + + * malloc/malloc.h (__THROW): Define to nothing if not gcc. + * misc/sys/cdefs.h (__THROW): Likewise. + 2000-10-05 Jakub Jelinek <jakub@redhat.com> * sysdeps/sparc/sparc64/fpu/libm-test-ulps: New file. diff --git a/include/features.h b/include/features.h index 6f7da360e3..dc30b13fe3 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 decf61c3c9..270642e679 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 a4535e3cac..3174a8524c 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 78a881117e..57111a94cf 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 75a33d2f2c..0cfaeab64e 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 <sysdep.h> - -/* 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. */ |