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.
This commit is contained in:
Joseph Myers 2017-09-13 15:47:26 +00:00
parent 3ca622e4d6
commit 0fc56478a9
9 changed files with 33 additions and 44 deletions

View File

@ -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.

View 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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View 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