diff mbox series

[4/5] New exp10f version without SVID compat wrapper

Message ID 20200409195945.10393-4-adhemerval.zanella@linaro.org
State New
Headers show
Series [1/5] benchtests: Add exp10f benchmark | expand

Commit Message

develop--- via Libc-alpha April 9, 2020, 7:59 p.m. UTC
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

Adhemerval Zanella April 29, 2020, 5:11 p.m. UTC | #1
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
>
Adhemerval Zanella May 20, 2020, 8:19 p.m. UTC | #2
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
>>
diff mbox series

Patch

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