diff options
21 files changed, 121 insertions, 166 deletions
diff --git a/ChangeLog b/ChangeLog index 32ce9af459..ba42b5bd28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,44 @@ 2016-12-14 Joseph Myers <joseph@codesourcery.com> + * bits/long-double.h: New file. + * sysdeps/ieee754/ldbl-128/bits/long-double.h: Likewise. + * sysdeps/ieee754/ldbl-96/bits/long-double.h: Likewise. + * sysdeps/ieee754/ldbl-opt/bits/long-double.h: Likewise. + * sysdeps/mips/bits/long-double.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/long-double.h: Likewise. + * math/Makefile (headers): Add bits/long-double.h. + * misc/sys/cdefs.h: Include <bits/long-double.h>. + * stdlib/strtold.c: Include <bits/long-double.h> instead of + <bits/wordsize.h>. + * bits/mathdef.h [!_COMPLEX_H]: Do not allow inclusion. + [!__NO_LONG_DOUBLE_MATH]: Remove conditional code. + * math/math.h: Do not include <bits/mathdef.h>. + * sysdeps/aarch64/bits/mathdef.h: Remove file. + * sysdeps/alpha/bits/mathdef.h [!_COMPLEX_H]: Do not allow + inclusion. + * sysdeps/ia64/bits/mathdef.h: Remove file. + * sysdeps/m68k/m680x0/bits/mathdef.h: Likewise. + * sysdeps/mips/bits/mathdef.h: Likewise. + * sysdeps/powerpc/bits/mathdef.h: Likewise. + * sysdeps/s390/bits/mathdef.h: Likewise. + * sysdeps/sparc/bits/mathdef.h: Likewise. + * sysdeps/x86/bits/mathdef.h: Likewise. + * sysdeps/s390/s390-32/bits/wordsize.h + [!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]: Remove + conditional code. + * sysdeps/s390/s390-64/bits/wordsize.h + [!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]: + Likewise. + * sysdeps/unix/sysv/linux/alpha/bits/wordsize.h + [!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]: + Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h + [!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]: + Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/wordsize.h + [!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]: + Likewise. + * sysdeps/unix/sysv/linux/bits/fcntl-linux.h [__USE_GNU]: Include <linux/falloc.h>. (FALLOC_FL_KEEP_SIZE): Remove. diff --git a/bits/long-double.h b/bits/long-double.h new file mode 100644 index 0000000000..16578571b8 --- /dev/null +++ b/bits/long-double.h @@ -0,0 +1,39 @@ +/* Properties of long double type. + Copyright (C) 2016 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 + modify it under the terms of the GNU Lesser General Public + License published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* This header is included by <sys/cdefs.h>. + + If long double is ABI-compatible with double, it should define + __NO_LONG_DOUBLE_MATH to 1; otherwise, it should leave + __NO_LONG_DOUBLE_MATH undefined. + + If this build of the GNU C Library supports both long double + ABI-compatible with double and some other long double format not + ABI-compatible with double, it should define + __LONG_DOUBLE_MATH_OPTIONAL to 1; otherwise, it should leave + __LONG_DOUBLE_MATH_OPTIONAL undefined. + + If __NO_LONG_DOUBLE_MATH is already defined, this header must not + define anything; this is needed to work with the definition of + __NO_LONG_DOUBLE_MATH in nldbl-compat.h. */ + +/* In the default version of this header, long double is + ABI-compatible with double. */ +#ifndef __NO_LONG_DOUBLE_MATH +# define __NO_LONG_DOUBLE_MATH 1 +#endif diff --git a/bits/mathdef.h b/bits/mathdef.h index 014829790a..5e80e920b4 100644 --- a/bits/mathdef.h +++ b/bits/mathdef.h @@ -15,12 +15,6 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif - -#ifndef __NO_LONG_DOUBLE_MATH -/* Signal that we do not really have a `long double'. The disables the - declaration of all the `long double' function variants. */ -# define __NO_LONG_DOUBLE_MATH 1 +#ifndef _COMPLEX_H +# error "Never use <bits/mathdef.h> directly; include <complex.h> instead" #endif diff --git a/math/Makefile b/math/Makefile index 1e96100120..84d061f124 100644 --- a/math/Makefile +++ b/math/Makefile @@ -28,7 +28,8 @@ headers := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \ bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \ bits/math-finite.h bits/math-vector.h \ bits/libm-simd-decl-stubs.h bits/iscanonical.h \ - bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h + bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h \ + bits/long-double.h # FPU support code. aux := setfpucw fpu_control diff --git a/math/math.h b/math/math.h index b8f4b415c7..1dca14684d 100644 --- a/math/math.h +++ b/math/math.h @@ -138,10 +138,6 @@ typedef _Float128x double_t; # endif #endif -/* Get information about long double. */ - -#include <bits/mathdef.h> - /* Get the architecture specific values describing the floating-point evaluation. The following symbols will get defined: diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 9298dd60f9..e07f3fcbcb 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -439,6 +439,7 @@ #endif #include <bits/wordsize.h> +#include <bits/long-double.h> #if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH # define __LDBL_COMPAT 1 diff --git a/stdlib/strtold.c b/stdlib/strtold.c index bb46f23c29..251663ffcd 100644 --- a/stdlib/strtold.c +++ b/stdlib/strtold.c @@ -20,7 +20,7 @@ /* The actual implementation for all floating point sizes is in strtod.c. These macros tell it to produce the `float' version, `strtof'. */ -#include <bits/wordsize.h> +#include <bits/long-double.h> #ifdef __LONG_DOUBLE_MATH_OPTIONAL # include <wchar.h> diff --git a/sysdeps/alpha/bits/mathdef.h b/sysdeps/alpha/bits/mathdef.h index 021563f211..e56f3e5212 100644 --- a/sysdeps/alpha/bits/mathdef.h +++ b/sysdeps/alpha/bits/mathdef.h @@ -15,8 +15,8 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" +#ifndef _COMPLEX_H +# error "Never use <bits/mathdef.h> directly; include <complex.h> instead" #endif #if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF diff --git a/sysdeps/ia64/bits/mathdef.h b/sysdeps/ieee754/ldbl-128/bits/long-double.h index e689835716..3f10da8486 100644 --- a/sysdeps/ia64/bits/mathdef.h +++ b/sysdeps/ieee754/ldbl-128/bits/long-double.h @@ -1,9 +1,10 @@ -/* Copyright (C) 2000-2016 Free Software Foundation, Inc. +/* Properties of long double type. ldbl-128 version. + Copyright (C) 2016 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 modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either + License published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, @@ -15,6 +16,5 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif +/* long double is distinct from double, so there is nothing to + define here. */ diff --git a/sysdeps/aarch64/bits/mathdef.h b/sysdeps/ieee754/ldbl-96/bits/long-double.h index 2213635bd8..180a7cf343 100644 --- a/sysdeps/aarch64/bits/mathdef.h +++ b/sysdeps/ieee754/ldbl-96/bits/long-double.h @@ -1,10 +1,10 @@ -/* Copyright (C) 1999-2016 Free Software Foundation, Inc. - +/* Properties of long double type. ldbl-96 version. + Copyright (C) 2016 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 modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either + License published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, @@ -16,6 +16,5 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif +/* long double is distinct from double, so there is nothing to + define here. */ diff --git a/sysdeps/s390/bits/mathdef.h b/sysdeps/ieee754/ldbl-opt/bits/long-double.h index eeea6fcdc2..dce98c38c6 100644 --- a/sysdeps/s390/bits/mathdef.h +++ b/sysdeps/ieee754/ldbl-opt/bits/long-double.h @@ -1,9 +1,10 @@ -/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* Properties of long double type. ldbl-opt version. + Copyright (C) 2016 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 modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either + License published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, @@ -15,6 +16,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" +#ifndef __NO_LONG_DOUBLE_MATH +# define __LONG_DOUBLE_MATH_OPTIONAL 1 +# ifndef __LONG_DOUBLE_128__ +# define __NO_LONG_DOUBLE_MATH 1 +# endif #endif diff --git a/sysdeps/m68k/m680x0/bits/mathdef.h b/sysdeps/m68k/m680x0/bits/mathdef.h deleted file mode 100644 index 7926c6aaf7..0000000000 --- a/sysdeps/m68k/m680x0/bits/mathdef.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 1997-2016 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif diff --git a/sysdeps/sparc/bits/mathdef.h b/sysdeps/mips/bits/long-double.h index 65ab45aad3..b51fce8e6e 100644 --- a/sysdeps/sparc/bits/mathdef.h +++ b/sysdeps/mips/bits/long-double.h @@ -1,9 +1,10 @@ -/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* Properties of long double type. MIPS version. + Copyright (C) 2016 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 modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either + License published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, @@ -15,8 +16,8 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif +#include <sgidefs.h> -#include <bits/wordsize.h> +#if !defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32 +# define __NO_LONG_DOUBLE_MATH 1 +#endif diff --git a/sysdeps/mips/bits/mathdef.h b/sysdeps/mips/bits/mathdef.h deleted file mode 100644 index 31fc4001df..0000000000 --- a/sysdeps/mips/bits/mathdef.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1997-2016 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif - -#include <sgidefs.h> - -#if ! defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32 -/* Signal that we do not really have a `long double'. This disables the - declaration of all the `long double' function variants. */ -# define __NO_LONG_DOUBLE_MATH 1 -#endif diff --git a/sysdeps/s390/s390-32/bits/wordsize.h b/sysdeps/s390/s390-32/bits/wordsize.h index c7a5fbf655..129e47182b 100644 --- a/sysdeps/s390/s390-32/bits/wordsize.h +++ b/sysdeps/s390/s390-32/bits/wordsize.h @@ -9,14 +9,3 @@ #endif #define __WORDSIZE_TIME64_COMPAT32 0 - -#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL - -/* Signal that we didn't used to have a `long double'. The changes all - the `long double' function variants to be redirects to the double - functions. */ -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -#endif diff --git a/sysdeps/s390/s390-64/bits/wordsize.h b/sysdeps/s390/s390-64/bits/wordsize.h index 31e0ec6699..00e88b0628 100644 --- a/sysdeps/s390/s390-64/bits/wordsize.h +++ b/sysdeps/s390/s390-64/bits/wordsize.h @@ -9,14 +9,3 @@ #endif #define __WORDSIZE_TIME64_COMPAT32 0 - -#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL - -/* Signal that we didn't used to have a `long double'. The changes all - the `long double' function variants to be redirects to the double - functions. */ -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h b/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h index f0961f69cc..2ef70a98dd 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h @@ -17,14 +17,3 @@ #define __WORDSIZE 64 #define __WORDSIZE_TIME64_COMPAT32 0 - -#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL - -/* Signal that we didn't used to have a `long double'. The changes all - the `long double' function variants to be redirects to the double - functions. */ -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h b/sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h index 109f08ccdc..04ca9debf0 100644 --- a/sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h +++ b/sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h @@ -9,14 +9,3 @@ # define __WORDSIZE32_SIZE_ULONG 0 # define __WORDSIZE32_PTRDIFF_LONG 0 #endif - -#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL - -/* Signal the glibc ABI didn't used to have a `long double'. - The changes all the `long double' function variants to be redirects - to the double functions. */ -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -#endif diff --git a/sysdeps/powerpc/bits/mathdef.h b/sysdeps/unix/sysv/linux/sparc/bits/long-double.h index eeea6fcdc2..20039ce4ce 100644 --- a/sysdeps/powerpc/bits/mathdef.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/long-double.h @@ -1,9 +1,10 @@ -/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* Properties of long double type. SPARC version. + Copyright (C) 2016 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 modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either + License published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, @@ -15,6 +16,11 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" +#include <bits/wordsize.h> + +#if !defined __NO_LONG_DOUBLE_MATH && __WORDSIZE == 32 +# define __LONG_DOUBLE_MATH_OPTIONAL 1 +# ifndef __LONG_DOUBLE_128__ +# define __NO_LONG_DOUBLE_MATH 1 +# endif #endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h b/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h index 121b4fe8c9..7562875ee2 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h @@ -9,16 +9,3 @@ # define __WORDSIZE32_PTRDIFF_LONG 0 # define __WORDSIZE_TIME64_COMPAT32 0 #endif - -#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL - -# if __WORDSIZE == 32 -/* Signal that in 32bit ABI we didn't used to have a `long double'. - The changes all the `long double' function variants to be redirects - to the double functions. */ -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -# endif -#endif diff --git a/sysdeps/x86/bits/mathdef.h b/sysdeps/x86/bits/mathdef.h deleted file mode 100644 index 1c6aee6ba5..0000000000 --- a/sysdeps/x86/bits/mathdef.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2001-2016 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif |