aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-09-13 15:47:26 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-09-13 15:47:26 +0000
commit0fc56478a969cd02475130526bf9b2a6e416993c (patch)
tree6c1b2db89ef24ffa69fa4dad7cc17804e9374e27
parent3ca622e4d6054c0b99b2df36580462663edc8d12 (diff)
downloadglibc-0fc56478a969cd02475130526bf9b2a6e416993c.tar
glibc-0fc56478a969cd02475130526bf9b2a6e416993c.tar.gz
glibc-0fc56478a969cd02475130526bf9b2a6e416993c.tar.bz2
glibc-0fc56478a969cd02475130526bf9b2a6e416993c.zip
Clear up log1p, ldexp, scalbn, scalbln compat handling.
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.
-rw-r--r--ChangeLog23
-rw-r--r--math/w_scalbln_template.c4
-rw-r--r--sysdeps/ieee754/ldbl-opt/s_ldexp.c8
-rw-r--r--sysdeps/ieee754/ldbl-opt/s_ldexpl.c12
-rw-r--r--sysdeps/ieee754/ldbl-opt/s_log1p.c5
-rw-r--r--sysdeps/ieee754/ldbl-opt/s_scalbln.c9
-rw-r--r--sysdeps/ieee754/ldbl-opt/s_scalbn.c9
-rw-r--r--sysdeps/ieee754/ldbl-opt/w_log1p.c3
-rw-r--r--sysdeps/ieee754/ldbl-opt/w_scalbln.c4
9 files changed, 33 insertions, 44 deletions
diff --git a/ChangeLog b/ChangeLog
index 3b74c0e196..70b575b47e 100644
--- 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.
diff --git a/math/w_scalbln_template.c b/math/w_scalbln_template.c
index 4315082a84..93148d5675 100644
--- a/math/w_scalbln_template.c
+++ b/math/w_scalbln_template.c
@@ -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)
diff --git a/sysdeps/ieee754/ldbl-opt/s_ldexp.c b/sysdeps/ieee754/ldbl-opt/s_ldexp.c
index 5a875aeac1..e0433e96f4 100644
--- a/sysdeps/ieee754/ldbl-opt/s_ldexp.c
+++ b/sysdeps/ieee754/ldbl-opt/s_ldexp.c
@@ -17,14 +17,10 @@
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
diff --git a/sysdeps/ieee754/ldbl-opt/s_ldexpl.c b/sysdeps/ieee754/ldbl-opt/s_ldexpl.c
index 85f34fa2c4..e0741ad529 100644
--- a/sysdeps/ieee754/ldbl-opt/s_ldexpl.c
+++ b/sysdeps/ieee754/ldbl-opt/s_ldexpl.c
@@ -17,15 +17,13 @@
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
index 495fa32e35..0000000000
--- a/sysdeps/ieee754/ldbl-opt/s_log1p.c
+++ /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
index 391142b769..0000000000
--- a/sysdeps/ieee754/ldbl-opt/s_scalbln.c
+++ /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
index 1ad81b199e..0000000000
--- a/sysdeps/ieee754/ldbl-opt/s_scalbn.c
+++ /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
index ad0524708e..0000000000
--- a/sysdeps/ieee754/ldbl-opt/w_log1p.c
+++ /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>
diff --git a/sysdeps/ieee754/ldbl-opt/w_scalbln.c b/sysdeps/ieee754/ldbl-opt/w_scalbln.c
index 495169ff37..17a8a96d33 100644
--- a/sysdeps/ieee754/ldbl-opt/w_scalbln.c
+++ b/sysdeps/ieee754/ldbl-opt/w_scalbln.c
@@ -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