+2017-08-21 Joseph Myers <joseph@codesourcery.com>
+
+ * math/math.h [__USE_MISC] (_LIB_VERSION_TYPE): Remove.
+ [__USE_MISC] (_LIB_VERSION): Likewise.
+ [__USE_MISC] (struct exception): Likewise.
+ [__USE_MISC] (matherr): Likewise.
+ [__USE_MISC] (DOMAIN): Likewise.
+ [__USE_MISC] (SING): Likewise.
+ [__USE_MISC] (OVERFLOW): Likewise.
+ [__USE_MISC] (UNDERFLOW): Likewise.
+ [__USE_MISC] (TLOSS): Likewise.
+ [__USE_MISC] (PLOSS): Likewise.
+ [__USE_MISC] (HUGE): Likewise.
+ [__USE_XOPEN] (MAXFLOAT): Define even if [__USE_MISC].
+ * math/math-svid-compat.h: New file.
+ * conform/linknamespace.pl (@whitelist): Remove matherr, matherrf
+ and matherrl.
+ * include/math.h [!_ISOMAC] (__matherr): Remove.
+ * manual/arith.texi (FP Exceptions): Do not document matherr.
+ * math/Makefile (tests): Change test-matherr to test-matherr-3.
+ (tests-internal): New variable.
+ (install-lib): Do not add libieee.a.
+ (non-lib.a): Likewise.
+ (extra-objs): Do not add libieee.a and ieee-math.o.
+ (CPPFLAGS-s_lib_version.c): Remove variable.
+ ($(objpfx)libieee.a): Remove rule.
+ ($(addprefix $(objpfx), $(tests-internal)): Depend on $(libm).
+ * math/ieee-math.c: Remove.
+ * math/libm-test-support.c (matherr): Remove.
+ * math/test-matherr.c: Use <support/test-driver.c>. Add copyright
+ and license notices. Include <math-svid-compat.h> and
+ <shlib-compat.h>.
+ (matherr): Undefine as macro. Use compat_symbol_reference.
+ (_LIB_VERSION): Likewise.
+ * math/test-matherr-2.c: New file.
+ * math/test-matherr-3.c: Likewise.
+ * sysdeps/generic/math_private.h (__kernel_standard): Remove
+ declaration.
+ (__kernel_standard_f): Likewise.
+ (__kernel_standard_l): Likewise.
+ * sysdeps/ieee754/s_lib_version.c: Do not include <math.h> or
+ <math_private.h>. Include <math-svid-compat.h>.
+ (_LIB_VERSION): Undefine as macro.
+ (_LIB_VERSION_INTERNAL): Always initialize to _POSIX_. Define
+ only if [LIBM_SVID_COMPAT || !defined SHARED]. If
+ [LIBM_SVID_COMPAT], use compat_symbol.
+ * sysdeps/ieee754/s_matherr.c: Do not include <math.h> or
+ <math_private.h>. Include <math-svid-compat.h>.
+ (matherr): Undefine as macro.
+ (__matherr): Define only if [LIBM_SVID_COMPAT]. Use
+ compat_symbol.
+ * sysdeps/ia64/fpu/libm_error.c: Include <math-svid-compat.h>.
+ [_LIBC && LIBM_SVID_COMPAT] (matherrf): Use
+ compat_symbol_reference.
+ [_LIBC && LIBM_SVID_COMPAT] (matherrl): Likewise.
+ [_LIBC && !LIBM_SVID_COMPAT] (matherrf): Define as macro.
+ [_LIBC && !LIBM_SVID_COMPAT] (matherrl): Likewise.
+ * sysdeps/ia64/fpu/libm_support.h: Include <math-svid-compat.h>.
+ (MATHERR_D): Remove declaration.
+ [!_LIBC] (_LIB_VERSION_TYPE): Likewise
+ [!LIBM_BUILD] (_LIB_VERSIONIMF): Likewise.
+ [LIBM_BUILD] (pmatherrf): Likewise.
+ [LIBM_BUILD] (pmatherr): Likewise.
+ [LIBM_BUILD] (pmatherrl): Likewise.
+ (DOMAIN): Likewise.
+ (SING): Likewise.
+ (OVERFLOW): Likewise.
+ (UNDERFLOW): Likewise.
+ (TLOSS): Likewise.
+ (PLOSS): Likewise.
+ * sysdeps/ia64/fpu/s_matherrf.c: Include <math-svid-compat.h>.
+ (__matherrf): Define only if [LIBM_SVID_COMPAT]. Use
+ compat_symbol.
+ * sysdeps/ia64/fpu/s_matherrl.c: Include <math-svid-compat.h>.
+ (__matherrl): Define only if [LIBM_SVID_COMPAT]. Use
+ compat_symbol.
+ * math/lgamma-compat.h: Include <math-svid-compat.h>.
+ * math/w_acos_compat.c: Likewise.
+ * math/w_acosf_compat.c: Likewise.
+ * math/w_acosh_compat.c: Likewise.
+ * math/w_acoshf_compat.c: Likewise.
+ * math/w_acoshl_compat.c: Likewise.
+ * math/w_acosl_compat.c: Likewise.
+ * math/w_asin_compat.c: Likewise.
+ * math/w_asinf_compat.c: Likewise.
+ * math/w_asinl_compat.c: Likewise.
+ * math/w_atan2_compat.c: Likewise.
+ * math/w_atan2f_compat.c: Likewise.
+ * math/w_atan2l_compat.c: Likewise.
+ * math/w_atanh_compat.c: Likewise.
+ * math/w_atanhf_compat.c: Likewise.
+ * math/w_atanhl_compat.c: Likewise.
+ * math/w_cosh_compat.c: Likewise.
+ * math/w_coshf_compat.c: Likewise.
+ * math/w_coshl_compat.c: Likewise.
+ * math/w_exp10_compat.c: Likewise.
+ * math/w_exp10f_compat.c: Likewise.
+ * math/w_exp10l_compat.c: Likewise.
+ * math/w_exp2_compat.c: Likewise.
+ * math/w_exp2f_compat.c: Likewise.
+ * math/w_exp2l_compat.c: Likewise.
+ * math/w_fmod_compat.c: Likewise.
+ * math/w_fmodf_compat.c: Likewise.
+ * math/w_fmodl_compat.c: Likewise.
+ * math/w_hypot_compat.c: Likewise.
+ * math/w_hypotf_compat.c: Likewise.
+ * math/w_hypotl_compat.c: Likewise.
+ * math/w_j0_compat.c: Likewise.
+ * math/w_j0f_compat.c: Likewise.
+ * math/w_j0l_compat.c: Likewise.
+ * math/w_j1_compat.c: Likewise.
+ * math/w_j1f_compat.c: Likewise.
+ * math/w_j1l_compat.c: Likewise.
+ * math/w_jn_compat.c: Likewise.
+ * math/w_jnf_compat.c: Likewise.
+ * math/w_jnl_compat.c: Likewise.
+ * math/w_lgamma_main.c: Likewise.
+ * math/w_lgamma_r_compat.c: Likewise.
+ * math/w_lgammaf_main.c: Likewise.
+ * math/w_lgammaf_r_compat.c: Likewise.
+ * math/w_lgammal_main.c: Likewise.
+ * math/w_lgammal_r_compat.c: Likewise.
+ * math/w_log10_compat.c: Likewise.
+ * math/w_log10f_compat.c: Likewise.
+ * math/w_log10l_compat.c: Likewise.
+ * math/w_log2_compat.c: Likewise.
+ * math/w_log2f_compat.c: Likewise.
+ * math/w_log2l_compat.c: Likewise.
+ * math/w_log_compat.c: Likewise.
+ * math/w_logf_compat.c: Likewise.
+ * math/w_logl_compat.c: Likewise.
+ * math/w_pow_compat.c: Likewise.
+ * math/w_powf_compat.c: Likewise.
+ * math/w_powl_compat.c: Likewise.
+ * math/w_remainder_compat.c: Likewise.
+ * math/w_remainderf_compat.c: Likewise.
+ * math/w_remainderl_compat.c: Likewise.
+ * math/w_scalb_compat.c: Likewise.
+ * math/w_scalbf_compat.c: Likewise.
+ * math/w_scalbl_compat.c: Likewise.
+ * math/w_sinh_compat.c: Likewise.
+ * math/w_sinhf_compat.c: Likewise.
+ * math/w_sinhl_compat.c: Likewise.
+ * math/w_sqrt_compat.c: Likewise.
+ * math/w_sqrtf_compat.c: Likewise.
+ * math/w_sqrtl_compat.c: Likewise.
+ * math/w_tgamma_compat.c: Likewise.
+ * math/w_tgammaf_compat.c: Likewise.
+ * math/w_tgammal_compat.c: Likewise.
+ * sysdeps/ieee754/dbl-64/w_exp_compat.c: Likewise.
+ * sysdeps/ieee754/flt-32/w_expf_compat.c: Likewise.
+ * sysdeps/ieee754/k_standard.c: Likewise.
+ * sysdeps/ieee754/k_standardf.c: Likewise.
+ * sysdeps/ieee754/k_standardl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/w_expl_compat.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/w_expl_compat.c: Likewise.
+ * sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt_compat.S: Likewise.
+ * sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf_compat.S: Likewise.
+ * sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt_compat.S: Likewise.
+ * sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf_compat.S: Likewise.
+ * sysdeps/sparc/sparc32/fpu/w_sqrt_compat.S: Likewise.
+ * sysdeps/sparc/sparc32/fpu/w_sqrtf_compat.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat-vis3.S:
+ Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat-vis3.S:
+ Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt_compat.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf_compat.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S: Likewise.
+
2017-08-21 Florian Weimer <fweimer@redhat.com>
[BZ #21864]
* On GNU/Linux, the obsolete Linux constant PTRACE_SEIZE_DEVEL is no longer
defined by <sys/ptrace.h>.
+* libm no longer supports SVID error handling (calling a user-provided
+ matherr function on error) or the _LIB_VERSION variable to control error
+ handling. (SVID error handling and the _LIB_VERSION variable still work
+ for binaries linked against older versions of the GNU C Library.) The
+ libieee.a library is no longer provided. math.h no longer defines struct
+ exception, or the macros X_TLOSS, DOMAIN, SING, OVERFLOW, UNDERFLOW,
+ TLOSS, PLOSS and HUGE.
+
Changes to build and runtime requirements:
[Add changes to build and runtime requirements here]
# * Bug 18442: re_syntax_options wrongly brought in by regcomp and
# used by re_comp.
#
-# * False positive: matherr only used conditionally. matherrf/matherrl are used
-# by IA64 too for the same reason.
-#
-@whitelist = qw(stdin stdout stderr re_syntax_options matherr matherrf
- matherrl);
+@whitelist = qw(stdin stdout stderr re_syntax_options);
foreach my $sym (@whitelist) {
$stdsyms{$sym} = 1;
}
# possible that (a) any standard library definition is weak, so can be
# overridden by the user's definition, and (b) the symbol is only used
# conditionally and not if the program is limited to standard
-# functionality. (matherr is an example of such a false positive.)
+# functionality.
#
# * If a symbol reference is only brought in by the user using a data
# symbol rather than a function from the standard library, this will
#ifndef _ISOMAC
/* Now define the internal interfaces. */
-extern int __matherr (struct exception *__exc);
-
extern int __signgam;
# if IS_IN (libc) || IS_IN (libm)
program. @xref{Signal Handling}, for how you can change the effect of
the signal.
-@findex matherr
-In the System V math library, the user-defined function @code{matherr}
-is called when certain exceptions occur inside math library functions.
-However, the Unix98 standard deprecates this interface. We support it
-for historical compatibility, but recommend that you do not use it in
-new programs. When this interface is used, exceptions may not be
-raised.
-
@noindent
The exceptions defined in @w{IEEE 754} are:
endif
# Rules for the test suite.
-tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
+tests = test-matherr-3 test-fenv atest-exp atest-sincos atest-exp2 basic-test \
test-misc test-fpucw test-fpucw-ieee tst-definitions test-tgmath \
test-tgmath-ret bug-nextafter bug-nexttoward bug-tgmath1 \
test-tgmath-int test-tgmath2 test-powl tst-CMPLX tst-CMPLX2 test-snan \
test-signgam-uchar-static test-signgam-uchar-init-static \
test-signgam-uint-static test-signgam-uint-init-static \
test-signgam-ullong-static test-signgam-ullong-init-static
+tests-internal = test-matherr test-matherr-2
ifneq (,$(CXX))
tests += test-math-isinff test-math-iszero
CFLAGS-test-fe-snans-always-signal.c = -fsignaling-nans
-# The -lieee module sets the _LIB_VERSION_ switch to IEEE mode
-# for error handling in the -lm functions.
-install-lib += libieee.a
-non-lib.a += libieee.a
-extra-objs += libieee.a ieee-math.o
-
include ../Rules
gen-all-calls = $(gen-libm-calls) $(gen-calls)
object-suffixes-left := $(all-object-suffixes)
include $(o-iterator)
-# This file defines the default _LIB_VERSION variable that controls
-# the error return conventions for the math functions.
-CPPFLAGS-s_lib_version.c := -D_POSIX_MODE
-
# We don't want the fdlibm code to use the inline math functions,
# only the fdlibm code.
math-CPPFLAGS += -D__NO_MATH_INLINES -D__LIBC_INTERNAL_MATH_INLINES
CFLAGS-s_modfl.c += -fsignaling-nans
CFLAGS-s_modff128.c += -fsignaling-nans
-# The -lieee library is actually an object file.
-# The module just defines the _LIB_VERSION_ variable.
-# It's not a library to make sure it is linked in instead of s_lib_version.o.
-$(objpfx)libieee.a: $(objpfx)ieee-math.o
- rm -f $@
- $(patsubst %/,cd % &&,$(objpfx)) \
- $(LN_S) $(<F) $(@F)
-
$(addprefix $(objpfx),\
$(filter-out $(tests-static) $(libm-tests-vector),\
- $(tests))): $(libm)
+ $(tests) $(tests-internal))): $(libm)
$(addprefix $(objpfx),$(tests-static)): $(objpfx)libm.a
define o-iterator-doit
$(foreach f,$($(o)-funcs),\
+++ /dev/null
-/* Linking in this module forces IEEE error handling rules for math functions.
- The default is POSIX.1 error handling. */
-
-#include <math.h>
-
-_LIB_VERSION_TYPE _LIB_VERSION = _IEEE_;
#ifndef LGAMMA_COMPAT_H
#define LGAMMA_COMPAT_H 1
+#include <math-svid-compat.h>
#include <shlib-compat.h>
/* XSI POSIX requires lgamma to set signgam, but ISO C does not permit
return 1;
}
-/* This is to prevent messages from the SVID libm emulation. */
-int
-matherr (struct exception *x __attribute__ ((unused)))
-{
- return 1;
-}
-
static void
initialize (void)
{
--- /dev/null
+/* Declarations for SVID math error handling compatibility.
+ Copyright (C) 1991-2017 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/>. */
+
+#ifndef _MATH_SVID_COMPAT_H
+#define _MATH_SVID_COMPAT_H 1
+
+#ifndef __ASSEMBLER__
+/* Support for various different standard error handling behaviors. */
+typedef enum
+{
+ _IEEE_ = -1, /* According to IEEE 754/IEEE 854. */
+ _SVID_, /* According to System V, release 4. */
+ _XOPEN_, /* Nowadays also Unix98. */
+ _POSIX_,
+ _ISOC_ /* Actually this is ISO C99. */
+} _LIB_VERSION_TYPE;
+
+/* This variable can be changed at run-time to any of the values above to
+ affect floating point error handling behavior (it may also be necessary
+ to change the hardware FPU exception settings). */
+extern _LIB_VERSION_TYPE _LIB_VERSION;
+
+/* In SVID error handling, `matherr' is called with this description
+ of the exceptional condition. */
+struct exception
+ {
+ int type;
+ char *name;
+ double arg1;
+ double arg2;
+ double retval;
+ };
+
+extern int matherr (struct exception *__exc);
+extern int __matherr (struct exception *__exc);
+
+# define X_TLOSS 1.41484755040568800000e+16
+
+/* Types of exceptions in the `type' field. */
+# define DOMAIN 1
+# define SING 2
+# define OVERFLOW 3
+# define UNDERFLOW 4
+# define TLOSS 5
+# define PLOSS 6
+
+/* SVID mode specifies returning this large value instead of infinity. */
+# define HUGE 3.40282347e+38F
+#endif
+
+/* The above definitions may be used in testcases. The following code
+ is only used in the implementation. */
+
+#ifdef _LIBC
+# ifndef __ASSEMBLER__
+/* fdlibm kernel function */
+extern double __kernel_standard (double, double, int);
+extern float __kernel_standard_f (float, float, int);
+extern long double __kernel_standard_l (long double, long double, int);
+# endif
+
+# include <shlib-compat.h>
+# define LIBM_SVID_COMPAT SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_27)
+# if LIBM_SVID_COMPAT
+compat_symbol_reference (libm, matherr, matherr, GLIBC_2_0);
+compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0);
+# elif !defined __ASSEMBLER__
+/* Except when building compat code, optimize out references to
+ _LIB_VERSION and matherr. */
+# define _LIB_VERSION _POSIX_
+# define matherr(EXC) ((void) (EXC), 0)
+# endif
+#endif
+
+#endif /* math-svid-compat.h. */
# endif /* __cplusplus */
#endif /* Use IEC_60559_BFP_EXT. */
-#ifdef __USE_MISC
-/* Support for various different standard error handling behaviors. */
-typedef enum
-{
- _IEEE_ = -1, /* According to IEEE 754/IEEE 854. */
- _SVID_, /* According to System V, release 4. */
- _XOPEN_, /* Nowadays also Unix98. */
- _POSIX_,
- _ISOC_ /* Actually this is ISO C99. */
-} _LIB_VERSION_TYPE;
-
-/* This variable can be changed at run-time to any of the values above to
- affect floating point error handling behavior (it may also be necessary
- to change the hardware FPU exception settings). */
-extern _LIB_VERSION_TYPE _LIB_VERSION;
-#endif
-
-
-#ifdef __USE_MISC
-/* In SVID error handling, `matherr' is called with this description
- of the exceptional condition.
-
- We have a problem when using C++ since `exception' is a reserved
- name in C++. */
-# ifdef __cplusplus
-struct __exception
-# else
-struct exception
-# endif
- {
- int type;
- char *name;
- double arg1;
- double arg2;
- double retval;
- };
-
-# ifdef __cplusplus
-extern int matherr (struct __exception *__exc) throw ();
-# else
-extern int matherr (struct exception *__exc);
-# endif
-
-# define X_TLOSS 1.41484755040568800000e+16
-
-/* Types of exceptions in the `type' field. */
-# define DOMAIN 1
-# define SING 2
-# define OVERFLOW 3
-# define UNDERFLOW 4
-# define TLOSS 5
-# define PLOSS 6
-
-/* SVID mode specifies returning this large value instead of infinity. */
-# define HUGE 3.40282347e+38F
-
-#else /* !Misc. */
-
-# ifdef __USE_XOPEN
+#ifdef __USE_XOPEN
/* X/Open wants another strange constant. */
-# define MAXFLOAT 3.40282347e+38F
-# endif
-
-#endif /* Misc. */
+# define MAXFLOAT 3.40282347e+38F
+#endif
/* Some useful constants. */
--- /dev/null
+/* Test matherr (compat symbols, binary defines own _LIB_VERSION).
+ Copyright (C) 1997-2017 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/>. */
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#undef matherr
+#undef _LIB_VERSION
+compat_symbol_reference (libm, matherr, matherr, GLIBC_2_0);
+compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0);
+
+_LIB_VERSION_TYPE _LIB_VERSION = _SVID_;
+
+static int fail = 1;
+
+int
+matherr (struct exception *s)
+{
+ printf ("matherr is working\n");
+ fail = 0;
+ return 1;
+}
+
+static int
+do_test (void)
+{
+ acos (2.0);
+ return fail;
+}
+
+#include <support/test-driver.c>
--- /dev/null
+/* Test matherr not supported for new binaries.
+ Copyright (C) 1997-2017 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/>. */
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <math-svid-compat.h>
+
+_LIB_VERSION_TYPE _LIB_VERSION = _SVID_;
+
+static int fail = 0;
+
+int
+matherr (struct exception *s)
+{
+ printf ("matherr is working, but should not be\n");
+ fail = 1;
+ return 1;
+}
+
+static int
+do_test (void)
+{
+ acos (2.0);
+ return fail;
+}
+
+#include <support/test-driver.c>
+/* Test matherr (compat symbols, binary modifies library's _LIB_VERSION).
+ Copyright (C) 1997-2017 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/>. */
+
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#undef matherr
+#undef _LIB_VERSION
+compat_symbol_reference (libm, matherr, matherr, GLIBC_2_0);
+compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0);
+
static int fail = 1;
int
return fail;
}
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper acos */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper acosf */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper acosh */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper acoshf */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper acosl */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper acosl */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper asin */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper asinf */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper asinl */
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper atanh */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper atanhf */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper atanhl */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
__cosh (double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
__coshf (float x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
__coshl (long double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
__exp10 (double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
__exp10f (float x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
__exp10l (long double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
__exp2 (double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
__exp2f (float x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
__exp2l (long double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper fmod */
double
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper fmodf */
float
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper fmodl */
long double
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper j0 */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper j0f */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper j0l */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper j1 */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper j1f */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper j1l */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper jn */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper jnf */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double __jnl(int n, long double x) /* wrapper jnl */
{
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include <lgamma-compat.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include <lgamma-compat.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include <lgamma-compat.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper log10(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper log10f(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper log10l(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper log2(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper log2f(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper log2l(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper log(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper logf(x) */
#include <fenv.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper logl(x) */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper pow */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper powf */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper powl */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
+#include <math-svid-compat.h>
/* wrapper remainder */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
+#include <math-svid-compat.h>
/* wrapper remainderf */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
+#include <math-svid-compat.h>
/* wrapper remainderl */
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
static double
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
static float
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
static long double
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
__sinh (double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
__sinhf (float x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
__sinhl (long double x)
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper sqrt */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper sqrtf */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper sqrtl */
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
double
__tgamma(double x)
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
float
__tgammaf(float x)
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double
__tgammal(long double x)
-/* fdlibm kernel function */
-extern double __kernel_standard (double,double,int);
-extern float __kernel_standard_f (float,float,int);
-extern long double __kernel_standard_l (long double,long double,int);
-
/* Prototypes for functions of the IBM Accurate Mathematical Library. */
extern double __exp1 (double __x, double __xx, double __error);
extern double __sin (double __x);
#include <stdio.h>
#include <stdlib.h>
#include "libm_support.h"
+#include <math-svid-compat.h>
#ifdef _LIBC
# define pmatherr matherr
# define pmatherrf matherrf
# define pmatherrl matherrl
+# if LIBM_SVID_COMPAT
+compat_symbol_reference (libm, matherrf, matherrf, GLIBC_2_2_3);
+compat_symbol_reference (libm, matherrl, matherrl, GLIBC_2_2_3);
+# else
+# define matherrf(EXC) ((void) (EXC), 0)
+# define matherrl(EXC) ((void) (EXC), 0)
+# endif
#else
_LIB_VERSION_TYPE
#if defined( __POSIX__ )
#ifndef __LIBM_SUPPORT_H_INCLUDED__
#define __LIBM_SUPPORT_H_INCLUDED__
+#include <math-svid-compat.h>
+
#ifndef _LIBC
#if !(defined(_WIN32) || defined(_WIN64))
# pragma const_seg(".rodata") /* place constant data in text (code) section */
#endif
extern int MATHERR_F(struct exceptionf*);
-extern int MATHERR_D(struct EXC_DECL_D*);
extern int matherrl(struct exceptionl*);
-#ifndef _LIBC
-// Add code to support _LIB_VERSIONIMF
-typedef enum
-{
- _IEEE_ = -1, // IEEE-like behavior
- _SVID_, // SysV, Rel. 4 behavior
- _XOPEN_, // Unix98
- _POSIX_, // Posix
- _ISOC_ // ISO C9X
-} _LIB_VERSION_TYPE;
-#endif
-
-// This is a run-time variable and may affect
-// floating point behavior of the libm functions
-
-#if !defined( LIBM_BUILD )
-#if defined( _DLL )
-extern _LIB_VERSION_TYPE __declspec(dllimport) _LIB_VERSIONIMF;
-#else
-extern _LIB_VERSION_TYPE _LIB_VERSIONIMF;
-#endif /* _DLL */
-#else
-extern int (*pmatherrf)(struct exceptionf*);
-extern int (*pmatherr)(struct EXC_DECL_D*);
-extern int (*pmatherrl)(struct exceptionl*);
-#endif /* LIBM_BUILD */
-
/* memory format definitions (LITTLE_ENDIAN only) */
#if !(defined(SIZE_INT_32) || defined(SIZE_INT_64))
#endif
-/* error codes */
-
-#define DOMAIN 1 /* argument domain error */
-#define SING 2 /* argument singularity */
-#define OVERFLOW 3 /* overflow range error */
-#define UNDERFLOW 4 /* underflow range error */
-#define TLOSS 5 /* total loss of precision */
-#define PLOSS 6 /* partial loss of precision */
-
/* */
#define VOLATILE_32 /*volatile*/
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include "libm_support.h"
+#if LIBM_SVID_COMPAT
int
weak_function
__matherrf(struct exceptionf *x)
if(x->arg1!=x->arg1) return 0;
return n;
}
-weak_alias (__matherrf, matherrf)
+compat_symbol (libm, __matherrf, matherrf, GLIBC_2_2_3);
+#endif
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include "libm_support.h"
+#if LIBM_SVID_COMPAT
int
weak_function
__matherrl(struct exceptionl *x)
if(x->arg1!=x->arg1) return 0;
return n;
}
-weak_alias (__matherrl, matherrl)
+compat_symbol (libm, __matherrl, matherrl, GLIBC_2_2_3);
+#endif
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper exp */
double
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper expf */
float
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include <errno.h>
#include <assert.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* Handle errors for a libm function as specified by TYPE (see
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include <fenv.h>
#include <float.h>
#include <errno.h>
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
long double __expl(long double x) /* wrapper exp */
{
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
#include <math_ldbl_opt.h>
long double __expl(long double x) /* wrapper exp */
#include <math.h>
#include <math_private.h>
+#include <math-svid-compat.h>
/* wrapper expl */
long double
* MACRO for standards
*/
-#include <math.h>
-#include <math_private.h>
+#include <math-svid-compat.h>
/*
* define and initialize _LIB_VERSION
*/
-#ifdef _POSIX_MODE
+#undef _LIB_VERSION
+#if LIBM_SVID_COMPAT || !defined SHARED
_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _POSIX_;
-#else
-#ifdef _XOPEN_MODE
-_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _XOPEN_;
-#else
-#ifdef _SVID3_MODE
-_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _SVID_;
-#else /* default _IEEE_MODE */
-_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _IEEE_;
#endif
-#endif
-#endif
-
+#if LIBM_SVID_COMPAT
+compat_symbol (libm, _LIB_VERSION_INTERNAL, _LIB_VERSION, GLIBC_2_0);
+#elif !defined SHARED
+/* For use in .S wrappers. */
weak_alias (_LIB_VERSION_INTERNAL, _LIB_VERSION)
+#endif
static char rcsid[] = "$NetBSD: s_matherr.c,v 1.6 1995/05/10 20:47:53 jtc Exp $";
#endif
-#include <math.h>
-#include <math_private.h>
+#include <math-svid-compat.h>
+#undef matherr
+#if LIBM_SVID_COMPAT
int
weak_function
__matherr(struct exception *x)
if(x->arg1!=x->arg1) return 0;
return n;
}
-weak_alias (__matherr, matherr)
+compat_symbol (libm, __matherr, matherr, GLIBC_2_0);
+#endif
#include <sysdep.h>
#include <math_ldbl_opt.h>
+#include <math-svid-compat.h>
/* double [fp1] sqrt (double x [fp1])
Power4 (ISA V2.0) and above implement sqrt in hardware (not optional).
#include <sysdep.h>
#include <math_ldbl_opt.h>
+#include <math-svid-compat.h>
/* float [fp1] sqrts (float x [fp1])
Power4 (ISA V2.0) and above implement sqrt in hardware (not optional).
#include <sysdep.h>
#include <math_ldbl_opt.h>
+#include <math-svid-compat.h>
/* double [fp1] sqrt (double x [fp1])
Power4 (ISA V2.0) and above implement sqrt in hardware (not optional).
#include <sysdep.h>
#include <math_ldbl_opt.h>
+#include <math-svid-compat.h>
/* float [fp1] sqrts (float x [fp1])
Power4 (ISA V2.0) and above implement sqrt in hardware (not optional).
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrt)
clr %g1
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrtf)
st %g0, [%sp + 68]
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrt_vis3)
movwtos %o0, %f0
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrtf_vis3)
movwtos %o0, %f0
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrt)
std %o0, [%sp + 80]
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrtf)
st %o0, [%sp + 72]
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrt)
fzero %f8
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <math-svid-compat.h>
ENTRY (__sqrtf)
fzeros %f8