From: Joseph Myers Date: Wed, 4 Oct 2017 16:46:05 +0000 (+0000) Subject: Restore sparc32 copysignl, fabsl, fmal compat symbols (bug 22229). X-Git-Tag: glibc-2.27~744 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=32d372d548122b224ec63a520a780d9227094a48;p=thirdparty%2Fglibc.git Restore sparc32 copysignl, fabsl, fmal compat symbols (bug 22229). 32-bit SPARC libm should have compat symbols for copysignl (GLIBC_2.0), fabsl (GLIBC_2.0), fmal (GLIBC_2.1), pointing to the double functions; they were present in glibc 2.8, for example, but are now missing, probably when optimized SPARC function implementations were added without appropriate compat symbol handling. The same applies to copysignl in libc. This patch restores those compat symbols. Tested with build-many-glibcs.py for sparcv9-linux-gnu. [BZ #22229] * sysdeps/sparc/sparc32/fpu/s_copysign.S: Include (copysignl): Define as compat symbol at version GLIBC_2_0 for libm and libc. * sysdeps/sparc/sparc32/fpu/s_fabs.S: Include . (fabsl): Define as compat symbol at version GLIBC_2_0 for libm. * sysdeps/sparc/sparc32/fpu/s_fma.c: Include . (fmal): Define as compat symbol at version GLIBC_2_1 for libm. * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S: Include (copysignl): Define as compat symbol at version GLIBC_2_0 for libm and libc. (compat_symbol): Undefine and redefine. * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S: Include (fabsl): Define as compat symbol at version GLIBC_2_0 for libm. (compat_symbol): Undefine and redefine. * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c [HAVE_AS_VIS3_SUPPORT]: Include . [HAVE_AS_VIS3_SUPPORT] (fmal): Define as compat symbol at version GLIBC_2_1 for libm. * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Add GLIBC_2.0 copysignl symbol. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Add GLIBC_2.0 copysignl and fabsl and GLIBC_2.1 fmal symbols. --- diff --git a/ChangeLog b/ChangeLog index d326995de13..9a4a0160c45 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,32 @@ 2017-10-04 Joseph Myers + [BZ #22229] + * sysdeps/sparc/sparc32/fpu/s_copysign.S: Include + + (copysignl): Define as compat symbol at version GLIBC_2_0 for libm + and libc. + * sysdeps/sparc/sparc32/fpu/s_fabs.S: Include . + (fabsl): Define as compat symbol at version GLIBC_2_0 for libm. + * sysdeps/sparc/sparc32/fpu/s_fma.c: Include . + (fmal): Define as compat symbol at version GLIBC_2_1 for libm. + * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S: + Include + (copysignl): Define as compat symbol at version GLIBC_2_0 for libm + and libc. + (compat_symbol): Undefine and redefine. + * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S: Include + + (fabsl): Define as compat symbol at version GLIBC_2_0 for libm. + (compat_symbol): Undefine and redefine. + * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c + [HAVE_AS_VIS3_SUPPORT]: Include . + [HAVE_AS_VIS3_SUPPORT] (fmal): Define as compat symbol at version + GLIBC_2_1 for libm. + * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Add + GLIBC_2.0 copysignl symbol. + * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Add + GLIBC_2.0 copysignl and fabsl and GLIBC_2.1 fmal symbols. + * sysdeps/alpha/fpu/s_nearbyint.c: Remove file. 2017-10-04 Florian Weimer diff --git a/sysdeps/sparc/sparc32/fpu/s_copysign.S b/sysdeps/sparc/sparc32/fpu/s_copysign.S index bddbfb2386a..348cabcbb7a 100644 --- a/sysdeps/sparc/sparc32/fpu/s_copysign.S +++ b/sysdeps/sparc/sparc32/fpu/s_copysign.S @@ -18,6 +18,7 @@ . */ #include +#include ENTRY (__copysign) sethi %hi(0x80000000), %g1 @@ -28,4 +29,10 @@ ENTRY (__copysign) retl ldd [%sp + 72], %f0 END (__copysign) -weak_alias (__copysign, copysign) \ No newline at end of file +weak_alias (__copysign, copysign) +#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) +compat_symbol (libm, __copysign, copysignl, GLIBC_2_0); +#endif +#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) +compat_symbol (libc, __copysign, copysignl, GLIBC_2_0); +#endif diff --git a/sysdeps/sparc/sparc32/fpu/s_fabs.S b/sysdeps/sparc/sparc32/fpu/s_fabs.S index fdeda688980..774949af23a 100644 --- a/sysdeps/sparc/sparc32/fpu/s_fabs.S +++ b/sysdeps/sparc/sparc32/fpu/s_fabs.S @@ -17,6 +17,7 @@ . */ #include +#include ENTRY (__fabs) st %o0, [%sp+72] @@ -26,3 +27,6 @@ ENTRY (__fabs) fabss %f0, %f0 END (__fabs) weak_alias (__fabs, fabs) +#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) +compat_symbol (libm, __fabs, fabsl, GLIBC_2_0); +#endif diff --git a/sysdeps/sparc/sparc32/fpu/s_fma.c b/sysdeps/sparc/sparc32/fpu/s_fma.c index 8f626058704..bfdcb23b3a6 100644 --- a/sysdeps/sparc/sparc32/fpu/s_fma.c +++ b/sysdeps/sparc/sparc32/fpu/s_fma.c @@ -1,2 +1,6 @@ /* Always use dbl-64 version because long double is emulated in software. */ +#include #include +#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_1) +compat_symbol (libm, __fma, fmal, GLIBC_2_1); +#endif diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S index cdd98c00f4b..5d26430f706 100644 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S @@ -1,11 +1,20 @@ #include +#include SPARC_ASM_VIS3_IFUNC(copysign) weak_alias (__copysign, copysign) +#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) +compat_symbol (libm, __copysign, copysignl, GLIBC_2_0); +#endif +#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) +compat_symbol (libc, __copysign, copysignl, GLIBC_2_0); +#endif # undef weak_alias # define weak_alias(a, b) +# undef compat_symbol +# define compat_symbol(a, b, c, d) #define __copysign __copysign_generic diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S index 86c63989a47..72cc08fd664 100644 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S @@ -1,11 +1,17 @@ #include +#include SPARC_ASM_VIS3_IFUNC(fabs) weak_alias (__fabs, fabs) +#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) +compat_symbol (libm, __fabs, fabsl, GLIBC_2_0); +#endif # undef weak_alias # define weak_alias(a, b) +# undef compat_symbol +# define compat_symbol(a, b, c, d) #define __fabs __fabs_generic diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c index 3f2f1622c8a..05113c33d34 100644 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c @@ -1,12 +1,16 @@ #ifdef HAVE_AS_VIS3_SUPPORT # include # include +# include extern double __fma_vis3 (double, double, double); extern double __fma_generic (double, double, double); sparc_libm_ifunc(__fma, hwcap & HWCAP_SPARC_FMAF ? __fma_vis3 : __fma_generic); weak_alias (__fma, fma) +#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_1) +compat_symbol (libm, __fma, fmal, GLIBC_2_1); +#endif # define __fma __fma_generic #endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index 7f7449f52b5..a62463be3d0 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -367,6 +367,7 @@ GLIBC_2.0 confstr F GLIBC_2.0 connect F GLIBC_2.0 copysign F GLIBC_2.0 copysignf F +GLIBC_2.0 copysignl F GLIBC_2.0 creat F GLIBC_2.0 create_module F GLIBC_2.0 ctermid F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index f8f10e59521..92de6edab9f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -29,6 +29,7 @@ GLIBC_2.0 ceilf F GLIBC_2.0 ceill F GLIBC_2.0 copysign F GLIBC_2.0 copysignf F +GLIBC_2.0 copysignl F GLIBC_2.0 cos F GLIBC_2.0 cosf F GLIBC_2.0 cosh F @@ -52,6 +53,7 @@ GLIBC_2.0 expm1f F GLIBC_2.0 expm1l F GLIBC_2.0 fabs F GLIBC_2.0 fabsf F +GLIBC_2.0 fabsl F GLIBC_2.0 finite F GLIBC_2.0 finitef F GLIBC_2.0 finitel F @@ -254,6 +256,7 @@ GLIBC_2.1 fetestexcept F GLIBC_2.1 feupdateenv F GLIBC_2.1 fma F GLIBC_2.1 fmaf F +GLIBC_2.1 fmal F GLIBC_2.1 fmax F GLIBC_2.1 fmaxf F GLIBC_2.1 fmaxl F