Use generic alias macros in ldbl-opt.

This patch fixes ldbl-opt code to use generic libm alias macros in
preparation for getting _FloatN / _FloatNx aliases where appropriate.

Four functions are affected, that undefine and redefine alias macros
before including the implementations they wrap in such a way that
_FloatN / _FloatNx aliases would not appear.  s_clog10l.c undefines
and redefined declare_mgen_alias, so just needs a
libm_alias_ldouble_other call added.  w_exp10l_compat.c undefines and
redefines weak_alias, but in fact does not need to do so, since
math/w_exp10l_compat.c uses libm_alias_ldouble and does not use
weak_alias other than through that, so the undefines and redefines of
weak_alias are removed.  w_lgamma_compatl.c and w_remainderl_compat.c
are made to use libm_alias_ldouble_other in conjunction with restoring
the original definition of weak_alias so this is effective.

Tested with build-many-glibcs.py.  Installed stripped shared libraries
are unchanged by this patch.

	* sysdeps/ieee754/ldbl-opt/s_clog10l.c: Use
	libm_alias_ldouble_other.
	* sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c (weak_alias): Do not
	undefine and redefine.
	[LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)]
	(exp10l): Do not define here.
	* sysdeps/ieee754/ldbl-opt/w_lgamma_compatl.c [BUILD_LGAMMA]
	(weak_alias): Undefine and redefine.
	[BUILD_LGAMMA]: Use libm_alias_ldouble_other.
	* sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c
	[LIBM_SVID_COMPAT] (weak_alias): Undefine and redefine here.
	[LIBM_SVID_COMPAT]: Use libm_alias_ldouble_other.
This commit is contained in:
Joseph Myers 2017-10-11 02:51:39 +00:00
parent 541f19baf8
commit 0ff64d3a18
5 changed files with 26 additions and 14 deletions

View File

@ -1,5 +1,18 @@
2017-10-11 Joseph Myers <joseph@codesourcery.com>
* sysdeps/ieee754/ldbl-opt/s_clog10l.c: Use
libm_alias_ldouble_other.
* sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c (weak_alias): Do not
undefine and redefine.
[LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)]
(exp10l): Do not define here.
* sysdeps/ieee754/ldbl-opt/w_lgamma_compatl.c [BUILD_LGAMMA]
(weak_alias): Undefine and redefine.
[BUILD_LGAMMA]: Use libm_alias_ldouble_other.
* sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c
[LIBM_SVID_COMPAT] (weak_alias): Undefine and redefine here.
[LIBM_SVID_COMPAT]: Use libm_alias_ldouble_other.
* soft-fp/fmadf4.c: Include <libm-alias-double.h>.
[!__fma] (fma): Define using libm_alias_double.
* soft-fp/fmasf4.c: Include <libm-alias-float.h>.

View File

@ -29,3 +29,4 @@
strong_alias (__clog10l_internal, __clog10l__internal)
long_double_symbol (libm, __clog10l_internal, __clog10l);
long_double_symbol (libm, __clog10l__internal, clog10l);
libm_alias_ldouble_other (__clog10, clog10)

View File

@ -1,18 +1,8 @@
#include <math_ldbl_opt.h>
#undef weak_alias
#define weak_alias(n,a)
#undef compat_symbol
#define compat_symbol(l,n,a,v)
#include <math/w_exp10l_compat.c>
#if LIBM_SVID_COMPAT
# if !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)
/* If ldbl-opt is used without special versioning for exp10l being
required, the generic code does not define exp10l because of the
undefine and redefine of weak_alias above. */
# undef weak_alias
# define weak_alias(name, aliasname) _weak_alias (name, aliasname)
weak_alias (__exp10l, exp10l)
# endif
# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
/* compat_symbol was undefined and redefined above to avoid the
default pow10l compat symbol at version GLIBC_2_1 (as for ldbl-opt

View File

@ -9,3 +9,8 @@
#if GAMMA_ALIAS
long_double_symbol (libm, __gammal, gammal);
#endif
#if BUILD_LGAMMA
# undef weak_alias
# define weak_alias(name, aliasname) _weak_alias (name, aliasname)
libm_alias_ldouble_other (__lgamma, lgamma)
#endif

View File

@ -3,14 +3,17 @@
#define weak_alias(n,a)
#include <math/w_remainderl_compat.c>
#if LIBM_SVID_COMPAT
# if !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)
/* If ldbl-opt is used without special versioning for remainderl being
required, the generic code does not define remainderl because of
the undefine and redefine of weak_alias above. */
# undef weak_alias
# define weak_alias(name, aliasname) _weak_alias (name, aliasname)
the undefine and redefine of weak_alias above. In any case, that
undefine and redefine mean _FloatN / _FloatNx aliases have not been
defined. */
# undef weak_alias
# define weak_alias(name, aliasname) _weak_alias (name, aliasname)
# if !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)
weak_alias (__remainderl, remainderl)
# endif
strong_alias (__remainderl, __dreml)
long_double_symbol (libm, __dreml, dreml);
libm_alias_ldouble_other (__remainder, remainder)
#endif