GNU C Library master sources branch master updated. glibc-2.28.9000-310-ga502c52

nsz@sourceware.org nsz@sourceware.org
Wed Nov 21 09:59:00 GMT 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  a502c5294b46109827c970a989ee10d1a9dcb176 (commit)
       via  718d6542f2c0e4c8ec65453c1df6612768d6ef00 (commit)
       via  f29b7c492d8a06581cf1b573b7e5907daa8c139c (commit)
       via  c20a10561adab4aeb544e777cbb86679bd5f876d (commit)
      from  bcdaad21d4635931d1bd3b54a7894276925d081d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a502c5294b46109827c970a989ee10d1a9dcb176

commit a502c5294b46109827c970a989ee10d1a9dcb176
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Wed Jun 27 16:33:16 2018 +0100

    Remove the error handling wrapper from pow
    
    Introduce new pow symbol version that doesn't do SVID compatible error
    handling.  The standard errno and fp exception based error handling is
    inline in the new code and does not have significant overhead.
    
    The wrapper is disabled for sysdeps/ieee754/dbl-64 by using empty
    w_pow.c and enabled for targets with their own pow implementation or
    ifunc dispatch on __ieee754_pow by including math/w_pow.c.
    
    The compatibility symbol version still uses the wrapper with SVID error
    handling around the new code.  There is no new symbol version nor
    compatibility code on !LIBM_SVID_COMPAT targets (e.g. riscv).
    
    On targets where previously powl was an alias of pow, now it points to
    the compatibility symbol with the wrapper, because it still need the
    SVID compatible error handling.  This affects NO_LONG_DOUBLE (e.g. arm)
    and LONG_DOUBLE_COMPAT (e.g. alpha) targets as well.
    
    The __pow_finite symbol is now an alias of pow.  Both __pow_finite and
    pow set errno and thus not const functions.
    
    The ia64 asm is changed so the compat and new symbol versions map to the
    same address.
    
    On x86_64 #include <math.h> was added before macro definitions that
    may affect that header.
    
    Tested with build-many-glibcs.py.
    
    	* math/Versions (GLIBC_2.29): Add pow.
    	* math/w_pow_compat.c (__pow_compat): Change to versioned compat
    	symbol.
    	* math/w_pow.c: New file.
    	* sysdeps/i386/fpu/w_pow.c: New file.
    	* sysdeps/ia64/fpu/e_pow.S: Add versioned symbols.
    	* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Rename to __pow
    	and add necessary aliases.
    	* sysdeps/ieee754/dbl-64/w_pow.c: New file.
    	* sysdeps/m68k/m680x0/fpu/w_pow.c: New file.
    	* sysdeps/mach/hurd/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
    	* sysdeps/x86_64/fpu/multiarch/e_pow-fma.c (__ieee754_pow): Rename to
    	__pow.
    	* sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c (__ieee754_pow): Likewise.
    	* sysdeps/x86_64/fpu/multiarch/e_pow.c (__ieee754_pow): Likewise.
    	* sysdeps/x86_64/fpu/multiarch/w_pow.c: New file.

diff --git a/ChangeLog b/ChangeLog
index 94d0b97..f1db5d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,47 @@
 2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
+	* math/Versions (GLIBC_2.29): Add pow.
+	* math/w_pow_compat.c (__pow_compat): Change to versioned compat
+	symbol.
+	* math/w_pow.c: New file.
+	* sysdeps/i386/fpu/w_pow.c: New file.
+	* sysdeps/ia64/fpu/e_pow.S: Add versioned symbols.
+	* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Rename to __pow
+	and add necessary aliases.
+	* sysdeps/ieee754/dbl-64/w_pow.c: New file.
+	* sysdeps/m68k/m680x0/fpu/w_pow.c: New file.
+	* sysdeps/mach/hurd/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
+	* sysdeps/x86_64/fpu/multiarch/e_pow-fma.c (__ieee754_pow): Rename to
+	__pow.
+	* sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c (__ieee754_pow): Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_pow.c (__ieee754_pow): Likewise.
+	* sysdeps/x86_64/fpu/multiarch/w_pow.c: New file.
+
+2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
 	* math/Versions (GLIBC_2.29): Add log2.
 	* math/w_log2_compat.c (__log2_compat): Change to versioned compat
 	symbol.
diff --git a/math/Versions b/math/Versions
index a887602..f1ab297 100644
--- a/math/Versions
+++ b/math/Versions
@@ -577,6 +577,6 @@ libm {
   }
   GLIBC_2.29 {
     # No SVID compatible error handling.
-    exp; exp2; log; log2;
+    exp; exp2; log; log2; pow;
   }
 }
diff --git a/math/w_pow.c b/math/w_pow.c
new file mode 100644
index 0000000..a66fd39
--- /dev/null
+++ b/math/w_pow.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-double.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, __pow, pow, GLIBC_2_29);
+libm_alias_double_other (__pow, pow)
diff --git a/math/w_pow_compat.c b/math/w_pow_compat.c
index 815c679..eadf9b0 100644
--- a/math/w_pow_compat.c
+++ b/math/w_pow_compat.c
@@ -22,10 +22,12 @@
 #include <libm-alias-double.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29) \
+			 || defined NO_LONG_DOUBLE \
+			 || defined LONG_DOUBLE_COMPAT)
 /* wrapper pow */
 double
-__pow (double x, double y)
+__pow_compat (double x, double y)
 {
   double z = __ieee754_pow (x, y);
   if (__glibc_unlikely (!isfinite (z)))
@@ -60,5 +62,17 @@ __pow (double x, double y)
 
   return z;
 }
-libm_alias_double (__pow, pow)
+# if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29)
+compat_symbol (libm, __pow_compat, pow, GLIBC_2_0);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__pow_compat, powl)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+/* Work around gas bug "multiple versions for symbol".  */
+weak_alias (__pow_compat, __pow_compat_alias)
+
+LONG_DOUBLE_COMPAT_CHOOSE_libm_powl (
+  compat_symbol (libm, __pow_compat_alias, powl, FIRST_VERSION_libm_powl), );
+# endif
 #endif
diff --git a/sysdeps/i386/fpu/w_pow.c b/sysdeps/i386/fpu/w_pow.c
new file mode 100644
index 0000000..b50c198
--- /dev/null
+++ b/sysdeps/i386/fpu/w_pow.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>
diff --git a/sysdeps/ia64/fpu/e_pow.S b/sysdeps/ia64/fpu/e_pow.S
index 3b402f3..d827bcc 100644
--- a/sysdeps/ia64/fpu/e_pow.S
+++ b/sysdeps/ia64/fpu/e_pow.S
@@ -910,7 +910,7 @@ data8 0xEAC0C6E7DD24392F , 0x00003FFF
 LOCAL_OBJECT_END(pow_tbl2)
 
 .section .text
-GLOBAL_LIBM_ENTRY(pow)
+WEAK_LIBM_ENTRY(pow)
 
 // Get exponent of x.  Will be used to calculate K.
 { .mfi
@@ -2233,8 +2233,14 @@ POW_OVER_UNDER_ERROR:
 }
 ;;
 
-GLOBAL_LIBM_END(pow)
-libm_alias_double_other (pow, pow)
+WEAK_LIBM_END(pow)
+libm_alias_double_other (__pow, pow)
+#ifdef SHARED
+.symver pow,pow@@GLIBC_2.29
+.weak __pow_compat
+.set __pow_compat,__pow
+.symver __pow_compat,pow@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
index ba38bfe..7cf01b8 100644
--- a/sysdeps/ieee754/dbl-64/e_pow.c
+++ b/sysdeps/ieee754/dbl-64/e_pow.c
@@ -20,6 +20,9 @@
 #include <stdint.h>
 #include <math-barriers.h>
 #include <math-narrow-eval.h>
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#include <libm-alias-double.h>
 #include "math_config.h"
 
 /*
@@ -276,7 +279,7 @@ zeroinfnan (uint64_t i)
 
 double
 SECTION
-__ieee754_pow (double x, double y)
+__pow (double x, double y)
 {
   uint32_t sign_bias = 0;
   uint64_t ix, iy;
@@ -375,6 +378,13 @@ __ieee754_pow (double x, double y)
 #endif
   return exp_inline (ehi, elo, sign_bias);
 }
-#ifndef __ieee754_pow
-strong_alias (__ieee754_pow, __pow_finite)
+#ifndef __pow
+strong_alias (__pow, __ieee754_pow)
+strong_alias (__pow, __pow_finite)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __pow, pow, GLIBC_2_29);
+libm_alias_double_other (__pow, pow)
+# else
+libm_alias_double (__pow, pow)
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/w_pow.c b/sysdeps/ieee754/dbl-64/w_pow.c
new file mode 100644
index 0000000..1cc8931
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_pow.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_pow.c b/sysdeps/m68k/m680x0/fpu/w_pow.c
new file mode 100644
index 0000000..b50c198
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_pow.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index f319580..5208057 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1072,3 +1072,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index c01ff24..d38ebfb 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1036,3 +1036,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index f5ec874..1157dcf 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1047,6 +1047,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
 GLIBC_2.3.4 __c1_cacoshf F
diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist
index 9b7d87b..547e7bc 100644
--- a/sysdeps/unix/sysv/linux/arm/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libm.abilist
@@ -457,6 +457,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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 d193f99..4bdd605 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -768,4 +768,5 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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 eae2c55..087e297 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1079,3 +1079,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
index 9796e8d..fff5eb1 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -1009,3 +1009,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 9b7d87b..547e7bc 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -457,6 +457,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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 f73ad1a..5f42264 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -808,3 +808,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
index dcb7dbb..bbeeebf 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
@@ -769,3 +769,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 1146e2d..93405d1 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -768,4 +768,5 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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 d9c830d..33f67a5 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1036,3 +1036,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index 0902ca0..ecbe596 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -769,3 +769,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index 3e9e5e7..a47fca4 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -814,6 +814,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index 7a3c6be..ca7095f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -813,6 +813,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
index d50c82c..554dcd2 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
@@ -1080,3 +1080,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
index cbf2ad3..9c6cf06 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
@@ -492,6 +492,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
 GLIBC_2.3 _LIB_VERSION D 0x4
 GLIBC_2.3 __clog10 F
 GLIBC_2.3 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 382455c..be5d286 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1037,6 +1037,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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 92b794b..512fbc8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1037,6 +1037,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist
index 3320f14..09d97d6 100644
--- a/sysdeps/unix/sysv/linux/sh/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libm.abilist
@@ -768,4 +768,5 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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 2a10a0f..3240ff6 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1044,6 +1044,7 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow 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 ebbc58d..351331b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1036,3 +1036,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 3e02619..087f4db 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1070,3 +1070,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index 03cd62f..e9a1cc0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1070,3 +1070,4 @@ GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
 GLIBC_2.29 log2 F
+GLIBC_2.29 pow F
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c b/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c
index 73c1e7f..2c5bfae 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c
@@ -1,5 +1,5 @@
-#define __ieee754_pow __ieee754_pow_fma
-#define __exp1 __exp1_fma
+#include <math.h>
+#define __pow __ieee754_pow_fma
 #define SECTION __attribute__ ((section (".text.fma")))
 
 #include <sysdeps/ieee754/dbl-64/e_pow.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c
index 8971b65..7ec1a0a 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c
@@ -1,5 +1,5 @@
-#define __ieee754_pow __ieee754_pow_fma4
-#define __exp1 __exp1_fma4
+#include <math.h>
+#define __pow __ieee754_pow_fma4
 #define SECTION __attribute__ ((section (".text.fma4")))
 
 #include <sysdeps/ieee754/dbl-64/e_pow.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow.c b/sysdeps/x86_64/fpu/multiarch/e_pow.c
index 084073c..207ffcd 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_pow.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_pow.c
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <math.h>
+
 extern double __redirect_ieee754_pow (double, double);
 
 #define SYMBOL_NAME ieee754_pow
@@ -25,5 +27,5 @@ libc_ifunc_redirected (__redirect_ieee754_pow,
 		       __ieee754_pow, IFUNC_SELECTOR ());
 strong_alias (__ieee754_pow, __pow_finite)
 
-#define __ieee754_pow __ieee754_pow_sse2
+#define __pow __ieee754_pow_sse2
 #include <sysdeps/ieee754/dbl-64/e_pow.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/w_pow.c b/sysdeps/x86_64/fpu/multiarch/w_pow.c
new file mode 100644
index 0000000..b50c198
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/w_pow.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=718d6542f2c0e4c8ec65453c1df6612768d6ef00

commit 718d6542f2c0e4c8ec65453c1df6612768d6ef00
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Wed Jun 27 16:29:24 2018 +0100

    Remove the error handling wrapper from log2
    
    Introduce new log2 symbol version that doesn't do SVID compatible error
    handling.  The standard errno and fp exception based error handling is
    inline in the new code and does not have significant overhead.
    
    The wrapper is disabled for sysdeps/ieee754/dbl-64 by using empty
    w_log2.c and enabled for targets with their own log2 implementation by
    including math/w_log2.c.
    
    The compatibility symbol version still uses the wrapper with SVID error
    handling around the new code.  There is no new symbol version nor
    compatibility code on !LIBM_SVID_COMPAT targets (e.g. riscv).
    
    On targets where previously log2l was an alias of log2, now it points to
    the compatibility symbol with the wrapper, because it still need the
    SVID compatible error handling.  This affects NO_LONG_DOUBLE (e.g. arm)
    and LONG_DOUBLE_COMPAT (e.g. alpha) targets as well.
    
    The __log2_finite symbol is now an alias of log2.  Both __log2_finite
    and log2 set errno and thus not const functions.
    
    The ia64 asm is changed so the compat and new symbol versions map to the
    same address.
    
    Tested with build-many-glibcs.py.
    
    	* math/Versions (GLIBC_2.29): Add log2.
    	* math/w_log2_compat.c (__log2_compat): Change to versioned compat
    	symbol.
    	* math/w_log2.c: New file.
    	* sysdeps/i386/fpu/w_log2.c: New file.
    	* sysdeps/ia64/fpu/e_log2.S: Add versioned symbols.
    	* sysdeps/ieee754/dbl-64/e_log2.c (__ieee754_log2): Rename to __log2
    	and add necessary aliases.
    	* sysdeps/ieee754/dbl-64/w_log2.c: New file.
    	* sysdeps/m68k/m680x0/fpu/w_log2.c: New file.
    	* sysdeps/mach/hurd/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.

diff --git a/ChangeLog b/ChangeLog
index 206d216..94d0b97 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,42 @@
 2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
+	* math/Versions (GLIBC_2.29): Add log2.
+	* math/w_log2_compat.c (__log2_compat): Change to versioned compat
+	symbol.
+	* math/w_log2.c: New file.
+	* sysdeps/i386/fpu/w_log2.c: New file.
+	* sysdeps/ia64/fpu/e_log2.S: Add versioned symbols.
+	* sysdeps/ieee754/dbl-64/e_log2.c (__ieee754_log2): Rename to __log2
+	and add necessary aliases.
+	* sysdeps/ieee754/dbl-64/w_log2.c: New file.
+	* sysdeps/m68k/m680x0/fpu/w_log2.c: New file.
+	* sysdeps/mach/hurd/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
+
+2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
 	* math/Versions (GLIBC_2.29): Add log.
 	* math/w_log_compat.c (__log_compat): Change to versioned compat
 	symbol.
diff --git a/math/Versions b/math/Versions
index 87aa659..a887602 100644
--- a/math/Versions
+++ b/math/Versions
@@ -577,6 +577,6 @@ libm {
   }
   GLIBC_2.29 {
     # No SVID compatible error handling.
-    exp; exp2; log;
+    exp; exp2; log; log2;
   }
 }
diff --git a/math/w_log2.c b/math/w_log2.c
new file mode 100644
index 0000000..148d5d4
--- /dev/null
+++ b/math/w_log2.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-double.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, __log2, log2, GLIBC_2_29);
+libm_alias_double_other (__log2, log2)
diff --git a/math/w_log2_compat.c b/math/w_log2_compat.c
index 61e7170..4459ce2 100644
--- a/math/w_log2_compat.c
+++ b/math/w_log2_compat.c
@@ -23,10 +23,12 @@
 #include <libm-alias-double.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29) \
+			 || defined NO_LONG_DOUBLE \
+			 || defined LONG_DOUBLE_COMPAT)
 /* wrapper log2(x) */
 double
-__log2 (double x)
+__log2_compat (double x)
 {
   if (__builtin_expect (islessequal (x, 0.0), 0) && _LIB_VERSION != _IEEE_)
     {
@@ -44,5 +46,17 @@ __log2 (double x)
 
   return  __ieee754_log2 (x);
 }
-libm_alias_double (__log2, log2)
+# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29)
+compat_symbol (libm, __log2_compat, log2, GLIBC_2_1);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__log2_compat, log2l)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+/* Work around gas bug "multiple versions for symbol".  */
+weak_alias (__log2_compat, __log2_compat_alias)
+
+LONG_DOUBLE_COMPAT_CHOOSE_libm_log2l (
+  compat_symbol (libm, __log2_compat_alias, log2l, FIRST_VERSION_libm_log2l), );
+# endif
 #endif
diff --git a/sysdeps/i386/fpu/w_log2.c b/sysdeps/i386/fpu/w_log2.c
new file mode 100644
index 0000000..eafbe5c
--- /dev/null
+++ b/sysdeps/i386/fpu/w_log2.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_log2.c>
diff --git a/sysdeps/ia64/fpu/e_log2.S b/sysdeps/ia64/fpu/e_log2.S
index 17893a2..eecd72a 100644
--- a/sysdeps/ia64/fpu/e_log2.S
+++ b/sysdeps/ia64/fpu/e_log2.S
@@ -385,7 +385,7 @@ LOCAL_OBJECT_END(T_table)
 
 
 .section .text
-GLOBAL_LIBM_ENTRY(log2)
+WEAK_LIBM_ENTRY(log2)
 
 { .mfi
   alloc r32=ar.pfs,1,4,4,0
@@ -653,8 +653,14 @@ SPECIAL_LOG2:
   br.ret.sptk b0;;
 }
 
-GLOBAL_LIBM_END(log2)
-libm_alias_double_other (log2, log2)
+WEAK_LIBM_END(log2)
+libm_alias_double_other (__log2, log2)
+#ifdef SHARED
+.symver log2,log2@@GLIBC_2.29
+.weak __log2_compat
+.set __log2_compat,__log2
+.symver __log2_compat,log2@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
diff --git a/sysdeps/ieee754/dbl-64/e_log2.c b/sysdeps/ieee754/dbl-64/e_log2.c
index 916eb46..6bb1c05 100644
--- a/sysdeps/ieee754/dbl-64/e_log2.c
+++ b/sysdeps/ieee754/dbl-64/e_log2.c
@@ -18,6 +18,9 @@
 
 #include <math.h>
 #include <stdint.h>
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#include <libm-alias-double.h>
 #include "math_config.h"
 
 #define T __log2_data.tab
@@ -37,7 +40,7 @@ top16 (double x)
 }
 
 double
-__ieee754_log2 (double x)
+__log2 (double x)
 {
   /* double_t for better performance on targets with FLT_EVAL_METHOD==2.  */
   double_t z, r, r2, r4, y, invc, logc, kd, hi, lo, t1, t2, t3, p;
@@ -136,6 +139,13 @@ __ieee754_log2 (double x)
   y = lo + r2 * p + hi;
   return y;
 }
-#ifndef __ieee754_log2
-strong_alias (__ieee754_log2, __log2_finite)
+#ifndef __log2
+strong_alias (__log2, __ieee754_log2)
+strong_alias (__log2, __log2_finite)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __log2, log2, GLIBC_2_29);
+libm_alias_double_other (__log2, log2)
+# else
+libm_alias_double (__log2, log2)
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/w_log2.c b/sysdeps/ieee754/dbl-64/w_log2.c
new file mode 100644
index 0000000..1cc8931
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_log2.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_log2.c b/sysdeps/m68k/m680x0/fpu/w_log2.c
new file mode 100644
index 0000000..eafbe5c
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_log2.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_log2.c>
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index 144bdb9..f319580 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1071,3 +1071,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 6785ac6..c01ff24 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1035,3 +1035,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 132ea00..f5ec874 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1046,6 +1046,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
 GLIBC_2.3.4 __c1_cacoshf F
diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist
index 45a2337..9b7d87b 100644
--- a/sysdeps/unix/sysv/linux/arm/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libm.abilist
@@ -456,6 +456,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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 b0689ff..d193f99 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -767,4 +767,5 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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 3afd304..eae2c55 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1078,3 +1078,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
index 637fd15..9796e8d 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -1008,3 +1008,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 45a2337..9b7d87b 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -456,6 +456,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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 b1689c2..f73ad1a 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -807,3 +807,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
index ae59dfb..dcb7dbb 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
@@ -768,3 +768,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 38c6651..1146e2d 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -767,4 +767,5 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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 09777c7..d9c830d 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1035,3 +1035,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index 59fc049..0902ca0 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -768,3 +768,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index 7788f76..3e9e5e7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -813,6 +813,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index cae3604..7a3c6be 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -812,6 +812,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
index 732825e..d50c82c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
@@ -1079,3 +1079,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
index 59f083d..cbf2ad3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
@@ -491,6 +491,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
 GLIBC_2.3 _LIB_VERSION D 0x4
 GLIBC_2.3 __clog10 F
 GLIBC_2.3 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 5a68b27..382455c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1036,6 +1036,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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 364f7e6..92b794b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1036,6 +1036,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist
index 489f34d..3320f14 100644
--- a/sysdeps/unix/sysv/linux/sh/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libm.abilist
@@ -767,4 +767,5 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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 288986f..2a10a0f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1043,6 +1043,7 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 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 11fb7e4..ebbc58d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1035,3 +1035,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 9fd399d..3e02619 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1069,3 +1069,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index bbea575..03cd62f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1069,3 +1069,4 @@ GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
 GLIBC_2.29 log F
+GLIBC_2.29 log2 F

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f29b7c492d8a06581cf1b573b7e5907daa8c139c

commit f29b7c492d8a06581cf1b573b7e5907daa8c139c
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Fri Apr 20 18:06:44 2018 +0100

    Remove the error handling wrapper from log
    
    Introduce new log symbol version that doesn't do SVID compatible error
    handling.  The standard errno and fp exception based error handling is
    inline in the new code and does not have significant overhead.
    
    The wrapper is disabled for sysdeps/ieee754/dbl-64 by using empty
    w_log.c and enabled for targets with their own log implementation by
    including math/w_log.c.
    
    The compatibility symbol version still uses the wrapper with SVID error
    handling around the new code.  There is no new symbol version nor
    compatibility code on !LIBM_SVID_COMPAT targets (e.g. riscv).
    
    On targets where previously logl was an alias of log, now it points to
    the compatibility symbol with the wrapper, because it still need the
    SVID compatible error handling.  This affects NO_LONG_DOUBLE (e.g. arm)
    and LONG_DOUBLE_COMPAT (e.g. alpha) targets as well.
    
    The __log_finite symbol is now an alias of log.  Both __log_finite and
    log set errno and thus not const functions.
    
    The ia64 asm is changed so the compat and new symbol versions map to the
    same address.
    
    On x86_64 #include <math.h> was added before macro definitions that may
    affect that header.
    
    Tested with build-many-glibcs.py.
    
    	* math/Versions (GLIBC_2.29): Add log.
    	* math/w_log_compat.c (__log_compat): Change to versioned compat
    	symbol.
    	* math/w_log.c: New file.
    	* sysdeps/i386/fpu/w_log.c: New file.
    	* sysdeps/ia64/fpu/e_log.S: Update.
    	* sysdeps/ieee754/dbl-64/e_log.c (__ieee754_log): Rename to __log
    	and add necessary aliases.
    	* sysdeps/ieee754/dbl-64/w_log.c: New file.
    	* sysdeps/m68k/m680x0/fpu/w_log.c: New file.
    	* sysdeps/mach/hurd/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
    	* sysdeps/x86_64/fpu/multiarch/e_log-avx.c (__ieee754_log): Rename to
    	__log.
    	* sysdeps/x86_64/fpu/multiarch/e_log-fma.c (__ieee754_log): Likewise.
    	* sysdeps/x86_64/fpu/multiarch/e_log-fma4.c (__ieee754_log): Likewise.
    	* sysdeps/x86_64/fpu/multiarch/e_log.c (__ieee754_log): Likewise.
    	* sysdeps/x86_64/fpu/multiarch/w_log.c: New file.

diff --git a/ChangeLog b/ChangeLog
index 5968aa4..206d216 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,48 @@
 2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
+	* math/Versions (GLIBC_2.29): Add log.
+	* math/w_log_compat.c (__log_compat): Change to versioned compat
+	symbol.
+	* math/w_log.c: New file.
+	* sysdeps/i386/fpu/w_log.c: New file.
+	* sysdeps/ia64/fpu/e_log.S: Update.
+	* sysdeps/ieee754/dbl-64/e_log.c (__ieee754_log): Rename to __log
+	and add necessary aliases.
+	* sysdeps/ieee754/dbl-64/w_log.c: New file.
+	* sysdeps/m68k/m680x0/fpu/w_log.c: New file.
+	* sysdeps/mach/hurd/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
+	* sysdeps/x86_64/fpu/multiarch/e_log-avx.c (__ieee754_log): Rename to
+	__log.
+	* sysdeps/x86_64/fpu/multiarch/e_log-fma.c (__ieee754_log): Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_log-fma4.c (__ieee754_log): Likewise.
+	* sysdeps/x86_64/fpu/multiarch/e_log.c (__ieee754_log): Likewise.
+	* sysdeps/x86_64/fpu/multiarch/w_log.c: New file.
+
+2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
 	* math/Versions (GLIBC_2.29): Add exp and exp2.
 	* math/w_exp2_compat.c (__exp2_compat): Change to versioned compat
 	symbol, handle NO_LONG_DOUBLE and LONG_DOUBLE_COMPAT explicitly.
diff --git a/math/Versions b/math/Versions
index 29e02d6..87aa659 100644
--- a/math/Versions
+++ b/math/Versions
@@ -577,6 +577,6 @@ libm {
   }
   GLIBC_2.29 {
     # No SVID compatible error handling.
-    exp; exp2;
+    exp; exp2; log;
   }
 }
diff --git a/math/w_log.c b/math/w_log.c
new file mode 100644
index 0000000..50065e3
--- /dev/null
+++ b/math/w_log.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-double.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, __log, log, GLIBC_2_29);
+libm_alias_double_other (__log, log)
diff --git a/math/w_log_compat.c b/math/w_log_compat.c
index 5413b8e..d99dd4f 100644
--- a/math/w_log_compat.c
+++ b/math/w_log_compat.c
@@ -23,10 +23,12 @@
 #include <libm-alias-double.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29) \
+			 || defined NO_LONG_DOUBLE \
+			 || defined LONG_DOUBLE_COMPAT)
 /* wrapper log(x) */
 double
-__log (double x)
+__log_compat (double x)
 {
   if (__builtin_expect (islessequal (x, 0.0), 0) && _LIB_VERSION != _IEEE_)
     {
@@ -44,5 +46,17 @@ __log (double x)
 
   return  __ieee754_log (x);
 }
-libm_alias_double (__log, log)
+# if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29)
+compat_symbol (libm, __log_compat, log, GLIBC_2_0);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__log_compat, logl)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+/* Work around gas bug "multiple versions for symbol".  */
+weak_alias (__log_compat, __log_compat_alias)
+
+LONG_DOUBLE_COMPAT_CHOOSE_libm_logl (
+  compat_symbol (libm, __log_compat_alias, logl, FIRST_VERSION_libm_logl), );
+# endif
 #endif
diff --git a/sysdeps/i386/fpu/w_log.c b/sysdeps/i386/fpu/w_log.c
new file mode 100644
index 0000000..9b2b018
--- /dev/null
+++ b/sysdeps/i386/fpu/w_log.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_log.c>
diff --git a/sysdeps/ia64/fpu/e_log.S b/sysdeps/ia64/fpu/e_log.S
index 0b63ec4..7ee2392 100644
--- a/sysdeps/ia64/fpu/e_log.S
+++ b/sysdeps/ia64/fpu/e_log.S
@@ -1670,6 +1670,12 @@ log_libm_err:
 };;
 GLOBAL_IEEE754_END(log)
 libm_alias_double_other (__log, log)
+#ifdef SHARED
+.symver log,log@@GLIBC_2.29
+.weak __log_compat
+.set __log_compat,__log
+.symver __log_compat,log@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
diff --git a/sysdeps/ieee754/dbl-64/e_log.c b/sysdeps/ieee754/dbl-64/e_log.c
index a56b714..648fe14 100644
--- a/sysdeps/ieee754/dbl-64/e_log.c
+++ b/sysdeps/ieee754/dbl-64/e_log.c
@@ -18,6 +18,9 @@
 
 #include <math.h>
 #include <stdint.h>
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#include <libm-alias-double.h>
 #include "math_config.h"
 
 #define T __log_data.tab
@@ -42,7 +45,7 @@ top16 (double x)
 
 double
 SECTION
-__ieee754_log (double x)
+__log (double x)
 {
   /* double_t for better performance on targets with FLT_EVAL_METHOD==2.  */
   double_t w, z, r, r2, r3, y, invc, logc, kd, hi, lo;
@@ -127,6 +130,13 @@ __ieee754_log (double x)
   y = lo + r2 * A[0] + r * r2 * (A[1] + r * A[2] + r2 * (A[3] + r * A[4])) + hi;
   return y;
 }
-#ifndef __ieee754_log
-strong_alias (__ieee754_log, __log_finite)
+#ifndef __log
+strong_alias (__log, __ieee754_log)
+strong_alias (__log, __log_finite)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __log, log, GLIBC_2_29);
+libm_alias_double_other (__log, log)
+# else
+libm_alias_double (__log, log)
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/w_log.c b/sysdeps/ieee754/dbl-64/w_log.c
new file mode 100644
index 0000000..1cc8931
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_log.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_log.c b/sysdeps/m68k/m680x0/fpu/w_log.c
new file mode 100644
index 0000000..9b2b018
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_log.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_log.c>
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index ff0a06f..144bdb9 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1070,3 +1070,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index cfb8f7d..6785ac6 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1034,3 +1034,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 8a7f92f..132ea00 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1045,6 +1045,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
 GLIBC_2.3.4 __c1_cacoshf F
diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist
index a4a2c9b..45a2337 100644
--- a/sysdeps/unix/sysv/linux/arm/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libm.abilist
@@ -455,6 +455,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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 c665d65..b0689ff 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -766,4 +766,5 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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 6728695..3afd304 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1077,3 +1077,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
index 3a5d2fb..637fd15 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -1007,3 +1007,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index a4a2c9b..45a2337 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -455,6 +455,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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 84a580a..b1689c2 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -806,3 +806,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
index f2c3143..ae59dfb 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
@@ -767,3 +767,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 7ecaeea..38c6651 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -766,4 +766,5 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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 c3679e8..09777c7 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1034,3 +1034,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index 2964682..59fc049 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -767,3 +767,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index f7ceb78..7788f76 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -812,6 +812,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index 7e1c1b5..cae3604 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -811,6 +811,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
index de18417..732825e 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
@@ -1078,3 +1078,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
index 6dd35db..59f083d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
@@ -490,6 +490,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
 GLIBC_2.3 _LIB_VERSION D 0x4
 GLIBC_2.3 __clog10 F
 GLIBC_2.3 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index b33b214..5a68b27 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1035,6 +1035,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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 567059b..364f7e6 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1035,6 +1035,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist
index baea131..489f34d 100644
--- a/sysdeps/unix/sysv/linux/sh/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libm.abilist
@@ -766,4 +766,5 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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 7249346..288986f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1042,6 +1042,7 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log 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 629fb08..11fb7e4 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1034,3 +1034,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index ac70310..9fd399d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1068,3 +1068,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index 55098e0..bbea575 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1068,3 +1068,4 @@ GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
 GLIBC_2.29 exp F
 GLIBC_2.29 exp2 F
+GLIBC_2.29 log F
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log-avx.c b/sysdeps/x86_64/fpu/multiarch/e_log-avx.c
index b22a576..b9f5be5 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log-avx.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log-avx.c
@@ -1,4 +1,5 @@
-#define __ieee754_log __ieee754_log_avx
+#include <math.h>
+#define __log __ieee754_log_avx
 #define SECTION __attribute__ ((section (".text.avx")))
 
 #include <sysdeps/ieee754/dbl-64/e_log.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log-fma.c b/sysdeps/x86_64/fpu/multiarch/e_log-fma.c
index bce0ee0..13b0a2a 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log-fma.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log-fma.c
@@ -1,4 +1,5 @@
-#define __ieee754_log __ieee754_log_fma
+#include <math.h>
+#define __log __ieee754_log_fma
 #define SECTION __attribute__ ((section (".text.fma")))
 
 #include <sysdeps/ieee754/dbl-64/e_log.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_log-fma4.c
index f458f9c..16ef3ab 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log-fma4.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log-fma4.c
@@ -1,4 +1,5 @@
-#define __ieee754_log __ieee754_log_fma4
+#include <math.h>
+#define __log __ieee754_log_fma4
 #define SECTION __attribute__ ((section (".text.fma4")))
 
 #include <sysdeps/ieee754/dbl-64/e_log.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log.c b/sysdeps/x86_64/fpu/multiarch/e_log.c
index e0a1b02..0cd2072 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log.c
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <math.h>
+
 extern double __redirect_ieee754_log (double);
 
 #define SYMBOL_NAME ieee754_log
@@ -25,5 +27,5 @@ libc_ifunc_redirected (__redirect_ieee754_log, __ieee754_log,
 		       IFUNC_SELECTOR ());
 strong_alias (__ieee754_log, __log_finite)
 
-#define __ieee754_log __ieee754_log_sse2
+#define __log __ieee754_log_sse2
 #include <sysdeps/ieee754/dbl-64/e_log.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/w_log.c b/sysdeps/x86_64/fpu/multiarch/w_log.c
new file mode 100644
index 0000000..9b2b018
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/w_log.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_log.c>

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=c20a10561adab4aeb544e777cbb86679bd5f876d

commit c20a10561adab4aeb544e777cbb86679bd5f876d
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Thu Feb 22 11:34:40 2018 +0000

    Remove the error handling wrapper from exp and exp2
    
    Introduce new exp and exp2 symbol version that don't do SVID compatible
    error handling.  The standard errno and fp exception based error handling
    is inline in the new code and does not have significant overhead.
    
    The double precision wrappers are disabled for sysdeps/ieee754/dbl-64
    by using empty w_exp.c and w_exp2.c files, the math/w_exp.c and
    math/w_exp2.c files use the wrapper template and can be included by
    targets that have their own exp and exp2 implementations or use ifunc
    on the glibc internal __ieee754_exp symbol.
    
    The compatibility symbol versions still use the wrapper with SVID error
    handling around the new code.  There is no new symbol version nor
    compatibility code on !LIBM_SVID_COMPAT targets (e.g. riscv).
    
    On targets where previously expl and exp2l were aliases of exp and exp2,
    now they point to the compatibility symbols with the wrapper, because
    they still need the SVID compatible error handling.  This affects
    NO_LONG_DOUBLE (e.g arm) and LONG_DOUBLE_COMPAT (e.g. alpha) targets
    as well.
    
    The _finite symbols are now aliases of the standard symbols (they have
    no performance advantage anymore).  Both the standard symbols and
    _finite symbols set errno and thus not const functions.
    
    The ia64 asm is changed so the compat and new symbol versions map to the
    same address.
    
    On x86_64 #include <math.h> was added before macro definitions that may
    affect that header (the new macro name is __exp instead of __ieee754_exp
    which breaks some math.h macros).
    
    Tested with build-many-glibcs.py.
    
    	* math/Versions (GLIBC_2.29): Add exp and exp2.
    	* math/w_exp2_compat.c (__exp2_compat): Change to versioned compat
    	symbol, handle NO_LONG_DOUBLE and LONG_DOUBLE_COMPAT explicitly.
    	* math/w_exp_compat.c (__exp_compat): Likewise.
    	* math/w_exp.c: New file.
    	* math/w_exp2.c: New file.
    	* sysdeps/i386/fpu/w_exp.c: New file.
    	* sysdeps/i386/fpu/w_exp2.c: New file.
    	* sysdeps/ia64/fpu/e_exp.S: Add versioned symbols.
    	* sysdeps/ia64/fpu/e_exp2.S: Likewise.
    	* sysdeps/ieee754/dbl-64/e_exp.c (__ieee754_exp): Rename to __exp
    	and add necessary aliases.
    	* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Rename to __exp2
    	and add necessary aliases.
    	* sysdeps/ieee754/dbl-64/w_exp.c: New file.
    	* sysdeps/ieee754/dbl-64/w_exp2.c: New file.
    	* sysdeps/m68k/m680x0/fpu/w_exp.c: New file.
    	* sysdeps/m68k/m680x0/fpu/w_exp2.c: New file.
    	* sysdeps/mach/hurd/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
    	* sysdeps/x86_64/fpu/multiarch/e_exp-avx.c (__exp1): Remove.
    	(__ieee754_exp): Rename to __exp.
    	* sysdeps/x86_64/fpu/multiarch/e_exp-fma.c (__exp1): Remove.
    	(__ieee754_exp): Rename to __exp.
    	* sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c (__exp1): Remove.
    	(__ieee754_exp): Rename to __exp.
    	* sysdeps/x86_64/fpu/multiarch/e_exp.c (__ieee754_exp): Rename to
    	__exp.
    	* sysdeps/x86_64/fpu/multiarch/w_exp.c: New file.

diff --git a/ChangeLog b/ChangeLog
index 9cdd3ba..5968aa4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,57 @@
+2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* math/Versions (GLIBC_2.29): Add exp and exp2.
+	* math/w_exp2_compat.c (__exp2_compat): Change to versioned compat
+	symbol, handle NO_LONG_DOUBLE and LONG_DOUBLE_COMPAT explicitly.
+	* math/w_exp_compat.c (__exp_compat): Likewise.
+	* math/w_exp.c: New file.
+	* math/w_exp2.c: New file.
+	* sysdeps/i386/fpu/w_exp.c: New file.
+	* sysdeps/i386/fpu/w_exp2.c: New file.
+	* sysdeps/ia64/fpu/e_exp.S: Add versioned symbols.
+	* sysdeps/ia64/fpu/e_exp2.S: Likewise.
+	* sysdeps/ieee754/dbl-64/e_exp.c (__ieee754_exp): Rename to __exp
+	and add necessary aliases.
+	* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Rename to __exp2
+	and add necessary aliases.
+	* sysdeps/ieee754/dbl-64/w_exp.c: New file.
+	* sysdeps/ieee754/dbl-64/w_exp2.c: New file.
+	* sysdeps/m68k/m680x0/fpu/w_exp.c: New file.
+	* sysdeps/m68k/m680x0/fpu/w_exp2.c: New file.
+	* sysdeps/mach/hurd/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
+	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
+	* sysdeps/x86_64/fpu/multiarch/e_exp-avx.c (__exp1): Remove.
+	(__ieee754_exp): Rename to __exp.
+	* sysdeps/x86_64/fpu/multiarch/e_exp-fma.c (__exp1): Remove.
+	(__ieee754_exp): Rename to __exp.
+	* sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c (__exp1): Remove.
+	(__ieee754_exp): Rename to __exp.
+	* sysdeps/x86_64/fpu/multiarch/e_exp.c (__ieee754_exp): Rename to
+	__exp.
+	* sysdeps/x86_64/fpu/multiarch/w_exp.c: New file.
+
 2018-11-20  DJ Delorie  <dj@redhat.com>
 
 	* malloc/malloc.c (tcache_entry): Add key field.
diff --git a/math/Versions b/math/Versions
index b5a2500..29e02d6 100644
--- a/math/Versions
+++ b/math/Versions
@@ -575,4 +575,8 @@ libm {
     f32xsubf64x; f32xsubf128; f64subf64x; f64subf128;
     f64xsubf128;
   }
+  GLIBC_2.29 {
+    # No SVID compatible error handling.
+    exp; exp2;
+  }
 }
diff --git a/math/w_exp.c b/math/w_exp.c
new file mode 100644
index 0000000..9a18bd5
--- /dev/null
+++ b/math/w_exp.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-double.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, __exp, exp, GLIBC_2_29);
+libm_alias_double_other (__exp, exp)
diff --git a/math/w_exp2.c b/math/w_exp2.c
new file mode 100644
index 0000000..6c84871
--- /dev/null
+++ b/math/w_exp2.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-double.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, __exp2, exp2, GLIBC_2_29);
+libm_alias_double_other (__exp2, exp2)
diff --git a/math/w_exp2_compat.c b/math/w_exp2_compat.c
index 7ab6182..567383d 100644
--- a/math/w_exp2_compat.c
+++ b/math/w_exp2_compat.c
@@ -7,9 +7,11 @@
 #include <math-svid-compat.h>
 #include <libm-alias-double.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29) \
+			 || defined NO_LONG_DOUBLE \
+			 || defined LONG_DOUBLE_COMPAT)
 double
-__exp2 (double x)
+__exp2_compat (double x)
 {
   double z = __ieee754_exp2 (x);
   if (__builtin_expect (!isfinite (z) || z == 0, 0)
@@ -19,5 +21,17 @@ __exp2 (double x)
 
   return z;
 }
-libm_alias_double (__exp2, exp2)
+# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29)
+compat_symbol (libm, __exp2_compat, exp2, GLIBC_2_1);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__exp2_compat, exp2l)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+/* Work around gas bug "multiple versions for symbol".  */
+weak_alias (__exp2_compat, __exp2_compat_alias)
+
+LONG_DOUBLE_COMPAT_CHOOSE_libm_exp2l (
+  compat_symbol (libm, __exp2_compat_alias, exp2l, FIRST_VERSION_libm_exp2l), );
+# endif
 #endif
diff --git a/math/w_exp_compat.c b/math/w_exp_compat.c
index ccda100..df0137c 100644
--- a/math/w_exp_compat.c
+++ b/math/w_exp_compat.c
@@ -21,10 +21,12 @@
 #include <math-svid-compat.h>
 #include <libm-alias-double.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29) \
+			 || defined NO_LONG_DOUBLE \
+			 || defined LONG_DOUBLE_COMPAT)
 /* wrapper exp */
 double
-__exp (double x)
+__exp_compat (double x)
 {
   double z = __ieee754_exp (x);
   if (__builtin_expect (!isfinite (z) || z == 0, 0)
@@ -33,6 +35,17 @@ __exp (double x)
 
   return z;
 }
-libm_hidden_def (__exp)
-libm_alias_double (__exp, exp)
+# if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29)
+compat_symbol (libm, __exp_compat, exp, GLIBC_2_0);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__exp_compat, expl)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+/* Work around gas bug "multiple versions for symbol".  */
+weak_alias (__exp_compat, __exp_compat_alias)
+
+LONG_DOUBLE_COMPAT_CHOOSE_libm_expl (
+  compat_symbol (libm, __exp_compat_alias, expl, FIRST_VERSION_libm_expl), );
+# endif
 #endif
diff --git a/sysdeps/i386/fpu/w_exp.c b/sysdeps/i386/fpu/w_exp.c
new file mode 100644
index 0000000..27eee98
--- /dev/null
+++ b/sysdeps/i386/fpu/w_exp.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp.c>
diff --git a/sysdeps/i386/fpu/w_exp2.c b/sysdeps/i386/fpu/w_exp2.c
new file mode 100644
index 0000000..e0636a7
--- /dev/null
+++ b/sysdeps/i386/fpu/w_exp2.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp2.c>
diff --git a/sysdeps/ia64/fpu/e_exp.S b/sysdeps/ia64/fpu/e_exp.S
index c8cebeb..4774a43 100644
--- a/sysdeps/ia64/fpu/e_exp.S
+++ b/sysdeps/ia64/fpu/e_exp.S
@@ -739,6 +739,12 @@ EXP_UNDERFLOW_ZERO:
 
 GLOBAL_IEEE754_END(exp)
 libm_alias_double_other (__exp, exp)
+#ifdef SHARED
+.symver exp,exp@@GLIBC_2.29
+.weak __exp_compat
+.set __exp_compat,__exp
+.symver __exp_compat,exp@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
diff --git a/sysdeps/ia64/fpu/e_exp2.S b/sysdeps/ia64/fpu/e_exp2.S
index 1871186..97b6926 100644
--- a/sysdeps/ia64/fpu/e_exp2.S
+++ b/sysdeps/ia64/fpu/e_exp2.S
@@ -227,7 +227,7 @@ LOCAL_OBJECT_END(T_table)
 
 
 .section .text
-GLOBAL_LIBM_ENTRY(exp2)
+WEAK_LIBM_ENTRY(exp2)
 
 
 {.mfi
@@ -493,8 +493,14 @@ OUT_RANGE_exp2:
 }
 ;;
 
-GLOBAL_LIBM_END(exp2)
-libm_alias_double_other (exp2, exp2)
+WEAK_LIBM_END(exp2)
+libm_alias_double_other (__exp2, exp2)
+#ifdef SHARED
+.symver exp2,exp2@@GLIBC_2.29
+.weak __exp2_compat
+.set __exp2_compat,__exp2
+.symver __exp2_compat,exp2@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
diff --git a/sysdeps/ieee754/dbl-64/e_exp.c b/sysdeps/ieee754/dbl-64/e_exp.c
index 37fdafc..9e55c50 100644
--- a/sysdeps/ieee754/dbl-64/e_exp.c
+++ b/sysdeps/ieee754/dbl-64/e_exp.c
@@ -20,6 +20,9 @@
 #include <stdint.h>
 #include <math-barriers.h>
 #include <math-narrow-eval.h>
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#include <libm-alias-double.h>
 #include "math_config.h"
 
 #define N (1 << EXP_TABLE_BITS)
@@ -91,7 +94,7 @@ top12 (double x)
 
 double
 SECTION
-__ieee754_exp (double x)
+__exp (double x)
 {
   uint32_t abstop;
   uint64_t ki, idx, top, sbits;
@@ -153,6 +156,14 @@ __ieee754_exp (double x)
      is no spurious underflow here even without fma.  */
   return scale + scale * tmp;
 }
-#ifndef __ieee754_exp
-strong_alias (__ieee754_exp, __exp_finite)
+#ifndef __exp
+hidden_def (__exp)
+strong_alias (__exp, __ieee754_exp)
+strong_alias (__exp, __exp_finite)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __exp, exp, GLIBC_2_29);
+libm_alias_double_other (__exp, exp)
+# else
+libm_alias_double (__exp, exp)
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c
index 96afcf9..48741e8 100644
--- a/sysdeps/ieee754/dbl-64/e_exp2.c
+++ b/sysdeps/ieee754/dbl-64/e_exp2.c
@@ -20,6 +20,9 @@
 #include <stdint.h>
 #include <math-barriers.h>
 #include <math-narrow-eval.h>
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#include <libm-alias-double.h>
 #include "math_config.h"
 
 #define N (1 << EXP_TABLE_BITS)
@@ -84,7 +87,7 @@ top12 (double x)
 }
 
 double
-__ieee754_exp2 (double x)
+__exp2 (double x)
 {
   uint32_t abstop;
   uint64_t ki, idx, top, sbits;
@@ -140,6 +143,13 @@ __ieee754_exp2 (double x)
      is no spurious underflow here even without fma.  */
   return scale + scale * tmp;
 }
-#ifndef __ieee754_exp2
-strong_alias (__ieee754_exp2, __exp2_finite)
+#ifndef __exp2
+strong_alias (__exp2, __ieee754_exp2)
+strong_alias (__exp2, __exp2_finite)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __exp2, exp2, GLIBC_2_29);
+libm_alias_double_other (__exp2, exp2)
+# else
+libm_alias_double (__exp2, exp2)
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/w_exp.c b/sysdeps/ieee754/dbl-64/w_exp.c
new file mode 100644
index 0000000..1cc8931
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_exp.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/ieee754/dbl-64/w_exp2.c b/sysdeps/ieee754/dbl-64/w_exp2.c
new file mode 100644
index 0000000..1cc8931
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_exp2.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_exp.c b/sysdeps/m68k/m680x0/fpu/w_exp.c
new file mode 100644
index 0000000..27eee98
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_exp.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp.c>
diff --git a/sysdeps/m68k/m680x0/fpu/w_exp2.c b/sysdeps/m68k/m680x0/fpu/w_exp2.c
new file mode 100644
index 0000000..e0636a7
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_exp2.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp2.c>
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index fd0a277..ff0a06f 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1068,3 +1068,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 37e99a9..cfb8f7d 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1032,3 +1032,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 2773d61..8a7f92f 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1043,6 +1043,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
 GLIBC_2.3.4 __c1_cacoshf F
diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist
index e126eb0..a4a2c9b 100644
--- a/sysdeps/unix/sysv/linux/arm/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libm.abilist
@@ -453,6 +453,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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 679bbfb..c665d65 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -764,4 +764,6 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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 3110c1f..6728695 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1075,3 +1075,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
index 33a99ff..3a5d2fb 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -1005,3 +1005,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index e126eb0..a4a2c9b 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -453,6 +453,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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 40ac529..84a580a 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -804,3 +804,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
index 4a2c2e6..f2c3143 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
@@ -765,3 +765,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index ff011f8..7ecaeea 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -764,4 +764,6 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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 c19ee98..c3679e8 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1032,3 +1032,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index 2ed649a..2964682 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -765,3 +765,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index 511b24b..f7ceb78 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -810,6 +810,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index a6e4e4e..7e1c1b5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -809,6 +809,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
index 1e1f2b8..de18417 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
@@ -1076,3 +1076,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
index 331449d..6dd35db 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
@@ -488,6 +488,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.3 _LIB_VERSION D 0x4
 GLIBC_2.3 __clog10 F
 GLIBC_2.3 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 643aa55..b33b214 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1033,6 +1033,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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 8cc5fdf..567059b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1033,6 +1033,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist
index 43525fc..baea131 100644
--- a/sysdeps/unix/sysv/linux/sh/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libm.abilist
@@ -764,4 +764,6 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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 fd97367..7249346 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1040,6 +1040,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 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 470e64f..629fb08 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1032,3 +1032,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 4a442c3..ac70310 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1066,3 +1066,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index f1fc0e9..55098e0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1066,3 +1066,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp-avx.c b/sysdeps/x86_64/fpu/multiarch/e_exp-avx.c
index afd9174..9044823 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp-avx.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp-avx.c
@@ -1,5 +1,5 @@
-#define __ieee754_exp __ieee754_exp_avx
-#define __exp1 __exp1_avx
+#include <math.h>
+#define __exp __ieee754_exp_avx
 #define SECTION __attribute__ ((section (".text.avx")))
 
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp-fma.c b/sysdeps/x86_64/fpu/multiarch/e_exp-fma.c
index 765b1b9..9d6e544 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp-fma.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp-fma.c
@@ -1,5 +1,5 @@
-#define __ieee754_exp __ieee754_exp_fma
-#define __exp1 __exp1_fma
+#include <math.h>
+#define __exp __ieee754_exp_fma
 #define SECTION __attribute__ ((section (".text.fma")))
 
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c
index 9ac7aca..25643b6 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c
@@ -1,5 +1,5 @@
-#define __ieee754_exp __ieee754_exp_fma4
-#define __exp1 __exp1_fma4
+#include <math.h>
+#define __exp __ieee754_exp_fma4
 #define SECTION __attribute__ ((section (".text.fma4")))
 
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp.c b/sysdeps/x86_64/fpu/multiarch/e_exp.c
index 7cd7d17..26e614f 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp.c
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <math.h>
+
 extern double __redirect_ieee754_exp (double);
 
 #define SYMBOL_NAME ieee754_exp
@@ -25,5 +27,5 @@ libc_ifunc_redirected (__redirect_ieee754_exp, __ieee754_exp,
 		       IFUNC_SELECTOR ());
 strong_alias (__ieee754_exp, __exp_finite)
 
-#define __ieee754_exp __ieee754_exp_sse2
+#define __exp __ieee754_exp_sse2
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/w_exp.c b/sysdeps/x86_64/fpu/multiarch/w_exp.c
new file mode 100644
index 0000000..27eee98
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/w_exp.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp.c>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |  176 ++++++++++++++++++++
 math/Versions                                      |    4 +
 math/w_exp.c                                       |    8 +
 math/w_exp2.c                                      |    8 +
 math/w_exp2_compat.c                               |   20 ++-
 math/w_exp_compat.c                                |   21 ++-
 math/w_log.c                                       |    8 +
 math/w_log2.c                                      |    8 +
 math/w_log2_compat.c                               |   20 ++-
 math/w_log_compat.c                                |   20 ++-
 math/w_pow.c                                       |    8 +
 math/w_pow_compat.c                                |   20 ++-
 sysdeps/i386/fpu/w_exp.c                           |    1 +
 sysdeps/i386/fpu/w_exp2.c                          |    1 +
 sysdeps/i386/fpu/w_log.c                           |    1 +
 sysdeps/i386/fpu/w_log2.c                          |    1 +
 sysdeps/i386/fpu/w_pow.c                           |    1 +
 sysdeps/ia64/fpu/e_exp.S                           |    6 +
 sysdeps/ia64/fpu/e_exp2.S                          |   12 +-
 sysdeps/ia64/fpu/e_log.S                           |    6 +
 sysdeps/ia64/fpu/e_log2.S                          |   12 +-
 sysdeps/ia64/fpu/e_pow.S                           |   12 +-
 sysdeps/ieee754/dbl-64/e_exp.c                     |   17 ++-
 sysdeps/ieee754/dbl-64/e_exp2.c                    |   16 ++-
 sysdeps/ieee754/dbl-64/e_log.c                     |   16 ++-
 sysdeps/ieee754/dbl-64/e_log2.c                    |   16 ++-
 sysdeps/ieee754/dbl-64/e_pow.c                     |   16 ++-
 sysdeps/{ia64/fpu => ieee754/dbl-64}/w_exp.c       |    0
 sysdeps/{ia64/fpu => ieee754/dbl-64}/w_exp2.c      |    0
 sysdeps/{ia64/fpu => ieee754/dbl-64}/w_log.c       |    0
 sysdeps/{ia64/fpu => ieee754/dbl-64}/w_log2.c      |    0
 sysdeps/{ia64/fpu => ieee754/dbl-64}/w_pow.c       |    0
 sysdeps/m68k/m680x0/fpu/w_exp.c                    |    1 +
 sysdeps/m68k/m680x0/fpu/w_exp2.c                   |    1 +
 sysdeps/m68k/m680x0/fpu/w_log.c                    |    1 +
 sysdeps/m68k/m680x0/fpu/w_log2.c                   |    1 +
 sysdeps/m68k/m680x0/fpu/w_pow.c                    |    1 +
 sysdeps/mach/hurd/i386/libm.abilist                |    5 +
 sysdeps/unix/sysv/linux/aarch64/libm.abilist       |    5 +
 sysdeps/unix/sysv/linux/alpha/libm.abilist         |    5 +
 sysdeps/unix/sysv/linux/arm/libm.abilist           |    5 +
 sysdeps/unix/sysv/linux/hppa/libm.abilist          |    5 +
 sysdeps/unix/sysv/linux/i386/libm.abilist          |    5 +
 sysdeps/unix/sysv/linux/ia64/libm.abilist          |    5 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist |    5 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist   |    5 +
 sysdeps/unix/sysv/linux/microblaze/libm.abilist    |    5 +
 sysdeps/unix/sysv/linux/mips/mips32/libm.abilist   |    5 +
 sysdeps/unix/sysv/linux/mips/mips64/libm.abilist   |    5 +
 sysdeps/unix/sysv/linux/nios2/libm.abilist         |    5 +
 .../sysv/linux/powerpc/powerpc32/fpu/libm.abilist  |    5 +
 .../linux/powerpc/powerpc32/nofpu/libm.abilist     |    5 +
 .../sysv/linux/powerpc/powerpc64/libm-le.abilist   |    5 +
 .../unix/sysv/linux/powerpc/powerpc64/libm.abilist |    5 +
 sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist  |    5 +
 sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist  |    5 +
 sysdeps/unix/sysv/linux/sh/libm.abilist            |    5 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist |    5 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist |    5 +
 sysdeps/unix/sysv/linux/x86_64/64/libm.abilist     |    5 +
 sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist    |    5 +
 sysdeps/x86_64/fpu/multiarch/e_exp-avx.c           |    4 +-
 sysdeps/x86_64/fpu/multiarch/e_exp-fma.c           |    4 +-
 sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c          |    4 +-
 sysdeps/x86_64/fpu/multiarch/e_exp.c               |    4 +-
 sysdeps/x86_64/fpu/multiarch/e_log-avx.c           |    3 +-
 sysdeps/x86_64/fpu/multiarch/e_log-fma.c           |    3 +-
 sysdeps/x86_64/fpu/multiarch/e_log-fma4.c          |    3 +-
 sysdeps/x86_64/fpu/multiarch/e_log.c               |    4 +-
 sysdeps/x86_64/fpu/multiarch/e_pow-fma.c           |    4 +-
 sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c          |    4 +-
 sysdeps/x86_64/fpu/multiarch/e_pow.c               |    4 +-
 sysdeps/x86_64/fpu/multiarch/w_exp.c               |    1 +
 sysdeps/x86_64/fpu/multiarch/w_log.c               |    1 +
 sysdeps/x86_64/fpu/multiarch/w_pow.c               |    1 +
 75 files changed, 568 insertions(+), 56 deletions(-)
 create mode 100644 math/w_exp.c
 create mode 100644 math/w_exp2.c
 create mode 100644 math/w_log.c
 create mode 100644 math/w_log2.c
 create mode 100644 math/w_pow.c
 create mode 100644 sysdeps/i386/fpu/w_exp.c
 create mode 100644 sysdeps/i386/fpu/w_exp2.c
 create mode 100644 sysdeps/i386/fpu/w_log.c
 create mode 100644 sysdeps/i386/fpu/w_log2.c
 create mode 100644 sysdeps/i386/fpu/w_pow.c
 copy sysdeps/{ia64/fpu => ieee754/dbl-64}/w_exp.c (100%)
 copy sysdeps/{ia64/fpu => ieee754/dbl-64}/w_exp2.c (100%)
 copy sysdeps/{ia64/fpu => ieee754/dbl-64}/w_log.c (100%)
 copy sysdeps/{ia64/fpu => ieee754/dbl-64}/w_log2.c (100%)
 copy sysdeps/{ia64/fpu => ieee754/dbl-64}/w_pow.c (100%)
 create mode 100644 sysdeps/m68k/m680x0/fpu/w_exp.c
 create mode 100644 sysdeps/m68k/m680x0/fpu/w_exp2.c
 create mode 100644 sysdeps/m68k/m680x0/fpu/w_log.c
 create mode 100644 sysdeps/m68k/m680x0/fpu/w_log2.c
 create mode 100644 sysdeps/m68k/m680x0/fpu/w_pow.c
 create mode 100644 sysdeps/x86_64/fpu/multiarch/w_exp.c
 create mode 100644 sysdeps/x86_64/fpu/multiarch/w_log.c
 create mode 100644 sysdeps/x86_64/fpu/multiarch/w_pow.c


hooks/post-receive
-- 
GNU C Library master sources



More information about the Glibc-cvs mailing list