summary refs log tree commit diff
path: root/sysdeps/ieee754
diff options
context:
space:
mode:
authorChris Metcalf <cmetcalf@ezchip.com>2015-12-01 14:59:38 -0500
committerChris Metcalf <cmetcalf@ezchip.com>2015-12-03 13:00:46 -0500
commite59c94fa0e2871bdfcc363899e3be376c0def770 (patch)
tree4073066d0031614fe8947c997354d0d3758f6602 /sysdeps/ieee754
parentb3f6040781f78af648fc90f67cec3e49a338b3e9 (diff)
downloadglibc-e59c94fa0e2871bdfcc363899e3be376c0def770.tar.gz
glibc-e59c94fa0e2871bdfcc363899e3be376c0def770.tar.xz
glibc-e59c94fa0e2871bdfcc363899e3be376c0def770.zip
math: add LDBL_CLASSIFY_COMPAT support
If a platform does not define "long-double-fcts = yes" in its
Makefiles and it does define __NO_LONG_DOUBLE_MATH in its installed
headers, it will currently create exported symbols for __finitel,
__isinfl, and __isnanl that can't be reached from userspace by
correct use of the finite(), isinf(), or isnan() macros in <math.h>.

To avoid this situation, by default for such platforms we now no
longer export these symbols, thus causing appropriate link-time
errors.  However, for platforms that previously exported these
symbols, we continue to do so as compat symbols; this is enabled
by adding LDBL_CLASSIFY_COMPAT to math_private.h for the platform.

For tile, remove the now-unnecessary exports of those functions from
libc and libm.
Diffstat (limited to 'sysdeps/ieee754')
-rw-r--r--sysdeps/ieee754/dbl-64/s_finite.c10
-rw-r--r--sysdeps/ieee754/dbl-64/s_isinf.c5
-rw-r--r--sysdeps/ieee754/dbl-64/s_isnan.c5
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c10
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c5
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c5
6 files changed, 34 insertions, 6 deletions
diff --git a/sysdeps/ieee754/dbl-64/s_finite.c b/sysdeps/ieee754/dbl-64/s_finite.c
index 2b0ed504f9..b71ae12ea4 100644
--- a/sysdeps/ieee754/dbl-64/s_finite.c
+++ b/sysdeps/ieee754/dbl-64/s_finite.c
@@ -21,6 +21,7 @@ static char rcsid[] = "$NetBSD: s_finite.c,v 1.8 1995/05/10 20:47:17 jtc Exp $";
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 #undef __finite
 
@@ -37,6 +38,13 @@ int FINITE(double x)
 hidden_def (__finite)
 weak_alias (__finite, finite)
 #ifdef NO_LONG_DOUBLE
-strong_alias (__finite, __finitel)
+# ifdef LDBL_CLASSIFY_COMPAT
+#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libc, __finite, __finitel, GLIBC_2_0);
+#  endif
+#  if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libm, __finite, __finitel, GLIBC_2_0);
+#  endif
+# endif
 weak_alias (__finite, finitel)
 #endif
diff --git a/sysdeps/ieee754/dbl-64/s_isinf.c b/sysdeps/ieee754/dbl-64/s_isinf.c
index 46a7266e7f..c0ad54538a 100644
--- a/sysdeps/ieee754/dbl-64/s_isinf.c
+++ b/sysdeps/ieee754/dbl-64/s_isinf.c
@@ -15,6 +15,7 @@ static char rcsid[] = "$NetBSD: s_isinf.c,v 1.3 1995/05/11 23:20:14 jtc Exp $";
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 int
 __isinf (double x)
@@ -28,6 +29,8 @@ __isinf (double x)
 hidden_def (__isinf)
 weak_alias (__isinf, isinf)
 #ifdef NO_LONG_DOUBLE
-strong_alias (__isinf, __isinfl)
+# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0);
+# endif
 weak_alias (__isinf, isinfl)
 #endif
diff --git a/sysdeps/ieee754/dbl-64/s_isnan.c b/sysdeps/ieee754/dbl-64/s_isnan.c
index 5d9f31be20..2174d988d8 100644
--- a/sysdeps/ieee754/dbl-64/s_isnan.c
+++ b/sysdeps/ieee754/dbl-64/s_isnan.c
@@ -21,6 +21,7 @@ static char rcsid[] = "$NetBSD: s_isnan.c,v 1.8 1995/05/10 20:47:36 jtc Exp $";
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 #undef __isnan
 int
@@ -36,6 +37,8 @@ __isnan (double x)
 hidden_def (__isnan)
 weak_alias (__isnan, isnan)
 #ifdef NO_LONG_DOUBLE
-strong_alias (__isnan, __isnanl)
+# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0);
+# endif
 weak_alias (__isnan, isnanl)
 #endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c
index a155a5e1ef..c8e2a7c421 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c
@@ -16,6 +16,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 #include <stdint.h>
 
 #undef __finite
@@ -29,6 +30,13 @@ __finite(double x)
 hidden_def (__finite)
 weak_alias (__finite, finite)
 #ifdef NO_LONG_DOUBLE
-strong_alias (__finite, __finitel)
+# ifdef LDBL_CLASSIFY_COMPAT
+#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libc, __finite, __finitel, GLIBC_2_0);
+#  endif
+#  if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libm, __finite, __finitel, GLIBC_2_0);
+#  endif
+# endif
 weak_alias (__finite, finitel)
 #endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c
index 163fc31efc..951fb73239 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c
@@ -11,6 +11,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 int
 __isinf (double x)
@@ -25,6 +26,8 @@ __isinf (double x)
 hidden_def (__isinf)
 weak_alias (__isinf, isinf)
 #ifdef NO_LONG_DOUBLE
-strong_alias (__isinf, __isinfl)
+# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0);
+# endif
 weak_alias (__isinf, isinfl)
 #endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c
index e80b84ca02..bcff9e3b67 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c
@@ -17,6 +17,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 #include <stdint.h>
 
 #undef __isnan
@@ -31,6 +32,8 @@ int __isnan(double x)
 hidden_def (__isnan)
 weak_alias (__isnan, isnan)
 #ifdef NO_LONG_DOUBLE
-strong_alias (__isnan, __isnanl)
+# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
+compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0);
+# endif
 weak_alias (__isnan, isnanl)
 #endif