[4/5] New exp10f version without SVID compat wrapper
Commit Message
This patch changes the exp10f error handling semantics to only set
errno according to POSIX rules. New symbol version is introduced at
GLIBC_2.32. The old wrappers are kept for compat symbols.
There are some outliers that need special handling:
- ia64 provides an optimized implementation of exp10f that uses ia64
specific routines to set SVID compatibility. The new symbol version
is aliased to the exp10f one.
- m68k also provides an optimized implementation, and the new version
uses it instead of the sysdeps/ieee754/flt32 one.
- riscv and csky uses the generic template implementation that
does not provide SVID support. For both cases a new exp10f
version is not added, but rather the symbols version of the
generic sysdeps/ieee754/flt32 is adjusted instead.
Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
powerpc64le-linux-gnu.
---
math/Versions | 3 +++
math/w_exp10f.c | 1 +
math/w_exp10f_compat.c | 8 ++++----
sysdeps/ia64/fpu/e_exp10f.S | 12 +++++++++---
sysdeps/ieee754/flt-32/e_exp10f.c | 16 +++++++++++++++-
sysdeps/m68k/m680x0/fpu/e_exp10f.c | 5 +++++
sysdeps/mach/hurd/i386/libm.abilist | 1 +
sysdeps/unix/sysv/linux/aarch64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/alpha/libm.abilist | 1 +
sysdeps/unix/sysv/linux/arm/be/libm.abilist | 1 +
sysdeps/unix/sysv/linux/arm/le/libm.abilist | 1 +
sysdeps/unix/sysv/linux/hppa/libm.abilist | 1 +
sysdeps/unix/sysv/linux/i386/libm.abilist | 1 +
sysdeps/unix/sysv/linux/ia64/libm.abilist | 1 +
.../unix/sysv/linux/m68k/coldfire/libm.abilist | 1 +
sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist | 1 +
.../unix/sysv/linux/microblaze/be/libm.abilist | 1 +
.../unix/sysv/linux/microblaze/le/libm.abilist | 1 +
sysdeps/unix/sysv/linux/mips/mips32/libm.abilist | 1 +
sysdeps/unix/sysv/linux/mips/mips64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/nios2/libm.abilist | 1 +
.../linux/powerpc/powerpc32/fpu/libm.abilist | 1 +
.../sysv/linux/powerpc/powerpc64/be/libm.abilist | 1 +
.../sysv/linux/powerpc/powerpc64/le/libm.abilist | 1 +
.../unix/sysv/linux/s390/s390-32/libm.abilist | 1 +
.../unix/sysv/linux/s390/s390-64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/sh/be/libm.abilist | 1 +
sysdeps/unix/sysv/linux/sh/le/libm.abilist | 1 +
.../unix/sysv/linux/sparc/sparc32/libm.abilist | 1 +
.../unix/sysv/linux/sparc/sparc64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/x86_64/64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist | 1 +
32 files changed, 63 insertions(+), 8 deletions(-)
create mode 100644 math/w_exp10f.c
Comments
Ping (x2).
On 29/04/2020 14:11, Adhemerval Zanella wrote:
> Ping.
>
> On 09/04/2020 16:59, Adhemerval Zanella wrote:
>> This patch changes the exp10f error handling semantics to only set
>> errno according to POSIX rules. New symbol version is introduced at
>> GLIBC_2.32. The old wrappers are kept for compat symbols.
>>
>> There are some outliers that need special handling:
>>
>> - ia64 provides an optimized implementation of exp10f that uses ia64
>> specific routines to set SVID compatibility. The new symbol version
>> is aliased to the exp10f one.
>>
>> - m68k also provides an optimized implementation, and the new version
>> uses it instead of the sysdeps/ieee754/flt32 one.
>>
>> - riscv and csky uses the generic template implementation that
>> does not provide SVID support. For both cases a new exp10f
>> version is not added, but rather the symbols version of the
>> generic sysdeps/ieee754/flt32 is adjusted instead.
>>
>> Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
>> powerpc64le-linux-gnu.
>> ---
>> math/Versions | 3 +++
>> math/w_exp10f.c | 1 +
>> math/w_exp10f_compat.c | 8 ++++----
>> sysdeps/ia64/fpu/e_exp10f.S | 12 +++++++++---
>> sysdeps/ieee754/flt-32/e_exp10f.c | 16 +++++++++++++++-
>> sysdeps/m68k/m680x0/fpu/e_exp10f.c | 5 +++++
>> sysdeps/mach/hurd/i386/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/aarch64/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/alpha/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/arm/be/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/arm/le/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/hppa/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/i386/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/ia64/libm.abilist | 1 +
>> .../unix/sysv/linux/m68k/coldfire/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist | 1 +
>> .../unix/sysv/linux/microblaze/be/libm.abilist | 1 +
>> .../unix/sysv/linux/microblaze/le/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/mips/mips32/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/mips/mips64/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/nios2/libm.abilist | 1 +
>> .../linux/powerpc/powerpc32/fpu/libm.abilist | 1 +
>> .../sysv/linux/powerpc/powerpc64/be/libm.abilist | 1 +
>> .../sysv/linux/powerpc/powerpc64/le/libm.abilist | 1 +
>> .../unix/sysv/linux/s390/s390-32/libm.abilist | 1 +
>> .../unix/sysv/linux/s390/s390-64/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/sh/be/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/sh/le/libm.abilist | 1 +
>> .../unix/sysv/linux/sparc/sparc32/libm.abilist | 1 +
>> .../unix/sysv/linux/sparc/sparc64/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/x86_64/64/libm.abilist | 1 +
>> sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist | 1 +
>> 32 files changed, 63 insertions(+), 8 deletions(-)
>> create mode 100644 math/w_exp10f.c
>>
>> diff --git a/math/Versions b/math/Versions
>> index d892c5f911..5b3c321490 100644
>> --- a/math/Versions
>> +++ b/math/Versions
>> @@ -590,4 +590,7 @@ libm {
>> totalorderf128;
>> totalordermagf128;
>> }
>> + GLIBC_2.32 {
>> + exp10f;
>> + }
>> }
>> diff --git a/math/w_exp10f.c b/math/w_exp10f.c
>> new file mode 100644
>> index 0000000000..6e25b021ab
>> --- /dev/null
>> +++ b/math/w_exp10f.c
>> @@ -0,0 +1 @@
>> +/* Empty. */
>> diff --git a/math/w_exp10f_compat.c b/math/w_exp10f_compat.c
>> index 2ab0940601..ea8f947193 100644
>> --- a/math/w_exp10f_compat.c
>> +++ b/math/w_exp10f_compat.c
>> @@ -28,9 +28,9 @@
>>
>> #if LIBM_SVID_COMPAT
>> float
>> -__exp10f (float x)
>> +__exp10f_compat (float x)
>> {
>> - float z = __ieee754_exp10f (x);
>> + float z = __exp10f (x);
>> if (__builtin_expect (!isfinite (z) || z == 0, 0)
>> && isfinite (x) && _LIB_VERSION != _IEEE_)
>> /* exp10f overflow (146) if x > 0, underflow (147) if x < 0. */
>> @@ -38,9 +38,9 @@ __exp10f (float x)
>>
>> return z;
>> }
>> -libm_alias_float (__exp10, exp10)
>> +compat_symbol (libm, __exp10f_compat, exp10f, GLIBC_2_1);
>> # if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
>> -strong_alias (__exp10f, __pow10f)
>> +strong_alias (__exp10f_compat, __pow10f)
>> compat_symbol (libm, __pow10f, pow10f, GLIBC_2_1);
>> # endif
>> #endif
>> diff --git a/sysdeps/ia64/fpu/e_exp10f.S b/sysdeps/ia64/fpu/e_exp10f.S
>> index 67218c737f..e82394b725 100644
>> --- a/sysdeps/ia64/fpu/e_exp10f.S
>> +++ b/sysdeps/ia64/fpu/e_exp10f.S
>> @@ -218,7 +218,7 @@ LOCAL_OBJECT_END(T_table)
>>
>>
>> .section .text
>> -GLOBAL_IEEE754_ENTRY(exp10f)
>> +GLOBAL_IEEE754_ENTRY(__exp10f)
>>
>>
>> {.mfi
>> @@ -487,11 +487,17 @@ OUT_RANGE_exp10:
>> }
>> ;;
>>
>> -GLOBAL_IEEE754_END(exp10f)
>> +GLOBAL_IEEE754_END(__exp10f)
>> libm_alias_float_other (__exp10, exp10)
>> #if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
>> -compat_symbol (libm, exp10f, pow10f, GLIBC_2_2)
>> +strong_alias (__exp10f, __pow10f_compat)
>> +compat_symbol (libm, __pow10f_compat, pow10f, GLIBC_2_2)
>> #endif
>> +#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_32)
>> +strong_alias (__exp10f, __exp10f_compat)
>> +compat_symbol (libm, __exp10f_compat, exp10f, GLIBC_2_1)
>> +#endif
>> +versioned_symbol (libm, __exp10f, exp10f, GLIBC_2_32)
>>
>>
>> LOCAL_LIBM_ENTRY(__libm_error_region)
>> diff --git a/sysdeps/ieee754/flt-32/e_exp10f.c b/sysdeps/ieee754/flt-32/e_exp10f.c
>> index 034a9e364a..f51c499b83 100644
>> --- a/sysdeps/ieee754/flt-32/e_exp10f.c
>> +++ b/sysdeps/ieee754/flt-32/e_exp10f.c
>> @@ -21,6 +21,8 @@
>> #include <stdint.h>
>> #include <libm-alias-finite.h>
>> #include <libm-alias-float.h>
>> +#include <shlib-compat.h>
>> +#include <math-svid-compat.h>
>> #include "math_config.h"
>>
>> /*
>> @@ -139,7 +141,7 @@ top13 (float x)
>> }
>>
>> float
>> -__ieee754_exp10f (float x)
>> +__exp10f (float x)
>> {
>> uint32_t abstop;
>> uint64_t ki, t;
>> @@ -195,4 +197,16 @@ __ieee754_exp10f (float x)
>> y = y * s;
>> return (float) y;
>> }
>> +#ifndef __exp10f
>> +strong_alias (__exp10f, __ieee754_exp10f)
>> libm_alias_finite (__ieee754_exp10f, __exp10f)
>> +/* For architectures that already provided exp10f without SVID support, there
>> + is no need to add a new version. */
>> +#if !LIBM_SVID_COMPAT
>> +# define EXP10F_VERSION GLIBC_2_26
>> +#else
>> +# define EXP10F_VERSION GLIBC_2_32
>> +#endif
>> +versioned_symbol (libm, __exp10f, exp10f, EXP10F_VERSION);
>> +libm_alias_float_other (__exp10, exp10)
>> +#endif
>> diff --git a/sysdeps/m68k/m680x0/fpu/e_exp10f.c b/sysdeps/m68k/m680x0/fpu/e_exp10f.c
>> index f58fddd8a6..0d03f00e06 100644
>> --- a/sysdeps/m68k/m680x0/fpu/e_exp10f.c
>> +++ b/sysdeps/m68k/m680x0/fpu/e_exp10f.c
>> @@ -1,3 +1,8 @@
>> +#include <libm-alias-float.h>
>> #define FUNC __ieee754_exp10f
>> #define FUNC_FINITE __exp10f
>> #include <e_acosf.c>
>> +strong_alias (__ieee754_exp10f, __exp10f)
>> +libm_alias_finite (__ieee754_exp10f, __exp10f)
>> +versioned_symbol (libm, __exp10f, exp10f, GLIBC_2_32);
>> +libm_alias_float_other (__ieee754_exp10, exp10)
>> diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
>> index 1a41ae589f..a19a69ce6a 100644
>> --- a/sysdeps/mach/hurd/i386/libm.abilist
>> +++ b/sysdeps/mach/hurd/i386/libm.abilist
>> @@ -1089,3 +1089,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
>> index 62e1fee467..5362c24e4c 100644
>> --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
>> @@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
>> index 08ac3905a0..650d10ec8e 100644
>> --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
>> @@ -1110,6 +1110,7 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 dd5931f288..6914b58d76 100644
>> --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
>> @@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 dd5931f288..6914b58d76 100644
>> --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
>> @@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 e7686d71cf..6ac2295b05 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
>> @@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> GLIBC_2.4 exp2l F
>> diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
>> index e67f9d7d27..0ab740dd97 100644
>> --- a/sysdeps/unix/sysv/linux/i386/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
>> @@ -1096,3 +1096,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
>> index 0cf637f248..c8e8fd7142 100644
>> --- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
>> @@ -1026,3 +1026,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
>> index dd5931f288..6914b58d76 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
>> @@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
>> index f0b17ae485..c60fdc6298 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
>> @@ -821,3 +821,4 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
>> index 8dedc9a8a6..adea0fe4c0 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
>> @@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
>> index 8dedc9a8a6..adea0fe4c0 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
>> @@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
>> index a221d7be09..272969a26f 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
>> @@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 823f87277e..dd0dc6689c 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
>> @@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
>> index 64ac932c6a..4941deefa6 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
>> @@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
>> index 3fab31ff9c..fc2d142bd5 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
>> @@ -827,6 +827,7 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 1369ab510c..972c9bc597 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
>> @@ -820,6 +820,7 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 d479a64fca..1ce52ea277 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
>> @@ -1097,3 +1097,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
>> index cd6be8e584..321810d5a4 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
>> @@ -1054,6 +1054,7 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 5291424feb..451a860a83 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
>> @@ -1054,6 +1054,7 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 de0f1c57c3..a5fb514eae 100644
>> --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
>> @@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 de0f1c57c3..a5fb514eae 100644
>> --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
>> @@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
>> GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 fc52ebf64e..d81e8a726b 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
>> @@ -1061,6 +1061,7 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f 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 5288a28533..3d12376d33 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
>> @@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
>> index d620e465d2..89c4ac484d 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
>> @@ -1087,3 +1087,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
>> index 44b0eddc50..d3c9cec71a 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
>> @@ -1087,3 +1087,4 @@ GLIBC_2.31 totalordermagf32x F
>> GLIBC_2.31 totalordermagf64 F
>> GLIBC_2.31 totalordermagf64x F
>> GLIBC_2.31 totalordermagl F
>> +GLIBC_2.32 exp10f F
>>
@@ -590,4 +590,7 @@ libm {
totalorderf128;
totalordermagf128;
}
+ GLIBC_2.32 {
+ exp10f;
+ }
}
new file mode 100644
@@ -0,0 +1 @@
+/* Empty. */
@@ -28,9 +28,9 @@
#if LIBM_SVID_COMPAT
float
-__exp10f (float x)
+__exp10f_compat (float x)
{
- float z = __ieee754_exp10f (x);
+ float z = __exp10f (x);
if (__builtin_expect (!isfinite (z) || z == 0, 0)
&& isfinite (x) && _LIB_VERSION != _IEEE_)
/* exp10f overflow (146) if x > 0, underflow (147) if x < 0. */
@@ -38,9 +38,9 @@ __exp10f (float x)
return z;
}
-libm_alias_float (__exp10, exp10)
+compat_symbol (libm, __exp10f_compat, exp10f, GLIBC_2_1);
# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
-strong_alias (__exp10f, __pow10f)
+strong_alias (__exp10f_compat, __pow10f)
compat_symbol (libm, __pow10f, pow10f, GLIBC_2_1);
# endif
#endif
@@ -218,7 +218,7 @@ LOCAL_OBJECT_END(T_table)
.section .text
-GLOBAL_IEEE754_ENTRY(exp10f)
+GLOBAL_IEEE754_ENTRY(__exp10f)
{.mfi
@@ -487,11 +487,17 @@ OUT_RANGE_exp10:
}
;;
-GLOBAL_IEEE754_END(exp10f)
+GLOBAL_IEEE754_END(__exp10f)
libm_alias_float_other (__exp10, exp10)
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
-compat_symbol (libm, exp10f, pow10f, GLIBC_2_2)
+strong_alias (__exp10f, __pow10f_compat)
+compat_symbol (libm, __pow10f_compat, pow10f, GLIBC_2_2)
#endif
+#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_32)
+strong_alias (__exp10f, __exp10f_compat)
+compat_symbol (libm, __exp10f_compat, exp10f, GLIBC_2_1)
+#endif
+versioned_symbol (libm, __exp10f, exp10f, GLIBC_2_32)
LOCAL_LIBM_ENTRY(__libm_error_region)
@@ -21,6 +21,8 @@
#include <stdint.h>
#include <libm-alias-finite.h>
#include <libm-alias-float.h>
+#include <shlib-compat.h>
+#include <math-svid-compat.h>
#include "math_config.h"
/*
@@ -139,7 +141,7 @@ top13 (float x)
}
float
-__ieee754_exp10f (float x)
+__exp10f (float x)
{
uint32_t abstop;
uint64_t ki, t;
@@ -195,4 +197,16 @@ __ieee754_exp10f (float x)
y = y * s;
return (float) y;
}
+#ifndef __exp10f
+strong_alias (__exp10f, __ieee754_exp10f)
libm_alias_finite (__ieee754_exp10f, __exp10f)
+/* For architectures that already provided exp10f without SVID support, there
+ is no need to add a new version. */
+#if !LIBM_SVID_COMPAT
+# define EXP10F_VERSION GLIBC_2_26
+#else
+# define EXP10F_VERSION GLIBC_2_32
+#endif
+versioned_symbol (libm, __exp10f, exp10f, EXP10F_VERSION);
+libm_alias_float_other (__exp10, exp10)
+#endif
@@ -1,3 +1,8 @@
+#include <libm-alias-float.h>
#define FUNC __ieee754_exp10f
#define FUNC_FINITE __exp10f
#include <e_acosf.c>
+strong_alias (__ieee754_exp10f, __exp10f)
+libm_alias_finite (__ieee754_exp10f, __exp10f)
+versioned_symbol (libm, __exp10f, exp10f, GLIBC_2_32);
+libm_alias_float_other (__ieee754_exp10, exp10)
@@ -1089,3 +1089,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -1110,6 +1110,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
@@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 _LIB_VERSION D 0x4
GLIBC_2.4 __clog10 F
GLIBC_2.4 __clog10f F
@@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 _LIB_VERSION D 0x4
GLIBC_2.4 __clog10 F
GLIBC_2.4 __clog10f F
@@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F
@@ -1096,3 +1096,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -1026,3 +1026,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 _LIB_VERSION D 0x4
GLIBC_2.4 __clog10 F
GLIBC_2.4 __clog10f F
@@ -821,3 +821,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F
@@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -827,6 +827,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
@@ -820,6 +820,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
@@ -1097,3 +1097,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -1054,6 +1054,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
@@ -1054,6 +1054,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
@@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F
@@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F
@@ -1061,6 +1061,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
@@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -1087,3 +1087,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F
@@ -1087,3 +1087,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F
+GLIBC_2.32 exp10f F