diff --git a/math/Versions b/math/Versions index 759b5fac7f..26e15cedea 100644 --- a/math/Versions +++ b/math/Versions @@ -635,4 +635,8 @@ libm { # No SVID compatible error handling. fmod; fmodf; } + GLIBC_2.39 { + # No SVID compatible error handling. + exp10; + } } diff --git a/math/w_exp10_compat.c b/math/w_exp10_compat.c index d8e0f7e773..6b72aef7bd 100644 --- a/math/w_exp10_compat.c +++ b/math/w_exp10_compat.c @@ -25,9 +25,15 @@ #include #include -#if LIBM_SVID_COMPAT +#ifndef NO_COMPAT_NEEDED +# define NO_COMPAT_NEEDED 0 +#endif + +#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_39) \ + || defined NO_LONG_DOUBLE \ + || defined LONG_DOUBLE_COMPAT) double -__exp10 (double x) +__exp10_compat (double x) { double z = __ieee754_exp10 (x); if (__builtin_expect (!isfinite (z) || z == 0, 0) @@ -37,14 +43,30 @@ __exp10 (double x) return z; } -libm_alias_double (__exp10, exp10) +# if NO_COMPAT_NEEDED +# ifdef SHARED +libm_alias_double (__exp10_compat, exp10) +# endif +#else +# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_39) +compat_symbol (libm, __exp10_compat, exp10, GLIBC_2_1); +# endif +# ifdef NO_LONG_DOUBLE +weak_alias (__exp10_compat, exp10l) +# endif +# ifdef LONG_DOUBLE_COMPAT +LONG_DOUBLE_COMPAT_CHOOSE_libm_exp10l ( + compat_symbol (libm, __exp10_compat, exp10l, FIRST_VERSION_libm_exp10l), ); +# endif +# endif + # if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27) -strong_alias (__exp10, __pow10) +strong_alias (__exp10_compat, __pow10) compat_symbol (libm, __pow10, pow10, GLIBC_2_1); # endif # ifdef NO_LONG_DOUBLE # if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27) -strong_alias (__exp10l, __pow10l) +strong_alias (exp10l, __pow10l) compat_symbol (libm, __pow10l, pow10l, GLIBC_2_1); # endif # endif diff --git a/sysdeps/i386/fpu/w_exp10_compat.c b/sysdeps/i386/fpu/w_exp10_compat.c new file mode 100644 index 0000000000..b53455386e --- /dev/null +++ b/sysdeps/i386/fpu/w_exp10_compat.c @@ -0,0 +1,3 @@ +/* i386 provides an optimized __ieee754_exp10. */ +#define NO_COMPAT_NEEDED 1 +#include diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c index 0d4e42833a..225fc74c4c 100644 --- a/sysdeps/ieee754/dbl-64/e_exp10.c +++ b/sysdeps/ieee754/dbl-64/e_exp10.c @@ -18,9 +18,9 @@ #include #include #include -#include -#include +#include #include +#include #include "math_config.h" #define N (1 << EXP_TABLE_BITS) @@ -75,7 +75,7 @@ special_case (uint64_t sbits, double_t tmp, uint64_t ki) /* Double-precision 10^x approximation. Largest observed error is ~0.513 ULP. */ double -__ieee754_exp10 (double x) +__exp10 (double x) { uint64_t ix = asuint64 (x); uint32_t abstop = (ix >> 52) & 0x7ff; @@ -144,4 +144,11 @@ __ieee754_exp10 (double x) return s * y + s; } +strong_alias (__exp10, __ieee754_exp10) libm_alias_finite (__ieee754_exp10, __exp10) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __exp10, exp10, GLIBC_2_39); +libm_alias_double_other (__exp10, exp10) +#else +libm_alias_double (__exp10, exp10) +#endif diff --git a/sysdeps/ieee754/dbl-64/w_exp10.c b/sysdeps/ieee754/dbl-64/w_exp10.c new file mode 100644 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/w_exp10.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c new file mode 100644 index 0000000000..0d3e718626 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c @@ -0,0 +1,3 @@ +/* m68k provides an optimized __ieee754_exp10. */ +#define NO_COMPAT_NEEDED 1 +#include diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index e3924c3499..f0da228fbb 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1148,3 +1148,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index 066dd1a6b3..f5d8023d62 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1205,6 +1205,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist index 4adfed072b..f020a8a904 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -535,6 +535,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10f F diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist index 4adfed072b..f020a8a904 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -535,6 +535,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10f F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index 5c3f47caef..450ac03223 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -846,4 +846,5 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index 4adfed072b..f020a8a904 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -535,6 +535,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10f F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index ea0dbd4b72..1f7f63f60c 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -847,3 +847,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist index ea0dbd4b72..1f7f63f60c 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -847,3 +847,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 7c94a8db70..797071aee8 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -846,4 +846,5 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index 0d08245adf..14758703cf 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1148,3 +1148,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist index a3b776fece..c0ebe119dc 100644 --- a/sysdeps/unix/sysv/linux/nios2/libm.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist @@ -847,3 +847,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index c696215739..4f88e0af9c 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -892,6 +892,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index a5ce9b1997..edc26140dc 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -891,6 +891,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist index 8e41056d0d..0a8a1433d7 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -885,6 +885,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist index 939f29a0f2..5174d20032 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1320,3 +1320,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 4baefb1217..5ff11fb54f 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1149,6 +1149,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index debb767575..0e246c2c54 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1149,6 +1149,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist index fb94386fff..7b43a866e2 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -846,4 +846,5 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist index fb94386fff..7b43a866e2 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -846,4 +846,5 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index 2fdb5ff145..e3dcf3d4e7 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1156,6 +1156,7 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index 02d4c3a754..20fef20c8b 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1148,3 +1148,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index cc8be5b510..c1c5c76e26 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1181,3 +1181,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index fda4df2653..fac219d45a 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1181,3 +1181,4 @@ GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.38 fmod F GLIBC_2.38 fmodf F +GLIBC_2.39 exp10 F