diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-09-18 23:26:35 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-09-18 23:26:35 +0000 |
commit | 6d9b0b5a22738e100b57bdd593d799abac4949d7 (patch) | |
tree | d001dd94e8d380a54314e032d16cff3f029eedf1 | |
parent | 92892fdbfa5e4d9f3cc25601767da064d0a8818a (diff) | |
download | glibc-6d9b0b5a22738e100b57bdd593d799abac4949d7.tar.gz glibc-6d9b0b5a22738e100b57bdd593d799abac4949d7.tar.xz glibc-6d9b0b5a22738e100b57bdd593d799abac4949d7.zip |
Fix powerpc64le problem from last ldbl-opt patch.
This patch fixes a problem on powerpc64le that I missed in initial testing of my last patch to ldbl-opt. In the specific case of powerpc64le, the weak aliases for exp10l and remainderl do not get defined in the generic wrappers because of how those wrappers undefine and redefine weak_alias. This patch restores those aliases in the ldbl-opt code. Tested (compilation only) for powerpc64le with build-many-glibcs.py. * sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)] (weak_alias): Undefine and redefine. [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)] (exp10l): Define as weak alias. * sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)] (weak_alias): Undefine and redefine. [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)] (remainderl): Define as weak alias.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c | 8 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c | 8 |
3 files changed, 27 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index a7bcaa689b..757462f14e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2017-09-18 Joseph Myers <joseph@codesourcery.com> + * sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c [LIBM_SVID_COMPAT && + !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)] (weak_alias): Undefine and + redefine. + [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)] + (exp10l): Define as weak alias. + * sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c [LIBM_SVID_COMPAT + && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)] (weak_alias): Undefine + and redefine. + [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)] + (remainderl): Define as weak alias. + * math/s_fmal.c: Include <libm-alias-ldouble.h>. (fmal): Define using libm_alias_ldouble. * math/w_acoshl_compat.c: Include <libm-alias-ldouble.h>. diff --git a/sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c b/sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c index 1c0e8754dd..dd5915e66e 100644 --- a/sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c +++ b/sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c @@ -5,6 +5,14 @@ #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 diff --git a/sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c b/sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c index 9314117eda..bb9bac0db7 100644 --- a/sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c +++ b/sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c @@ -3,6 +3,14 @@ #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) +weak_alias (__remainderl, remainderl) +# endif strong_alias (__remainderl, __dreml) long_double_symbol (libm, __dreml, dreml); #endif |