From 309a2d3d3543b89bc9fb1b86b02cb84e8b961780 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Wed, 13 Sep 2017 17:19:51 +0100
Subject: [PATCH 3/5] New symbol version for logf, log2f and powf without SVID
 compat

This patch changes the logf, log2f and powf 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.

ia64 needed assembly change to have the new and compat versioned
symbol map to the same function.

All linux libm abilists are updated.

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

	* math/Versions (logf): New libm symbol at GLIBC_2.27.
	(log2f): Likewise.
	(powf): Likewise.
	* math/w_log2f.c: New file.
	* math/w_logf.c: New file.
	* math/w_powf.c: New file.
	* math/w_log2f_compat.c (__log2f_compat): For compat symbol only.
	* math/w_logf_compat.c (__logf_compat): Likewise.
	* math/w_powf_compat.c (__powf_compat): Likewise.
	* sysdeps/ia64/fpu/e_log2f.S: Add versioned symbols.
	* sysdeps/ia64/fpu/e_logf.S: Likewise.
	* sysdeps/ia64/fpu/e_powf.S: 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.
---
 math/Versions                                                |  2 +-
 math/w_log2f.c                                               |  7 +++++++
 math/w_log2f_compat.c                                        |  6 +++---
 math/w_logf.c                                                |  7 +++++++
 math/w_logf_compat.c                                         |  6 +++---
 math/w_powf.c                                                |  7 +++++++
 math/w_powf_compat.c                                         |  6 +++---
 sysdeps/ia64/fpu/e_log2f.S                                   | 10 ++++++++--
 sysdeps/ia64/fpu/e_logf.S                                    |  6 ++++++
 sysdeps/ia64/fpu/e_powf.S                                    | 10 ++++++++--
 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 +++
 36 files changed, 131 insertions(+), 14 deletions(-)
 create mode 100644 math/w_log2f.c
 create mode 100644 math/w_logf.c
 create mode 100644 math/w_powf.c

diff --git a/math/Versions b/math/Versions
index 380f6a2a1a..2fbdb2f266 100644
--- a/math/Versions
+++ b/math/Versions
@@ -230,6 +230,6 @@ libm {
     fromfpx; fromfpxf; fromfpxl; ufromfpx; ufromfpxf; ufromfpxl;
   }
   GLIBC_2.27 {
-    expf; exp2f;
+    expf; exp2f; logf; log2f; powf;
   }
 }
diff --git a/math/w_log2f.c b/math/w_log2f.c
new file mode 100644
index 0000000000..cda0c3a644
--- /dev/null
+++ b/math/w_log2f.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_log2_template.c>
+versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
diff --git a/math/w_log2f_compat.c b/math/w_log2f_compat.c
index 295c1620f7..3caa310c51 100644
--- a/math/w_log2f_compat.c
+++ b/math/w_log2f_compat.c
@@ -23,10 +23,10 @@
 #include <libm-alias-float.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
 /* wrapper log2f(x) */
 float
-__log2f (float x)
+__log2f_compat (float x)
 {
   if (__builtin_expect (islessequal (x, 0.0f), 0) && _LIB_VERSION != _IEEE_)
     {
@@ -44,5 +44,5 @@ __log2f (float x)
 
   return  __ieee754_log2f (x);
 }
-libm_alias_float (__log2, log2)
+compat_symbol (libm, __log2f_compat, log2f, GLIBC_2_1);
 #endif
diff --git a/math/w_logf.c b/math/w_logf.c
new file mode 100644
index 0000000000..d960e016d7
--- /dev/null
+++ b/math/w_logf.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_log_template.c>
+versioned_symbol (libm, __logf, logf, GLIBC_2_27);
diff --git a/math/w_logf_compat.c b/math/w_logf_compat.c
index 7cdacdf921..936b3a6e67 100644
--- a/math/w_logf_compat.c
+++ b/math/w_logf_compat.c
@@ -23,10 +23,10 @@
 #include <libm-alias-float.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_27)
 /* wrapper logf(x) */
 float
-__logf (float x)
+__logf_compat (float x)
 {
   if (__builtin_expect (islessequal (x, 0.0f), 0) && _LIB_VERSION != _IEEE_)
     {
@@ -44,5 +44,5 @@ __logf (float x)
 
   return  __ieee754_logf (x);
 }
-libm_alias_float (__log, log)
+compat_symbol (libm, __logf_compat, logf, GLIBC_2_0);
 #endif
diff --git a/math/w_powf.c b/math/w_powf.c
new file mode 100644
index 0000000000..a18348329e
--- /dev/null
+++ b/math/w_powf.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_pow_template.c>
+versioned_symbol (libm, __powf, powf, GLIBC_2_27);
diff --git a/math/w_powf_compat.c b/math/w_powf_compat.c
index 39e818af7e..7745639efe 100644
--- a/math/w_powf_compat.c
+++ b/math/w_powf_compat.c
@@ -22,10 +22,10 @@
 #include <libm-alias-float.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_27)
 /* wrapper powf */
 float
-__powf (float x, float y)
+__powf_compat (float x, float y)
 {
   float z = __ieee754_powf (x, y);
   if (__glibc_unlikely (!isfinite (z)))
@@ -60,5 +60,5 @@ __powf (float x, float y)
 
   return z;
 }
-libm_alias_float (__pow, pow)
+compat_symbol (libm, __powf_compat, powf, GLIBC_2_0);
 #endif
diff --git a/sysdeps/ia64/fpu/e_log2f.S b/sysdeps/ia64/fpu/e_log2f.S
index 2c3f18f360..9b754d1043 100644
--- a/sysdeps/ia64/fpu/e_log2f.S
+++ b/sysdeps/ia64/fpu/e_log2f.S
@@ -252,7 +252,7 @@ LOCAL_OBJECT_END(T_table)
 
 
 .section .text
-GLOBAL_LIBM_ENTRY(log2f)
+GLOBAL_LIBM_ENTRY(__log2f)
 
 { .mfi
   alloc r32=ar.pfs,1,4,4,0
@@ -491,7 +491,13 @@ SPECIAL_log2f:
   br.ret.sptk b0;;
 }
 
-GLOBAL_LIBM_END(log2f)
+GLOBAL_LIBM_END(__log2f)
+#ifdef SHARED
+.symver __log2f,log2f@@GLIBC_2.27
+.weak __log2f_compat
+.set __log2f_compat,__log2f
+.symver __log2f_compat,log2f@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
diff --git a/sysdeps/ia64/fpu/e_logf.S b/sysdeps/ia64/fpu/e_logf.S
index 2dda2186d0..d5f5437793 100644
--- a/sysdeps/ia64/fpu/e_logf.S
+++ b/sysdeps/ia64/fpu/e_logf.S
@@ -1088,6 +1088,12 @@ logf_libm_err:
       nop.i         0
 };;
 GLOBAL_IEEE754_END(logf)
+#ifdef SHARED
+.symver logf,logf@@GLIBC_2.27
+.weak __logf_compat
+.set __logf_compat,__logf
+.symver __logf_compat,logf@GLIBC_2.2
+#endif
 
 
 // Stack operations when calling error support.
diff --git a/sysdeps/ia64/fpu/e_powf.S b/sysdeps/ia64/fpu/e_powf.S
index d61bc79e5e..388391624f 100644
--- a/sysdeps/ia64/fpu/e_powf.S
+++ b/sysdeps/ia64/fpu/e_powf.S
@@ -868,7 +868,7 @@ data8 0xEAC0C6E7DD24392F , 0x00003FFF
 LOCAL_OBJECT_END(pow_tbl2)
 
 .section .text
-GLOBAL_LIBM_ENTRY(powf)
+GLOBAL_LIBM_ENTRY(__powf)
 
 // Get exponent of x.  Will be used to calculate K.
 { .mfi
@@ -2002,7 +2002,13 @@ POW_OVER_UNDER_ERROR:
 }
 ;;
 
-GLOBAL_LIBM_END(powf)
+GLOBAL_LIBM_END(__powf)
+#ifdef SHARED
+.symver __powf,powf@@GLIBC_2.27
+.weak __powf_compat
+.set __powf_compat,__powf
+.symver __powf_compat,powf@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 10102eeaff..3f0190ae03 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -463,3 +463,6 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index e09a115aa9..78edc5e3d9 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -473,6 +473,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 8095876449..b3fd4a27b2 100644
--- a/sysdeps/unix/sysv/linux/arm/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libm.abilist
@@ -120,6 +120,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 19d40ef50d..ffa61bf1b1 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -432,5 +432,8 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 791fba28e5..1a7e6bf449 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -614,4 +614,7 @@ GLIBC_2.26 ynf128 F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 65a0fbe56a..7e15735eae 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -543,4 +543,7 @@ GLIBC_2.26 ynf128 F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 8095876449..b3fd4a27b2 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -120,6 +120,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 5e692dda7b..aae61169f9 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -474,4 +474,7 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 65f1d5b451..0d3b4b1e90 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
@@ -431,3 +431,6 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index c32ea5b96a..d32d58d4e4 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -433,6 +433,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 18b2aa2404..f33ba0576b 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -465,4 +465,7 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 e492a68e9d..0fe34e98fa 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -431,3 +431,6 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index ad8f0372f4..ed013deefd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -476,6 +476,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 9c26b5b809..6f2873dc80 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -475,6 +475,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 8e36699f28..723be46c20 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
@@ -608,3 +608,6 @@ GLIBC_2.26 ynf128 F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
index 9ca0c3ccfc..f3aeac2e1e 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
@@ -151,6 +151,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 8a79f0137f..2b758e80fd 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -463,6 +463,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 df81853618..62c9bb57a8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -461,6 +461,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 6b6a42dc9c..a57fbc0eac 100644
--- a/sysdeps/unix/sysv/linux/sh/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libm.abilist
@@ -432,5 +432,8 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 24d67d22e1..f8f10e5952 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -467,6 +467,9 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 2fdccc0de3..b5412c9b48 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -464,4 +464,7 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 98bc348f91..b711e87026 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
@@ -432,3 +432,6 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
index 98bc348f91..b711e87026 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
@@ -432,3 +432,6 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
index 98bc348f91..b711e87026 100644
--- a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
@@ -432,3 +432,6 @@ GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index e6fd3fe3df..201c2ab1b1 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -603,4 +603,7 @@ GLIBC_2.26 ynf128 F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf 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 afa7b98697..10e389a96a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -602,3 +602,6 @@ GLIBC_2.26 ynf128 F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 exp2f F
 GLIBC_2.27 expf F
+GLIBC_2.27 log2f F
+GLIBC_2.27 logf F
+GLIBC_2.27 powf F
-- 
2.11.0

