]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Clear up log1p, ldexp, scalbn, scalbln compat handling.
authorJoseph Myers <joseph@codesourcery.com>
Wed, 13 Sep 2017 15:47:26 +0000 (15:47 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 13 Sep 2017 15:47:26 +0000 (15:47 +0000)
This patch cleans up how compat symbols / long double versioning are
handled for log1p, ldexp, scalbn and scalbln functions.

The general principle is to do as much as possible through the
type-generic templates.  Previously, when errno-setting wrappers were
added the compat long double symbols were left pointing directly to
the underlying implementations; they are moved to point to the
errno-setting wrappers.  For the functions also present in libc,
compat symbol handling for the libc copies needs to go in ldbl-opt
wrappers, but the type-generic templates can handle it for the libm
copies.  There is no need for w_scalbln_template.c to disable the
creation of an unused internal alias (such code made sense in the
context of patches trying to avoid any changes to generated code for
ease of comparison, but can be removed in a change that specifically
does intend to change details of where symbols point).

Tested for x86_64, and with build-many-glibcs.py.

* math/w_scalbln_template.c (strong_alias): Do not undefine and
redefine.
* sysdeps/ieee754/ldbl-opt/s_ldexp.c (declare_mgen_alias): Remove
macro.
(ldexpl): Only define as compat symbol for libc, not libm.
(scalbnl): Define as compat symbol for libc here.
* sysdeps/ieee754/ldbl-opt/s_ldexpl.c (declare_mgen_alias): Only
define for [IS_IN (libc)].
(__ldexpl_2): Remove alias.
(ldexpl): Only define with long_double_symbol if [IS_IN (libc)].
(scalbnl): Likewise.  Use __wrap_scalbnl not __ldexpl_2 as base
name in long_double_symbol call.
* sysdeps/ieee754/ldbl-opt/s_log1p.c: Remove file.
* sysdeps/ieee754/ldbl-opt/s_scalbln.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_scalbn.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log1p.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_scalbln.c (declare_mgen_alias):
Remove macro.
[IS_IN (libc) && LONG_DOUBLE_COMPAT (libc, GLIBC_2_1)] (scalblnl):
Define as compat symbol.

ChangeLog
math/w_scalbln_template.c
sysdeps/ieee754/ldbl-opt/s_ldexp.c
sysdeps/ieee754/ldbl-opt/s_ldexpl.c
sysdeps/ieee754/ldbl-opt/s_log1p.c [deleted file]
sysdeps/ieee754/ldbl-opt/s_scalbln.c [deleted file]
sysdeps/ieee754/ldbl-opt/s_scalbn.c [deleted file]
sysdeps/ieee754/ldbl-opt/w_log1p.c [deleted file]
sysdeps/ieee754/ldbl-opt/w_scalbln.c

index 3b74c0e1966b0d99519924484251df84d9c72686..70b575b47e849bd93592710e5d634f1ec4a8ead3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2017-09-13  Joseph Myers  <joseph@codesourcery.com>
+
+       * math/w_scalbln_template.c (strong_alias): Do not undefine and
+       redefine.
+       * sysdeps/ieee754/ldbl-opt/s_ldexp.c (declare_mgen_alias): Remove
+       macro.
+       (ldexpl): Only define as compat symbol for libc, not libm.
+       (scalbnl): Define as compat symbol for libc here.
+       * sysdeps/ieee754/ldbl-opt/s_ldexpl.c (declare_mgen_alias): Only
+       define for [IS_IN (libc)].
+       (__ldexpl_2): Remove alias.
+       (ldexpl): Only define with long_double_symbol if [IS_IN (libc)].
+       (scalbnl): Likewise.  Use __wrap_scalbnl not __ldexpl_2 as base
+       name in long_double_symbol call.
+       * sysdeps/ieee754/ldbl-opt/s_log1p.c: Remove file.
+       * sysdeps/ieee754/ldbl-opt/s_scalbln.c: Likewise.
+       * sysdeps/ieee754/ldbl-opt/s_scalbn.c: Likewise.
+       * sysdeps/ieee754/ldbl-opt/w_log1p.c: Likewise.
+       * sysdeps/ieee754/ldbl-opt/w_scalbln.c (declare_mgen_alias):
+       Remove macro.
+       [IS_IN (libc) && LONG_DOUBLE_COMPAT (libc, GLIBC_2_1)] (scalblnl):
+       Define as compat symbol.
+
 2017-09-13  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
        * sysdeps/unix/sysv/linux/s390/s390-32/oldglob.c: New file.
index 4315082a84963315aeddf3b135c20e4d15c4b922..93148d567520ff07423e320ddf54393eae13edef 100644 (file)
@@ -34,8 +34,4 @@ M_DECL_FUNC (__w_scalbln) (FLOAT x, long int n)
   return x;
 }
 
-/* Define strong_alias to nothing because we don't want
-   declare_mgen_alias to create a strong alias for scalblnl.  */
-#undef strong_alias
-#define strong_alias(name, alias_name)
 declare_mgen_alias (__w_scalbln, scalbln)
index 5a875aeac1e1f4b50e5759e6aae2ee0732077366..e0433e96f48b2849c2b0cdeef5e319a2680c6f43 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define declare_mgen_alias(from, to) weak_alias (from, to)
 #include <math-type-macros-double.h>
 #include <s_ldexp_template.c>
 
-#if IS_IN (libm)
-# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
-compat_symbol (libm, __ldexp, ldexpl, GLIBC_2_0);
-# endif
-#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+#if IS_IN (libc) && LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)
 compat_symbol (libc, __ldexp, ldexpl, GLIBC_2_0);
+compat_symbol (libc, __wrap_scalbn, scalbnl, GLIBC_2_0);
 #endif
index 85f34fa2c4dfd2ce7a438a0931172c6b8fd34e8a..e0741ad529d0c7c28cde00c408f9446cf1ae9abd 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define declare_mgen_alias(f,t)
+#if IS_IN (libc)
+# define declare_mgen_alias(f,t)
+#endif
 #include <math-type-macros-ldouble.h>
 #include <s_ldexp_template.c>
 
-strong_alias (__ldexpl, __ldexpl_2)
-#if IS_IN (libm)
-long_double_symbol (libm, __ldexpl, ldexpl);
-long_double_symbol (libm, __ldexpl_2, scalbnl);
-#else
+#if IS_IN (libc)
 long_double_symbol (libc, __ldexpl, ldexpl);
-long_double_symbol (libc, __ldexpl_2, scalbnl);
+long_double_symbol (libc, __wrap_scalbnl, scalbnl);
 #endif
diff --git a/sysdeps/ieee754/ldbl-opt/s_log1p.c b/sysdeps/ieee754/ldbl-opt/s_log1p.c
deleted file mode 100644 (file)
index 495fa32..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <math_ldbl_opt.h>
-#include <sysdeps/ieee754/dbl-64/s_log1p.c>
-#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
-compat_symbol (libm, __log1p, log1pl, GLIBC_2_0);
-#endif
diff --git a/sysdeps/ieee754/ldbl-opt/s_scalbln.c b/sysdeps/ieee754/ldbl-opt/s_scalbln.c
deleted file mode 100644 (file)
index 391142b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <math_ldbl_opt.h>
-#include <sysdeps/ieee754/dbl-64/s_scalbln.c>
-#if IS_IN (libm)
-#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
-compat_symbol (libm, __scalbln, scalblnl, GLIBC_2_1);
-#endif
-#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
-compat_symbol (libc, __scalbln, scalblnl, GLIBC_2_1);
-#endif
diff --git a/sysdeps/ieee754/ldbl-opt/s_scalbn.c b/sysdeps/ieee754/ldbl-opt/s_scalbn.c
deleted file mode 100644 (file)
index 1ad81b1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <math_ldbl_opt.h>
-#include <sysdeps/ieee754/dbl-64/s_scalbn.c>
-#if IS_IN (libm)
-# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
-compat_symbol (libm, __scalbn, scalbnl, GLIBC_2_0);
-# endif
-#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
-compat_symbol (libc, __scalbn, scalbnl, GLIBC_2_0);
-#endif
diff --git a/sysdeps/ieee754/ldbl-opt/w_log1p.c b/sysdeps/ieee754/ldbl-opt/w_log1p.c
deleted file mode 100644 (file)
index ad05247..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define declare_mgen_alias(from, to) weak_alias (from, to)
-#include <math-type-macros-double.h>
-#include <w_log1p_template.c>
index 495169ff376fce31d0fcb0f51670801589a31834..17a8a96d339efc0f1f10160cc4a67e8cd6a0ef56 100644 (file)
@@ -1,3 +1,5 @@
-#define declare_mgen_alias(from, to) weak_alias (from, to)
 #include <math-type-macros-double.h>
 #include <w_scalbln_template.c>
+#if IS_IN (libc) && LONG_DOUBLE_COMPAT (libc, GLIBC_2_1)
+compat_symbol (libc, __w_scalbln, scalblnl, GLIBC_2_1);
+#endif