[3/4] New expf and exp2f version without SVID compat wrapper

Message ID 59B90CC5.6000703@arm.com
State New
Headers show
Series
  • Optimized generic expf and exp2f
Related show

Commit Message

Szabolcs Nagy Sept. 13, 2017, 10:47 a.m.
This patch changes the expf and exp2f error handling
semantics to only set errno accoring to POSIX rules.
New symbol version is introduced at GLIBC_2.27.

The old wrappers are kept for compat symbols (with
GLIBC_2_0 version and unchanged error semantics).

Internal calls to __expf now get the new error semantics,
this seems to only affect sysdeps/i386/fpu/s_expm1f.S
where the errno-only behaviour should be correct.

All linux libm abilists are updated (even ones where i
could not build a working toolchain).

2017-09-13  Szabolcs Nagy  <szabolcs.nagy@arm.com>

	* math/Versions (expf): New libm symbol at GLIBC_2.27.
	(exp2f): Likewise.
	* math/w_exp2f.c: New file.
	* math/w_expf.c: New file.
	* math/w_exp2f_compat.c (__exp2f_compat): For compat symbol only.
	* math/w_expf_compat.c (__expf_compat): Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.

Comments

Joseph Myers Sept. 13, 2017, 8:17 p.m. | #1
On Wed, 13 Sep 2017, Szabolcs Nagy wrote:

> This patch changes the expf and exp2f error handling
> semantics to only set errno accoring to POSIX rules.
> New symbol version is introduced at GLIBC_2.27.
> 
> The old wrappers are kept for compat symbols (with
> GLIBC_2_0 version and unchanged error semantics).
> 
> Internal calls to __expf now get the new error semantics,
> this seems to only affect sysdeps/i386/fpu/s_expm1f.S
> where the errno-only behaviour should be correct.
> 
> All linux libm abilists are updated (even ones where i
> could not build a working toolchain).

To confirm: does just adding the versions to Versions like you did 
actually work to get the symbols exported for both versions on ia64 (which 
does not use the common wrappers)?  (I'm fine with having both versions 
point to the same functions there, as long as the versions do really exist 
as indicated in the ABI baseline.)

Patch

From f108f9ef952e9b46f89da762794b7220d34fa927 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Tue, 12 Sep 2017 12:20:50 +0100
Subject: [PATCH 3/4] errno-only

---
 math/Versions                                                | 3 +++
 math/w_exp2f.c                                               | 7 +++++++
 math/w_exp2f_compat.c                                        | 6 +++---
 math/w_expf.c                                                | 7 +++++++
 math/w_expf_compat.c                                         | 7 +++----
 sysdeps/unix/sysv/linux/aarch64/libm.abilist                 | 3 +++
 sysdeps/unix/sysv/linux/alpha/libm.abilist                   | 3 +++
 sysdeps/unix/sysv/linux/arm/libm.abilist                     | 3 +++
 sysdeps/unix/sysv/linux/hppa/libm.abilist                    | 3 +++
 sysdeps/unix/sysv/linux/i386/libm.abilist                    | 3 +++
 sysdeps/unix/sysv/linux/ia64/libm.abilist                    | 3 +++
 sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist           | 3 +++
 sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist             | 3 +++
 sysdeps/unix/sysv/linux/microblaze/libm.abilist              | 3 +++
 sysdeps/unix/sysv/linux/mips/mips32/libm.abilist             | 3 +++
 sysdeps/unix/sysv/linux/mips/mips64/libm.abilist             | 3 +++
 sysdeps/unix/sysv/linux/nios2/libm.abilist                   | 3 +++
 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist   | 3 +++
 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist | 3 +++
 sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist    | 3 +++
 sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist       | 3 +++
 sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist            | 3 +++
 sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist            | 3 +++
 sysdeps/unix/sysv/linux/sh/libm.abilist                      | 3 +++
 sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist           | 3 +++
 sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist           | 3 +++
 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist    | 3 +++
 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist    | 3 +++
 sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist            | 3 +++
 sysdeps/unix/sysv/linux/x86_64/64/libm.abilist               | 3 +++
 sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist              | 3 +++
 31 files changed, 101 insertions(+), 7 deletions(-)
 create mode 100644 math/w_exp2f.c
 create mode 100644 math/w_expf.c

diff --git a/math/Versions b/math/Versions
index e409de0681..380f6a2a1a 100644
--- a/math/Versions
+++ b/math/Versions
@@ -229,4 +229,7 @@  libm {
     fromfp; fromfpf; fromfpl; ufromfp; ufromfpf; ufromfpl;
     fromfpx; fromfpxf; fromfpxl; ufromfpx; ufromfpxf; ufromfpxl;
   }
+  GLIBC_2.27 {
+    expf; exp2f;
+  }
 }
diff --git a/math/w_exp2f.c b/math/w_exp2f.c
new file mode 100644
index 0000000000..948d745dab
--- /dev/null
+++ b/math/w_exp2f.c
@@ -0,0 +1,7 @@ 
+#include <math-type-macros-float.h>
+#undef __USE_WRAPPER_TEMPLATE
+#define __USE_WRAPPER_TEMPLATE 1
+#undef declare_mgen_alias
+#define declare_mgen_alias(a, b)
+#include <w_exp2_template.c>
+versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
diff --git a/math/w_exp2f_compat.c b/math/w_exp2f_compat.c
index b058daed30..6ab6f6c6de 100644
--- a/math/w_exp2f_compat.c
+++ b/math/w_exp2f_compat.c
@@ -6,9 +6,9 @@ 
 #include <math_private.h>
 #include <math-svid-compat.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
 float
-__exp2f (float x)
+__exp2f_compat (float x)
 {
   float z = __ieee754_exp2f (x);
   if (__builtin_expect (!isfinite (z) || z == 0, 0)
@@ -18,5 +18,5 @@  __exp2f (float x)
 
   return z;
 }
-weak_alias (__exp2f, exp2f)
+compat_symbol (libm, __exp2f_compat, exp2f, GLIBC_2_1);
 #endif
diff --git a/math/w_expf.c b/math/w_expf.c
new file mode 100644
index 0000000000..6d5f03c5f9
--- /dev/null
+++ b/math/w_expf.c
@@ -0,0 +1,7 @@ 
+#include <math-type-macros-float.h>
+#undef __USE_WRAPPER_TEMPLATE
+#define __USE_WRAPPER_TEMPLATE 1
+#undef declare_mgen_alias
+#define declare_mgen_alias(a, b)
+#include <w_exp_template.c>
+versioned_symbol (libm, __expf, expf, GLIBC_2_27);
diff --git a/math/w_expf_compat.c b/math/w_expf_compat.c
index a38ff4082d..2512498bb3 100644
--- a/math/w_expf_compat.c
+++ b/math/w_expf_compat.c
@@ -20,10 +20,10 @@ 
 #include <math_private.h>
 #include <math-svid-compat.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_27)
 /* wrapper expf */
 float
-__expf (float x)
+__expf_compat (float x)
 {
   float z = __ieee754_expf (x);
   if (__builtin_expect (!isfinite (z) || z == 0, 0)
@@ -32,6 +32,5 @@  __expf (float x)
 
   return z;
 }
-hidden_def (__expf)
-weak_alias (__expf, expf)
+compat_symbol (libm, __expf_compat, expf, GLIBC_2_0);
 #endif
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 6266864ea7..10102eeaff 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -460,3 +460,6 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 0dc44afd77..e09a115aa9 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -470,6 +470,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.3.4 GLIBC_2.3.4 A
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist
index d0c33d2a11..8095876449 100644
--- a/sysdeps/unix/sysv/linux/arm/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libm.abilist
@@ -117,6 +117,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist
index 80fd4ada99..19d40ef50d 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -429,5 +429,8 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 2aef7e5aed..791fba28e5 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -611,4 +611,7 @@  GLIBC_2.26 ufromfpxf128 F
 GLIBC_2.26 y0f128 F
 GLIBC_2.26 y1f128 F
 GLIBC_2.26 ynf128 F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
index f165eb3957..65a0fbe56a 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -540,4 +540,7 @@  GLIBC_2.26 ufromfpxf128 F
 GLIBC_2.26 y0f128 F
 GLIBC_2.26 y1f128 F
 GLIBC_2.26 ynf128 F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index d0c33d2a11..8095876449 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -117,6 +117,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
index f3de018cd9..5e692dda7b 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -471,4 +471,7 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
index bb872f292a..65f1d5b451 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
@@ -428,3 +428,6 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 000c011495..c32ea5b96a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -430,6 +430,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 exp2l F
 _gp_disp _gp_disp A
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index b9599fee34..18b2aa2404 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -462,4 +462,7 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index c858ed5907..e492a68e9d 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -428,3 +428,6 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index 13ea493ac8..ad8f0372f4 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -473,6 +473,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index ff6dc7a361..9c26b5b809 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -472,6 +472,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
index d79cb99325..8e36699f28 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
@@ -605,3 +605,6 @@  GLIBC_2.26 ufromfpxf128 F
 GLIBC_2.26 y0f128 F
 GLIBC_2.26 y1f128 F
 GLIBC_2.26 ynf128 F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
index afd381791a..9ca0c3ccfc 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
@@ -148,6 +148,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 _LIB_VERSION D 0x4
 GLIBC_2.3 __clog10 F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 604dff18d4..8a79f0137f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -460,6 +460,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index b56701e350..df81853618 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -458,6 +458,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist
index 6b24852b68..6b6a42dc9c 100644
--- a/sysdeps/unix/sysv/linux/sh/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libm.abilist
@@ -429,5 +429,8 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 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 61042ba147..24d67d22e1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -464,6 +464,9 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index d071835880..2fdccc0de3 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -461,4 +461,7 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
index 0059c27fa2..98bc348f91 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
@@ -429,3 +429,6 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
index 0059c27fa2..98bc348f91 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
@@ -429,3 +429,6 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
index 0059c27fa2..98bc348f91 100644
--- a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
@@ -429,3 +429,6 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 44473c2cbe..e6fd3fe3df 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -600,4 +600,7 @@  GLIBC_2.26 ufromfpxf128 F
 GLIBC_2.26 y0f128 F
 GLIBC_2.26 y1f128 F
 GLIBC_2.26 ynf128 F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index cc19a73112..afa7b98697 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -599,3 +599,6 @@  GLIBC_2.26 ufromfpxf128 F
 GLIBC_2.26 y0f128 F
 GLIBC_2.26 y1f128 F
 GLIBC_2.26 ynf128 F
+GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 exp2f F
+GLIBC_2.27 expf F
-- 
2.11.0