diff --git a/math/e_exp10.c b/math/e_exp10.c
index d578005d8a36b6ad550c90c03802b9872c2eb3c2..10b6152623e132418c941e8e946ae4d4b52b7215 100644
--- a/math/e_exp10.c
+++ b/math/e_exp10.c
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 double
 __ieee754_exp10 (double arg)
@@ -30,4 +31,6 @@ __ieee754_exp10 (double arg)
        replaced sometime (soon?).  */
     return __ieee754_exp (M_LN10 * arg);
 }
-strong_alias (__ieee754_exp10, __exp10_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10, __exp10_finite, GLIBC_2_15);
+#endif
diff --git a/math/e_exp10f.c b/math/e_exp10f.c
index 24408f7007a85200e4dd58f7a4dccd908c802c41..21318528010bcfbede22249705c8d65740be9204 100644
--- a/math/e_exp10f.c
+++ b/math/e_exp10f.c
@@ -18,7 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
-
+#include <shlib-compat.h>
 
 float
 __ieee754_exp10f (float arg)
@@ -29,4 +29,6 @@ __ieee754_exp10f (float arg)
      this.  */
   return __ieee754_exp (M_LN10 * arg);
 }
-strong_alias (__ieee754_exp10f, __exp10f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10f, __exp10f_finite, GLIBC_2_15);
+#endif
diff --git a/math/e_exp10l.c b/math/e_exp10l.c
index 775a01406371f0293bec0d10458d5b8bf6bc0551..0ae5a7db28bd6ef54cfa170f175ac1319130957d 100644
--- a/math/e_exp10l.c
+++ b/math/e_exp10l.c
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_exp10l (long double arg)
@@ -30,4 +31,6 @@ __ieee754_exp10l (long double arg)
        replaced sometime (soon?).  */
     return __ieee754_expl (M_LN10l * arg);
 }
-strong_alias (__ieee754_exp10l, __exp10l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10l, __exp10l_finite, GLIBC_2_15);
+#endif
diff --git a/math/e_exp2_template.c b/math/e_exp2_template.c
index 3f69dc9006834a93d67348af6268c7d00b5333d6..80e51480555352bcfe09e4aaa7a24042a0fbfdbb 100644
--- a/math/e_exp2_template.c
+++ b/math/e_exp2_template.c
@@ -20,6 +20,7 @@
 #include <math_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 FLOAT
 M_DECL_FUNC (__ieee754_exp2) (FLOAT x)
@@ -52,4 +53,6 @@ M_DECL_FUNC (__ieee754_exp2) (FLOAT x)
     /* Infinity, NaN or overflow.  */
     return M_MAX * x;
 }
-declare_mgen_finite_alias (__ieee754_exp2, __exp2)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, M_SUF (__ieee754_exp2), __M_CONCATX (M_SUF (__exp2), _finite), GLIBC_2_15);
+#endif
diff --git a/math/e_scalb.c b/math/e_scalb.c
index e332800854cd509679f3c2013eff82d4444b63db..8ece70d57fea8ea93811cea0e66e8c59e0cafb7d 100644
--- a/math/e_scalb.c
+++ b/math/e_scalb.c
@@ -18,7 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
-
+#include <shlib-compat.h>
 
 static double
 __attribute__ ((noinline))
@@ -51,4 +51,6 @@ __ieee754_scalb (double x, double fn)
 
   return __scalbn (x, (int) fn);
 }
-strong_alias (__ieee754_scalb, __scalb_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_scalb, __scalb_finite, GLIBC_2_15);
+#endif
diff --git a/math/e_scalbf.c b/math/e_scalbf.c
index 5782fc9db62576e51861214bc7e3f24ae11fd220..298d6791659ff8ae03fab82625a118fc4293dbe4 100644
--- a/math/e_scalbf.c
+++ b/math/e_scalbf.c
@@ -18,7 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
-
+#include <shlib-compat.h>
 
 static float
 __attribute__ ((noinline))
@@ -51,4 +51,6 @@ __ieee754_scalbf (float x, float fn)
 
   return __scalbnf (x, (int) fn);
 }
-strong_alias (__ieee754_scalbf, __scalbf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_scalbf, __scalbf_finite, GLIBC_2_15);
+#endif
diff --git a/math/e_scalbl.c b/math/e_scalbl.c
index 00ad3f9f55cb30e64e33cb0e8312f62c7a5393e5..70ccdb40498b3b0b2a92820a6e336f212e5a1b1d 100644
--- a/math/e_scalbl.c
+++ b/math/e_scalbl.c
@@ -18,7 +18,7 @@
 
 #include <math.h>
 #include <math_private.h>
-
+#include <shlib-compat.h>
 
 static long double
 __attribute__ ((noinline))
@@ -51,4 +51,6 @@ __ieee754_scalbl (long double x, long double fn)
 
   return __scalbnl (x, (int) fn);
 }
-strong_alias (__ieee754_scalbl, __scalbl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_scalbl, __scalbl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/aarch64/e_sqrtl.c b/sysdeps/aarch64/e_sqrtl.c
index ca24323c9aa8d903f43e9e5bf18cb26836567af2..58c6a36a0ae79020aaa2cd42ceab84bcac10e6f2 100644
--- a/sysdeps/aarch64/e_sqrtl.c
+++ b/sysdeps/aarch64/e_sqrtl.c
@@ -21,6 +21,7 @@
 #include <stdlib.h>
 #include <soft-fp.h>
 #include <quad.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_sqrtl (const long double a)
@@ -36,4 +37,6 @@ __ieee754_sqrtl (const long double a)
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/aarch64/fpu/e_sqrt.c b/sysdeps/aarch64/fpu/e_sqrt.c
index 7ff5a3f407da7fa2abc3f1095fda7857a98e8d98..975be53c628344e9f99248fb3f8f50a4aa35ec24 100644
--- a/sysdeps/aarch64/fpu/e_sqrt.c
+++ b/sysdeps/aarch64/fpu/e_sqrt.c
@@ -17,10 +17,13 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 double
 __ieee754_sqrt (double d)
 {
   return __builtin_sqrt (d);
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/aarch64/fpu/e_sqrtf.c b/sysdeps/aarch64/fpu/e_sqrtf.c
index aa624aac9a8895076185271b2498fabf794b4edb..97e9f4e09367c0c80a7f2f0dce53de4db626d2e4 100644
--- a/sysdeps/aarch64/fpu/e_sqrtf.c
+++ b/sysdeps/aarch64/fpu/e_sqrtf.c
@@ -17,10 +17,13 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 float
 __ieee754_sqrtf (float s)
 {
   return __builtin_sqrtf (s);
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S b/sysdeps/alpha/alphaev6/fpu/e_sqrt.S
index 74dc47ec19a6e76b91844a7f7b09f25866b0c446..7b2f2c26c47df9f4e3b57116c2a8f582808ad163 100644
--- a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S
+++ b/sysdeps/alpha/alphaev6/fpu/e_sqrt.S
@@ -45,9 +45,9 @@ ENTRY(__ieee754_sqrt)
 END(__ieee754_sqrt)
 
 #if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-strong_alias(__ieee754_sqrt, __sqrt_finite1)
-compat_symbol(libm, __sqrt_finite1, __sqrt_finite, GLIBC_2_15)
-versioned_symbol(libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_18)
-#else
-strong_alias(__ieee754_sqrt, __sqrt_finite)
+strong_alias(__ieee754_sqrt, __sqrt_dummy)
+compat_symbol(libm, __sqrt_dummy, __sqrt_finite, GLIBC_2_15)
+#endif
+#if SHLIB_COMPAT (libm, GLIBC_2_18, GLIBC_2_30)
+compat_symbol(libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_18)
 #endif
diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S b/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S
index 0f0281da8f32fd4793a39496bc903b7768f66de6..af2b5ad96c4d465b578da7cd51ecba2c1f63f446 100644
--- a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S
+++ b/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S
@@ -45,9 +45,9 @@ ENTRY(__ieee754_sqrtf)
 END(__ieee754_sqrtf)
 
 #if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-strong_alias(__ieee754_sqrtf, __sqrtf_finite1)
-compat_symbol(libm, __sqrtf_finite1, __sqrtf_finite, GLIBC_2_15)
-versioned_symbol(libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_18)
-#else
-strong_alias(__ieee754_sqrtf, __sqrtf_finite)
+strong_alias(__ieee754_sqrtf, __sqrtf_dummy)
+compat_symbol(libm, __sqrtf_dummy, __sqrtf_finite, GLIBC_2_15)
+#endif
+#if SHLIB_COMPAT (libm, GLIBC_2_18, GLIBC_2_30)
+compat_symbol(libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_18)
 #endif
diff --git a/sysdeps/alpha/e_sqrtl.c b/sysdeps/alpha/e_sqrtl.c
index 6629bbede8c5ddeb0840084143fcfa4febd748c6..0922b4ebacb93c31576255d3c099ecc430dc0eee 100644
--- a/sysdeps/alpha/e_sqrtl.c
+++ b/sysdeps/alpha/e_sqrtl.c
@@ -43,7 +43,5 @@ __ieee754_sqrtl (const long double a)
    straight-forward as just adding the alias, since a generic Versions file
    includes the 2.15 version and the linker uses the first one it sees.  */
 #if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-versioned_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_18);
-#else
-strong_alias(__ieee754_sqrtl, __sqrtl_finite)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_18);
 #endif
diff --git a/sysdeps/alpha/fpu/e_sqrt.c b/sysdeps/alpha/fpu/e_sqrt.c
index 3a07331fb35bf143058192e32cf4ad835da4b18b..723a5a0a25052c7d4ff2ff8ca68bd7698131366b 100644
--- a/sysdeps/alpha/fpu/e_sqrt.c
+++ b/sysdeps/alpha/fpu/e_sqrt.c
@@ -158,30 +158,29 @@ $fixup:									\n\
 									\n\
 	.end	__ieee754_sqrt");
 
-/* Avoid the __sqrt_finite alias that dbl-64/e_sqrt.c would give...  */
-#undef strong_alias
-#define strong_alias(a,b)
-
-/* ... defining our own.  */
 #if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-asm (".global	__sqrt_finite1; __sqrt_finite1 = __ieee754_sqrt");
+asm (".global  __sqrt_dummy; __sqrt_dummy = __ieee754_sqrt");
 #else
-asm (".global	__sqrt_finite; __sqrt_finite = __ieee754_sqrt");
+asm (".global  __sqrt_finite; __sqrt_finite = __ieee754_sqrt");
 #endif
 
 static double __full_ieee754_sqrt(double) __attribute_used__;
 #define __ieee754_sqrt __full_ieee754_sqrt
 
 #elif SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-# define __sqrt_finite __sqrt_finite1
+
+strong_alias (__ieee754_sqrt, __sqrt_dummy)
+#define __ieee754_sqrt __ieee754_sqrt
+
 #endif /* _IEEE_FP_INEXACT */
 
 #include <sysdeps/ieee754/dbl-64/e_sqrt.c>
+#undef __ieee754_sqrt
 
 /* Work around forgotten symbol in alphaev6 build.  */
 #if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-# undef __sqrt_finite
-# undef __ieee754_sqrt
-compat_symbol (libm, __sqrt_finite1, __sqrt_finite, GLIBC_2_15);
-versioned_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_18);
+compat_symbol (libm, __sqrt_dummy, __sqrt_finite, GLIBC_2_15);
+#endif
+#if SHLIB_COMPAT (libm, GLIBC_2_18, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_18);
 #endif
diff --git a/sysdeps/alpha/fpu/e_sqrtf.c b/sysdeps/alpha/fpu/e_sqrtf.c
index ad523f5cf256eb0de78616ea1207995b75c84afb..102d9efa049e1ef18a6366020d656c462fd2ebf8 100644
--- a/sysdeps/alpha/fpu/e_sqrtf.c
+++ b/sysdeps/alpha/fpu/e_sqrtf.c
@@ -1,14 +1,13 @@
 #include <shlib-compat.h>
 
-#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-# define __sqrtf_finite __sqrtf_finite1
-#endif
-
+#define __ieee754_sqrtf __ieee754_sqrtf
 #include <sysdeps/ieee754/flt-32/e_sqrtf.c>
 
 /* Work around forgotten symbol in alphaev6 build.  */
 #if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18)
-# undef __sqrtf_finite
-compat_symbol (libm, __sqrtf_finite1, __sqrtf_finite, GLIBC_2_15);
-versioned_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_18);
+strong_alias(__ieee754_sqrtf, __sqrtf_dummy)
+compat_symbol (libm, __sqrtf_dummy, __sqrtf_finite, GLIBC_2_15);
+#endif
+#if SHLIB_COMPAT (libm, GLIBC_2_18, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_18);
 #endif
diff --git a/sysdeps/arm/e_sqrt.c b/sysdeps/arm/e_sqrt.c
index e710b2b6c4415cf5c34cca7eb8fcbb17273dbec4..02e49d59b4d653df5e308e7df2cfc02694142674 100644
--- a/sysdeps/arm/e_sqrt.c
+++ b/sysdeps/arm/e_sqrt.c
@@ -26,6 +26,7 @@
 /* Use VFP square root instruction.  */
 # include <math.h>
 # include <sysdep.h>
+# include <shlib-compat.h>
 
 double
 __ieee754_sqrt (double x)
@@ -40,6 +41,8 @@ __ieee754_sqrt (double x)
 # endif
   return ret;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+# endif
 
 #endif
diff --git a/sysdeps/arm/e_sqrtf.c b/sysdeps/arm/e_sqrtf.c
index 501aa470a7076a2a4f5ab5611c7033a3ee1de84b..5296308103d63d378d821e2aca6122a1fa1dc0f9 100644
--- a/sysdeps/arm/e_sqrtf.c
+++ b/sysdeps/arm/e_sqrtf.c
@@ -26,6 +26,7 @@
 /* Use VFP square root instruction.  */
 # include <math.h>
 # include <sysdep.h>
+# include <shlib-compat.h>
 
 float
 __ieee754_sqrtf (float x)
@@ -40,6 +41,8 @@ __ieee754_sqrtf (float x)
 # endif
   return ret;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+# endif
 
 #endif
diff --git a/sysdeps/generic/math-type-macros-float128.h b/sysdeps/generic/math-type-macros-float128.h
index adea637eebb7339f4a9b634735e6fde971f11fb8..dc48e8176525a2afe27dade3105f887581a01aa2 100644
--- a/sysdeps/generic/math-type-macros-float128.h
+++ b/sysdeps/generic/math-type-macros-float128.h
@@ -46,4 +46,13 @@
 /* Use the type-generic wrapper templates.  */
 #define __USE_WRAPPER_TEMPLATE 1
 
+/* Ensure compat_symbol uses GLIBC_2_26 since that was when the
+   __<fn>f128_finite symbols were introduced.  */
+#include <shlib-compat.h>
+#if SHLIB_COMPAT (libm, GLIBC_2_26, GLIBC_2_30)
+# undef compat_symbol
+# define compat_symbol(lib, local, symbol, version) \
+  compat_symbol_reference (lib, local, symbol, GLIBC_2_26)
+#endif
+
 #endif
diff --git a/sysdeps/generic/math-type-macros.h b/sysdeps/generic/math-type-macros.h
index 998ab2e023a899fd9f09a862f524a057118c9bcc..e0682172573d8704910a721fbdd63ca4a34c978e 100644
--- a/sysdeps/generic/math-type-macros.h
+++ b/sysdeps/generic/math-type-macros.h
@@ -74,21 +74,6 @@
 # error "SET_NAN_PAYLOAD must be defined."
 #endif
 
-#ifndef declare_mgen_finite_alias_x
-#define declare_mgen_finite_alias_x(from, to)	\
-  strong_alias (from, to ## _finite)
-#endif
-
-#ifndef declare_mgen_finite_alias_s
-# define declare_mgen_finite_alias_s(from,to)	\
-  declare_mgen_finite_alias_x (from, to)
-#endif
-
-#ifndef declare_mgen_finite_alias
-# define declare_mgen_finite_alias(from, to)	\
-  declare_mgen_finite_alias_s (M_SUF (from), M_SUF (to))
-#endif
-
 #define __M_CONCAT(a,b) a ## b
 #define __M_CONCATX(a,b) __M_CONCAT(a,b)
 
diff --git a/sysdeps/i386/fpu/e_acos.S b/sysdeps/i386/fpu/e_acos.S
index 586c7fc406b1867f62379d25c748bb206606aba0..63f377ffe9c5b567b04f549b03377b69bd15412b 100644
--- a/sysdeps/i386/fpu/e_acos.S
+++ b/sysdeps/i386/fpu/e_acos.S
@@ -4,6 +4,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 RCSID("$NetBSD: e_acos.S,v 1.4 1995/05/08 23:44:37 jtc Exp $")
 
@@ -22,4 +23,6 @@ ENTRY(__ieee754_acos)
 	fpatan				/* atan (sqrt(1 - x^2) / x) */
 	ret
 END (__ieee754_acos)
-strong_alias (__ieee754_acos, __acos_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acos, __acos_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_acosf.S b/sysdeps/i386/fpu/e_acosf.S
index 54930af8b2a66e3df87a0c936dafb8c179fef71a..603522771ac51ee98ba8fabc970d7b20829df185 100644
--- a/sysdeps/i386/fpu/e_acosf.S
+++ b/sysdeps/i386/fpu/e_acosf.S
@@ -5,6 +5,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 RCSID("$NetBSD: $")
 
@@ -21,4 +22,6 @@ ENTRY(__ieee754_acosf)
 	fpatan
 	ret
 END (__ieee754_acosf)
-strong_alias (__ieee754_acosf, __acosf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosf, __acosf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_acosh.S b/sysdeps/i386/fpu/e_acosh.S
index 40066a6b07375bc11fee8d451c805927025f1548..940cb1cd3551a046c5212f575e3c2f09d17040fd 100644
--- a/sysdeps/i386/fpu/e_acosh.S
+++ b/sysdeps/i386/fpu/e_acosh.S
@@ -18,6 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -98,4 +99,6 @@ ENTRY(__ieee754_acosh)
 	fdiv	%st, %st(0)
 	ret
 END(__ieee754_acosh)
-strong_alias (__ieee754_acosh, __acosh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosh, __acosh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_acoshf.S b/sysdeps/i386/fpu/e_acoshf.S
index adb7c240a590c5f9cb7eb4a4766b07fc81b2753b..e44210858273441f822eff1e3edbe929590d7dfd 100644
--- a/sysdeps/i386/fpu/e_acoshf.S
+++ b/sysdeps/i386/fpu/e_acoshf.S
@@ -18,6 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -98,4 +99,6 @@ ENTRY(__ieee754_acoshf)
 	fdiv	%st, %st(0)
 	ret
 END(__ieee754_acoshf)
-strong_alias (__ieee754_acoshf, __acoshf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acoshf, __acoshf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_acoshl.S b/sysdeps/i386/fpu/e_acoshl.S
index 489d7905efd951c3ac26a8139f7ee7af30c6a613..fa3a3338e3301d035b55798bacba09071ae22874 100644
--- a/sysdeps/i386/fpu/e_acoshl.S
+++ b/sysdeps/i386/fpu/e_acoshl.S
@@ -18,6 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -104,4 +105,6 @@ ENTRY(__ieee754_acoshl)
 	fdiv	%st, %st(0)
 	ret
 END(__ieee754_acoshl)
-strong_alias (__ieee754_acoshl, __acoshl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acoshl, __acoshl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_acosl.c b/sysdeps/i386/fpu/e_acosl.c
index ab0893192490923b471a83733474b2f89c5ee323..e64a772b7f2135a4cd84b48d9a05325c8e2242bf 100644
--- a/sysdeps/i386/fpu/e_acosl.c
+++ b/sysdeps/i386/fpu/e_acosl.c
@@ -6,6 +6,7 @@
  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_acosl (long double x)
@@ -26,4 +27,6 @@ __ieee754_acosl (long double x)
 	: "=t" (res) : "0" (x) : "st(1)");
   return res;
 }
-strong_alias (__ieee754_acosl, __acosl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosl, __acosl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_asin.S b/sysdeps/i386/fpu/e_asin.S
index 39c8b47da4dc81dfd7fbdec1f090fb12b5e2a2f9..ea012032740f68b7aef46fdbd59399d7e37b4a11 100644
--- a/sysdeps/i386/fpu/e_asin.S
+++ b/sysdeps/i386/fpu/e_asin.S
@@ -5,6 +5,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 RCSID("$NetBSD: e_asin.S,v 1.4 1995/05/08 23:45:40 jtc Exp $")
 
@@ -35,4 +36,6 @@ ENTRY(__ieee754_asin)
 	DBL_CHECK_FORCE_UFLOW
 	ret
 END (__ieee754_asin)
-strong_alias (__ieee754_asin, __asin_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asin, __asin_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_asinf.S b/sysdeps/i386/fpu/e_asinf.S
index 1102bdedfd327d3b31b8dcdb0974789a9a55cb99..d0bd4aac7ebbf6535085affd3cdf5366810e8f04 100644
--- a/sysdeps/i386/fpu/e_asinf.S
+++ b/sysdeps/i386/fpu/e_asinf.S
@@ -6,6 +6,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 RCSID("$NetBSD: $")
 
@@ -36,4 +37,6 @@ ENTRY(__ieee754_asinf)
 	FLT_CHECK_FORCE_UFLOW
 	ret
 END (__ieee754_asinf)
-strong_alias (__ieee754_asinf, __asinf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asinf, __asinf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_atan2.S b/sysdeps/i386/fpu/e_atan2.S
index 25f43bb5a12a5a20514eb5b4b07bb690c2e758da..df624d59fdd80a031af55237a3af87b533371d50 100644
--- a/sysdeps/i386/fpu/e_atan2.S
+++ b/sysdeps/i386/fpu/e_atan2.S
@@ -5,6 +5,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 RCSID("$NetBSD: e_atan2.S,v 1.4 1995/05/08 23:46:28 jtc Exp $")
 
@@ -27,4 +28,6 @@ ENTRY(__ieee754_atan2)
 	DBL_CHECK_FORCE_UFLOW_NARROW
 	ret
 END (__ieee754_atan2)
-strong_alias (__ieee754_atan2, __atan2_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2, __atan2_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_atan2f.S b/sysdeps/i386/fpu/e_atan2f.S
index 2bc909a76288a412bd30492cea5cccd1e0e72941..fc4ab19cbd0fdbecf4c82b31d7f915c2f3f14c2f 100644
--- a/sysdeps/i386/fpu/e_atan2f.S
+++ b/sysdeps/i386/fpu/e_atan2f.S
@@ -5,6 +5,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 RCSID("$NetBSD: e_atan2f.S,v 1.1 1995/05/08 23:35:10 jtc Exp $")
 
@@ -27,4 +28,6 @@ ENTRY(__ieee754_atan2f)
 	FLT_CHECK_FORCE_UFLOW_NARROW
 	ret
 END (__ieee754_atan2f)
-strong_alias (__ieee754_atan2f, __atan2f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2f, __atan2f_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_atan2l.c b/sysdeps/i386/fpu/e_atan2l.c
index 9f88bfcc08f1cf62674a20cf3322b38264fbeb61..f9dd31d95396cdbe7dda119e63a1805c4179341f 100644
--- a/sysdeps/i386/fpu/e_atan2l.c
+++ b/sysdeps/i386/fpu/e_atan2l.c
@@ -6,6 +6,7 @@
  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_atan2l (long double y, long double x)
@@ -16,4 +17,6 @@ __ieee754_atan2l (long double y, long double x)
 
   return res;
 }
-strong_alias (__ieee754_atan2l, __atan2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2l, __atan2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_atanh.S b/sysdeps/i386/fpu/e_atanh.S
index 590545a3a72fbaf0d4fe71478de4dc5ca8c69f90..6409ad9272fb5c0967b6e30e88a842d9c402f263 100644
--- a/sysdeps/i386/fpu/e_atanh.S
+++ b/sysdeps/i386/fpu/e_atanh.S
@@ -19,6 +19,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata
 
@@ -109,4 +110,6 @@ ENTRY(__ieee754_atanh)
 6:	fldl	4(%esp)
 	ret
 END(__ieee754_atanh)
-strong_alias (__ieee754_atanh, __atanh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanh, __atanh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_atanhf.S b/sysdeps/i386/fpu/e_atanhf.S
index c18adceb0d819d2ae14a6e3d0a18bbc045bf3120..f6f282d773ebed2a327c2c159524d888cdb420dd 100644
--- a/sysdeps/i386/fpu/e_atanhf.S
+++ b/sysdeps/i386/fpu/e_atanhf.S
@@ -19,6 +19,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata
 
@@ -106,4 +107,6 @@ ENTRY(__ieee754_atanhf)
 5:	flds	4(%esp)
 	ret
 END(__ieee754_atanhf)
-strong_alias (__ieee754_atanhf, __atanhf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanhf, __atanhf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_atanhl.S b/sysdeps/i386/fpu/e_atanhl.S
index 00c3e6f904585c02be72b90b1c92a19002da0e5e..3e02c83d9074bd91ada5aa5d0ddc4df5e8f21b40 100644
--- a/sysdeps/i386/fpu/e_atanhl.S
+++ b/sysdeps/i386/fpu/e_atanhl.S
@@ -18,6 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata
 
@@ -124,4 +125,6 @@ ENTRY(__ieee754_atanhl)
 	fadd	%st(0)
 	ret
 END(__ieee754_atanhl)
-strong_alias (__ieee754_atanhl, __atanhl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanhl, __atanhl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_exp10.S b/sysdeps/i386/fpu/e_exp10.S
index acb5160a3ff9b1544399d17a83e97be1a6c50850..dd937201352cce072c0dc9378734b1cef51b7cf7 100644
--- a/sysdeps/i386/fpu/e_exp10.S
+++ b/sysdeps/i386/fpu/e_exp10.S
@@ -4,6 +4,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 DEFINE_DBL_MIN
 
@@ -50,4 +51,6 @@ ENTRY(__ieee754_exp10)
 	fldz				/* Set result to 0.  */
 2:	ret
 END (__ieee754_exp10)
-strong_alias (__ieee754_exp10, __exp10_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10, __exp10_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_exp10f.S b/sysdeps/i386/fpu/e_exp10f.S
index 1812b34398fa4d48e51ef059c5348f455514407c..b4d713da07d98a58003b07a6ccffd03895f2ff12 100644
--- a/sysdeps/i386/fpu/e_exp10f.S
+++ b/sysdeps/i386/fpu/e_exp10f.S
@@ -4,6 +4,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 DEFINE_FLT_MIN
 
@@ -50,4 +51,6 @@ ENTRY(__ieee754_exp10f)
 	fldz				/* Set result to 0.  */
 2:	ret
 END (__ieee754_exp10f)
-strong_alias (__ieee754_exp10f, __exp10f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10f, __exp10f_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_exp2.S b/sysdeps/i386/fpu/e_exp2.S
index fc16a9605389555c5397de1b2994845b8d0a1263..c879eaf8c13703c881d00c4a08a645e13f7309b4 100644
--- a/sysdeps/i386/fpu/e_exp2.S
+++ b/sysdeps/i386/fpu/e_exp2.S
@@ -6,6 +6,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 DEFINE_DBL_MIN
 
@@ -49,4 +50,6 @@ ENTRY(__ieee754_exp2)
 	fldz				/* Set result to 0.  */
 2:	ret
 END (__ieee754_exp2)
-strong_alias (__ieee754_exp2, __exp2_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp2, __exp2_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_exp2l.S b/sysdeps/i386/fpu/e_exp2l.S
index c4cb73d589b09627c718e989e37db57194311ceb..7f987ca2aae90345e9c00501d97b9b8d28c13218 100644
--- a/sysdeps/i386/fpu/e_exp2l.S
+++ b/sysdeps/i386/fpu/e_exp2l.S
@@ -6,6 +6,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 DEFINE_LDBL_MIN
 
@@ -57,4 +58,6 @@ ENTRY(__ieee754_exp2l)
 	fldz				/* Set result to 0.  */
 2:	ret
 END (__ieee754_exp2l)
-strong_alias (__ieee754_exp2l, __exp2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp2l, __exp2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_fmod.S b/sysdeps/i386/fpu/e_fmod.S
index 26b3acc392e8c2896c8fc353de4be26ebb7551e1..10a9a05ac92e1eff0fe63dbd769c53fc1db1cc88 100644
--- a/sysdeps/i386/fpu/e_fmod.S
+++ b/sysdeps/i386/fpu/e_fmod.S
@@ -4,6 +4,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_fmod)
 	fldl	12(%esp)
@@ -15,4 +16,6 @@ ENTRY(__ieee754_fmod)
 	fstp	%st(1)
 	ret
 END (__ieee754_fmod)
-strong_alias (__ieee754_fmod, __fmod_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmod, __fmod_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_fmodf.S b/sysdeps/i386/fpu/e_fmodf.S
index ece4d984273011dbdfaac1b40e02813a2afe37c2..7ce93cfc697bf8d847f546cf044f2ccd0f60f26e 100644
--- a/sysdeps/i386/fpu/e_fmodf.S
+++ b/sysdeps/i386/fpu/e_fmodf.S
@@ -5,6 +5,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_fmodf)
 	flds	8(%esp)
@@ -16,4 +17,6 @@ ENTRY(__ieee754_fmodf)
 	fstp	%st(1)
 	ret
 END(__ieee754_fmodf)
-strong_alias (__ieee754_fmodf, __fmodf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmodf, __fmodf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_fmodl.c b/sysdeps/i386/fpu/e_fmodl.c
index 49700ae8f648c7dd29cb120f64dffdc59b92a900..48361eb3fc599188423210d6cc59cb4404c47c5d 100644
--- a/sysdeps/i386/fpu/e_fmodl.c
+++ b/sysdeps/i386/fpu/e_fmodl.c
@@ -6,6 +6,7 @@
  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_fmodl (long double x, long double y)
@@ -20,4 +21,6 @@ __ieee754_fmodl (long double x, long double y)
        : "=t" (res) : "0" (x), "u" (y) : "ax", "st(1)");
   return res;
 }
-strong_alias (__ieee754_fmodl, __fmodl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmodl, __fmodl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_hypot.S b/sysdeps/i386/fpu/e_hypot.S
index affd3e56331eea7098548b5ba8426c7c09eb640f..0dac8a54074a680b1d89cd430a4a8375e57f15bd 100644
--- a/sysdeps/i386/fpu/e_hypot.S
+++ b/sysdeps/i386/fpu/e_hypot.S
@@ -19,6 +19,7 @@
 
 #include <sysdep.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 DEFINE_DBL_MIN
 
@@ -72,4 +73,6 @@ ENTRY(__ieee754_hypot)
 	jmp	2b
 
 END(__ieee754_hypot)
-strong_alias (__ieee754_hypot, __hypot_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypot, __hypot_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_hypotf.S b/sysdeps/i386/fpu/e_hypotf.S
index 63495350fcd9380970f193b5fb9f03ed7175f590..69782bb6568b8f526d7adcd27984525269a0319b 100644
--- a/sysdeps/i386/fpu/e_hypotf.S
+++ b/sysdeps/i386/fpu/e_hypotf.S
@@ -19,6 +19,7 @@
 
 #include <sysdep.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 	.text
 ENTRY(__ieee754_hypotf)
@@ -61,4 +62,6 @@ ENTRY(__ieee754_hypotf)
 	jmp	2b
 
 END(__ieee754_hypotf)
-strong_alias (__ieee754_hypotf, __hypotf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotf, __hypotf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_log10.S b/sysdeps/i386/fpu/e_log10.S
index 17277084ca9858cd4868ca0342b6b64d078ebc02..8520d02a9b92c16abb0970600e126933eff94bb9 100644
--- a/sysdeps/i386/fpu/e_log10.S
+++ b/sysdeps/i386/fpu/e_log10.S
@@ -6,6 +6,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -65,4 +66,6 @@ ENTRY(__ieee754_log10)
 	fstp	%st(1)
 	ret
 END (__ieee754_log10)
-strong_alias (__ieee754_log10, __log10_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10, __log10_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_log10f.S b/sysdeps/i386/fpu/e_log10f.S
index 72a3b882518dcc48aa90d0d8f8dc92d3f90434d9..b9776a1f275f7477cc1cd5806a13102486d31a01 100644
--- a/sysdeps/i386/fpu/e_log10f.S
+++ b/sysdeps/i386/fpu/e_log10f.S
@@ -7,6 +7,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -66,4 +67,6 @@ ENTRY(__ieee754_log10f)
 	fstp	%st(1)
 	ret
 END (__ieee754_log10f)
-strong_alias (__ieee754_log10f, __log10f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10f, __log10f_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_log10l.S b/sysdeps/i386/fpu/e_log10l.S
index 9326b197961abcfb1fbc995d74e07ee05ee43f0b..2bcb49b31b8b1ec2a794dcb6026ea1733a7b3995 100644
--- a/sysdeps/i386/fpu/e_log10l.S
+++ b/sysdeps/i386/fpu/e_log10l.S
@@ -8,6 +8,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -68,4 +69,6 @@ ENTRY(__ieee754_log10l)
 	fadd	%st(0)
 	ret
 END(__ieee754_log10l)
-strong_alias (__ieee754_log10l, __log10l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10l, __log10l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_log2.S b/sysdeps/i386/fpu/e_log2.S
index 73ff0fffd386e6fb0714b63a7fd2885db51dbf5a..185b83ee796af0c9b9297dab608f9a2741129a6f 100644
--- a/sysdeps/i386/fpu/e_log2.S
+++ b/sysdeps/i386/fpu/e_log2.S
@@ -7,6 +7,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -66,4 +67,6 @@ ENTRY(__ieee754_log2)
 	fstp	%st(1)
 	ret
 END (__ieee754_log2)
-strong_alias (__ieee754_log2, __log2_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log2, __log2_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_log2l.S b/sysdeps/i386/fpu/e_log2l.S
index 73e62ea908e316aa279531faf632ca8f62543a5a..5edce67330f59b6bd5b030d6dcf1252babf30e27 100644
--- a/sysdeps/i386/fpu/e_log2l.S
+++ b/sysdeps/i386/fpu/e_log2l.S
@@ -7,6 +7,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -67,4 +68,6 @@ ENTRY(__ieee754_log2l)
 	fadd	%st(0)
 	ret
 END (__ieee754_log2l)
-strong_alias (__ieee754_log2l, __log2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log2l, __log2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_pow.S b/sysdeps/i386/fpu/e_pow.S
index bfab8e1eb31f3a091a76841f306f0f5d38c08e9b..5dc4a1562a5d3eb894739552114aa07fe3d0cc64 100644
--- a/sysdeps/i386/fpu/e_pow.S
+++ b/sysdeps/i386/fpu/e_pow.S
@@ -19,6 +19,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -453,4 +454,6 @@ ENTRY(__ieee754_pow)
 	ret
 
 END(__ieee754_pow)
-strong_alias (__ieee754_pow, __pow_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_pow, __pow_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_powl.S b/sysdeps/i386/fpu/e_powl.S
index fdd5c01af33ddf03fe216094a3f7435e36886fa1..48fbe7a7f525c9efd2e38c0cfc2435aacc847c9d 100644
--- a/sysdeps/i386/fpu/e_powl.S
+++ b/sysdeps/i386/fpu/e_powl.S
@@ -19,6 +19,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -456,4 +457,6 @@ ENTRY(__ieee754_powl)
 	ret
 
 END(__ieee754_powl)
-strong_alias (__ieee754_powl, __powl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_powl, __powl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_remainder.S b/sysdeps/i386/fpu/e_remainder.S
index f7867aa90b26f5547bb89d399c23bbfc7c7d32d5..3e00a7ee409f3a101105f80e58c02e8bdc7c7051 100644
--- a/sysdeps/i386/fpu/e_remainder.S
+++ b/sysdeps/i386/fpu/e_remainder.S
@@ -4,6 +4,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_remainder)
 	fldl	12(%esp)
@@ -15,4 +16,6 @@ ENTRY(__ieee754_remainder)
 	fstp	%st(1)
 	ret
 END (__ieee754_remainder)
-strong_alias (__ieee754_remainder, __remainder_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainder, __remainder_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_remainderf.S b/sysdeps/i386/fpu/e_remainderf.S
index cfd390bc69c84d61b32e09891ce51161f1277072..4b6c31e583e2e4c70940fcd67f2111fd2603468e 100644
--- a/sysdeps/i386/fpu/e_remainderf.S
+++ b/sysdeps/i386/fpu/e_remainderf.S
@@ -4,6 +4,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_remainderf)
 	flds	8(%esp)
@@ -15,4 +16,6 @@ ENTRY(__ieee754_remainderf)
 	fstp	%st(1)
 	ret
 END (__ieee754_remainderf)
-strong_alias (__ieee754_remainderf, __remainderf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainderf, __remainderf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_remainderl.S b/sysdeps/i386/fpu/e_remainderl.S
index 5ec23a37a36783274fa503a4b1c32d6f46d87774..daf715963104f6b4aa8337796ab8f53a61d97d0a 100644
--- a/sysdeps/i386/fpu/e_remainderl.S
+++ b/sysdeps/i386/fpu/e_remainderl.S
@@ -6,6 +6,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_remainderl)
 	fldt	16(%esp)
@@ -17,4 +18,6 @@ ENTRY(__ieee754_remainderl)
 	fstp	%st(1)
 	ret
 END (__ieee754_remainderl)
-strong_alias (__ieee754_remainderl, __remainderl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainderl, __remainderl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_scalb.S b/sysdeps/i386/fpu/e_scalb.S
index 370924c29fb98dffe46fc60afa0d37607f88a4e8..4df4c5881c598def90ec29256d89332b9077d40a 100644
--- a/sysdeps/i386/fpu/e_scalb.S
+++ b/sysdeps/i386/fpu/e_scalb.S
@@ -7,6 +7,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata
 
@@ -97,4 +98,6 @@ ENTRY(__ieee754_scalb)
 	fdiv	%st
 	ret
 END(__ieee754_scalb)
-strong_alias (__ieee754_scalb, __scalb_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_scalb, __scalb_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_scalbf.S b/sysdeps/i386/fpu/e_scalbf.S
index 4f2dfa3acf7287dafcf8a1f7c41be6609c5e1754..61c14a5ab4d35bb72e9327de6c9f07e256eac1e7 100644
--- a/sysdeps/i386/fpu/e_scalbf.S
+++ b/sysdeps/i386/fpu/e_scalbf.S
@@ -8,6 +8,7 @@
 
 #include <machine/asm.h>
 #include <i386-math-asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata
 
@@ -99,4 +100,6 @@ ENTRY(__ieee754_scalbf)
 	fdiv	%st
 	ret
 END(__ieee754_scalbf)
-strong_alias (__ieee754_scalbf, __scalbf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_scalbf, __scalbf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_scalbl.S b/sysdeps/i386/fpu/e_scalbl.S
index 896f599cb061e2cb513b7fd729a2e9cc1000f88a..7a8b14c8ee779c41275807b601117499e7dd582d 100644
--- a/sysdeps/i386/fpu/e_scalbl.S
+++ b/sysdeps/i386/fpu/e_scalbl.S
@@ -8,6 +8,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata
 
@@ -87,4 +88,6 @@ ENTRY(__ieee754_scalbl)
 	fdiv	%st
 	ret
 END(__ieee754_scalbl)
-strong_alias (__ieee754_scalbl, __scalbl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_scalbl, __scalbl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_sqrt.S b/sysdeps/i386/fpu/e_sqrt.S
index fba5833a9a46c2babde9596bd11a4b027dabd5bc..eb0089b6cc4e1d11cb93c0db961c47693a9304da 100644
--- a/sysdeps/i386/fpu/e_sqrt.S
+++ b/sysdeps/i386/fpu/e_sqrt.S
@@ -4,6 +4,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_sqrt)
 	fldl	4(%esp)
@@ -20,4 +21,6 @@ ENTRY(__ieee754_sqrt)
 	cfi_adjust_cfa_offset (-8)
 	ret
 END (__ieee754_sqrt)
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_sqrtf.S b/sysdeps/i386/fpu/e_sqrtf.S
index 6f7e4b015fd9fbe685598f5dde8cd104e892df3f..b86c7fcb7fbf9f08d882cfcfb6345073fabbd469 100644
--- a/sysdeps/i386/fpu/e_sqrtf.S
+++ b/sysdeps/i386/fpu/e_sqrtf.S
@@ -4,10 +4,13 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_sqrtf)
 	flds	4(%esp)
 	fsqrt
 	ret
 END (__ieee754_sqrtf)
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/fpu/e_sqrtl.c b/sysdeps/i386/fpu/e_sqrtl.c
index 41bcd7eeb70b5748648840a7803425497711beb8..69e29cc266fd6db4cda2b320ed08b957d00884de 100644
--- a/sysdeps/i386/fpu/e_sqrtl.c
+++ b/sysdeps/i386/fpu/e_sqrtl.c
@@ -6,6 +6,7 @@
  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 #undef __ieee754_sqrtl
 long double
@@ -17,4 +18,6 @@ __ieee754_sqrtl (long double x)
 
   return res;
 }
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/i386/i686/fpu/multiarch/e_exp2f.c b/sysdeps/i386/i686/fpu/multiarch/e_exp2f.c
index ed9dedec9167564b99c9fea3fc102601df6a999f..529a00ba7b925835703f7c620fa37f1814cda909 100644
--- a/sysdeps/i386/i686/fpu/multiarch/e_exp2f.c
+++ b/sysdeps/i386/i686/fpu/multiarch/e_exp2f.c
@@ -20,20 +20,22 @@ extern float __redirect_exp2f (float);
 
 #define SYMBOL_NAME exp2f
 #include "ifunc-sse2.h"
+#include <shlib-compat.h>
 
 libc_ifunc_redirected (__redirect_exp2f, __exp2f, IFUNC_SELECTOR ());
 
 #include <libm-alias-float.h>
 #ifdef SHARED
-# include <shlib-compat.h>
-versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_exp2f, exp2f, GLIBC_2_27);
 libm_alias_float_other (__exp2, exp2)
 #else
 libm_alias_float (__exp2, exp2)
 #endif
 
 strong_alias (__exp2f, __ieee754_exp2f)
-strong_alias (__exp2f, __exp2f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __exp2f, __exp2f_finite, GLIBC_2_15);
+#endif
 
 #define __exp2f __exp2f_ia32
 #include <sysdeps/ieee754/flt-32/e_exp2f.c>
diff --git a/sysdeps/i386/i686/fpu/multiarch/e_expf.c b/sysdeps/i386/i686/fpu/multiarch/e_expf.c
index 500be0e59a6ed47f7e3c50997f15718fbda4ddce..d2ef615c559d707f52903904266100636b51d1ce 100644
--- a/sysdeps/i386/i686/fpu/multiarch/e_expf.c
+++ b/sysdeps/i386/i686/fpu/multiarch/e_expf.c
@@ -20,6 +20,7 @@ extern float __redirect_expf (float);
 
 #define SYMBOL_NAME expf
 #include "ifunc-sse2.h"
+#include <shlib-compat.h>
 
 libc_ifunc_redirected (__redirect_expf, __expf, IFUNC_SELECTOR ());
 
@@ -28,15 +29,16 @@ libc_ifunc_redirected (__redirect_expf, __expf, IFUNC_SELECTOR ());
 __hidden_ver1 (__expf_ia32, __GI___expf, __redirect_expf)
   __attribute__ ((visibility ("hidden"))) __THROW;
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __expf, expf, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_expf, expf, GLIBC_2_27);
 libm_alias_float_other (__exp, exp)
 #else
 libm_alias_float (__exp, exp)
 #endif
 
 strong_alias (__expf, __ieee754_expf)
-strong_alias (__expf, __expf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __expf, __expf_finite, GLIBC_2_15);
+#endif
 
 #define __expf __expf_ia32
 #include <sysdeps/ieee754/flt-32/e_expf.c>
diff --git a/sysdeps/i386/i686/fpu/multiarch/e_log2f.c b/sysdeps/i386/i686/fpu/multiarch/e_log2f.c
index 7afccf730fd35715307224ff2c289f5d96b575a2..c5a8e36dd6675e6476c5825be81490ae4c06e7dd 100644
--- a/sysdeps/i386/i686/fpu/multiarch/e_log2f.c
+++ b/sysdeps/i386/i686/fpu/multiarch/e_log2f.c
@@ -20,6 +20,7 @@ extern float __redirect_log2f (float);
 
 #define SYMBOL_NAME log2f
 #include "ifunc-sse2.h"
+#include <shlib-compat.h>
 
 libc_ifunc_redirected (__redirect_log2f, __log2f, IFUNC_SELECTOR ());
 
@@ -28,15 +29,16 @@ libc_ifunc_redirected (__redirect_log2f, __log2f, IFUNC_SELECTOR ());
 __hidden_ver1 (__log2f_ia32, __GI___log2f, __redirect_log2f)
   __attribute__ ((visibility ("hidden"))) __THROW;
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_log2f, log2f, GLIBC_2_27);
 libm_alias_float_other (__log2, log2)
 #else
 libm_alias_float (__log2, log2)
 #endif
 
 strong_alias (__log2f, __ieee754_log2f)
-strong_alias (__log2f, __log2f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __log2f, __log2f_finite, GLIBC_2_15);
+#endif
 
 #define __log2f __log2f_ia32
 #include <sysdeps/ieee754/flt-32/e_log2f.c>
diff --git a/sysdeps/i386/i686/fpu/multiarch/e_logf.c b/sysdeps/i386/i686/fpu/multiarch/e_logf.c
index 0584a53c787fc20b52922e9a0dfd0b26ffd5b8b7..32b3e6a494d7511ade4b8added950e0ff26b1681 100644
--- a/sysdeps/i386/i686/fpu/multiarch/e_logf.c
+++ b/sysdeps/i386/i686/fpu/multiarch/e_logf.c
@@ -20,6 +20,7 @@ extern float __redirect_logf (float);
 
 #define SYMBOL_NAME logf
 #include "ifunc-sse2.h"
+#include <shlib-compat.h>
 
 libc_ifunc_redirected (__redirect_logf, __logf, IFUNC_SELECTOR ());
 
@@ -28,15 +29,16 @@ libc_ifunc_redirected (__redirect_logf, __logf, IFUNC_SELECTOR ());
 __hidden_ver1 (__logf_ia32, __GI___logf, __redirect_logf)
   __attribute__ ((visibility ("hidden"))) __THROW;
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __logf, logf, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_logf, logf, GLIBC_2_27);
 libm_alias_float_other (__log, log)
 #else
 libm_alias_float (__log, log)
 #endif
 
 strong_alias (__logf, __ieee754_logf)
-strong_alias (__logf, __logf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __logf, __logf_finite, GLIBC_2_15);
+#endif
 
 #define __logf __logf_ia32
 #include <sysdeps/ieee754/flt-32/e_logf.c>
diff --git a/sysdeps/i386/i686/fpu/multiarch/e_powf.c b/sysdeps/i386/i686/fpu/multiarch/e_powf.c
index 1d36d3a6e5c3a976b5409295cddc995d78eff077..8ad4370c57dc0af1c283d63e647263070f95b19c 100644
--- a/sysdeps/i386/i686/fpu/multiarch/e_powf.c
+++ b/sysdeps/i386/i686/fpu/multiarch/e_powf.c
@@ -23,6 +23,7 @@
 
 #define SYMBOL_NAME powf
 #include "ifunc-sse2.h"
+#include <shlib-compat.h>
 
 libc_ifunc_redirected (__redirect_powf, __powf, IFUNC_SELECTOR ());
 
@@ -31,15 +32,16 @@ libc_ifunc_redirected (__redirect_powf, __powf, IFUNC_SELECTOR ());
 __hidden_ver1 (__powf_ia32, __GI___powf, __redirect_powf)
   __attribute__ ((visibility ("hidden")));
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __powf, powf, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_powf, powf, GLIBC_2_27);
 libm_alias_float_other (__pow, pow)
 #else
 libm_alias_float (__pow, pow)
 #endif
 
 strong_alias (__powf, __ieee754_powf)
-strong_alias (__powf, __powf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __powf, __powf_finite, GLIBC_2_15);
+#endif
 
 #define __powf __powf_ia32
 #include <sysdeps/ieee754/flt-32/e_powf.c>
diff --git a/sysdeps/ieee754/dbl-64/e_acosh.c b/sysdeps/ieee754/dbl-64/e_acosh.c
index fe0c375f00428db93abd5db02be3b3be6940bda5..6931b0c757fe047356e03bd300fa134b82981c60 100644
--- a/sysdeps/ieee754/dbl-64/e_acosh.c
+++ b/sysdeps/ieee754/dbl-64/e_acosh.c
@@ -26,6 +26,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const double
   one = 1.0,
@@ -66,4 +67,6 @@ __ieee754_acosh (double x)
       return __log1p (t + sqrt (2.0 * t + t * t));
     }
 }
-strong_alias (__ieee754_acosh, __acosh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosh, __acosh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_asin.c b/sysdeps/ieee754/dbl-64/e_asin.c
index 06934a4c06f0fed6d2d5ce8aa5ec73c84a7a9eb4..f96dfb39d9b0fdcb48b16bb533318cb704ce9737 100644
--- a/sysdeps/ieee754/dbl-64/e_asin.c
+++ b/sysdeps/ieee754/dbl-64/e_asin.c
@@ -43,6 +43,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 #ifndef SECTION
 # define SECTION
@@ -334,7 +335,9 @@ __ieee754_asin(double x){
  }
 }
 #ifndef __ieee754_asin
-strong_alias (__ieee754_asin, __asin_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asin, __asin_finite, GLIBC_2_15);
+# endif
 #endif
 
 /*******************************************************************/
@@ -644,5 +647,7 @@ __ieee754_acos(double x)
   }
 }
 #ifndef __ieee754_acos
-strong_alias (__ieee754_acos, __acos_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acos, __acos_finite, GLIBC_2_15);
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/e_atan2.c b/sysdeps/ieee754/dbl-64/e_atan2.c
index fad794313a28f23e5f4890b306082a4fa03d9b67..498e02c5167b9aeee16e415b9b871360ded7da1e 100644
--- a/sysdeps/ieee754/dbl-64/e_atan2.c
+++ b/sysdeps/ieee754/dbl-64/e_atan2.c
@@ -48,6 +48,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <stap-probe.h>
+#include <shlib-compat.h>
 
 #ifndef SECTION
 # define SECTION
@@ -570,7 +571,9 @@ __ieee754_atan2 (double y, double x)
 }
 
 #ifndef __ieee754_atan2
-strong_alias (__ieee754_atan2, __atan2_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2, __atan2_finite, GLIBC_2_15);
+# endif
 #endif
 
 /* Treat the Denormalized case */
diff --git a/sysdeps/ieee754/dbl-64/e_atanh.c b/sysdeps/ieee754/dbl-64/e_atanh.c
index cb3c4c804666daebef061e20921e015be08e5c67..3b72de1f586da445187c36ead732404f45314332 100644
--- a/sysdeps/ieee754/dbl-64/e_atanh.c
+++ b/sysdeps/ieee754/dbl-64/e_atanh.c
@@ -41,6 +41,7 @@
 #include <math-barriers.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const double huge = 1e300;
 
@@ -73,4 +74,6 @@ __ieee754_atanh (double x)
 
   return copysign (t, x);
 }
-strong_alias (__ieee754_atanh, __atanh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanh, __atanh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_cosh.c b/sysdeps/ieee754/dbl-64/e_cosh.c
index ae2180aa89d50341cb7554ae314d1f7805b52493..bc939d67c30afcf62db483fc8d0cee04478fa2a1 100644
--- a/sysdeps/ieee754/dbl-64/e_cosh.c
+++ b/sysdeps/ieee754/dbl-64/e_cosh.c
@@ -34,6 +34,7 @@
 #include <math.h>
 #include <math-narrow-eval.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const double one = 1.0, half = 0.5, huge = 1.0e300;
 
@@ -86,4 +87,6 @@ __ieee754_cosh (double x)
   /* |x| > overflowthresold, cosh(x) overflow */
   return math_narrow_eval (huge * huge);
 }
-strong_alias (__ieee754_cosh, __cosh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_cosh, __cosh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_exp.c b/sysdeps/ieee754/dbl-64/e_exp.c
index 853d6ca7618e9dc8bbc777286a3b8a7144465288..2a41835efaf0de367fdeb0ceee2550fc119b667c 100644
--- a/sysdeps/ieee754/dbl-64/e_exp.c
+++ b/sysdeps/ieee754/dbl-64/e_exp.c
@@ -159,9 +159,11 @@ __exp (double x)
 #ifndef __exp
 hidden_def (__exp)
 strong_alias (__exp, __ieee754_exp)
-strong_alias (__exp, __exp_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __exp, __exp_finite, GLIBC_2_15);
+# endif
 # if LIBM_SVID_COMPAT
-versioned_symbol (libm, __exp, exp, GLIBC_2_29);
+versioned_symbol (libm, __ieee754_exp, exp, GLIBC_2_29);
 libm_alias_double_other (__exp, exp)
 # else
 libm_alias_double (__exp, exp)
diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c
index 34d12493bd7288f88eb53f1f6922e45438c32168..ef71655ab5b5205c6b4deaf72a6aeb6ffc2e3862 100644
--- a/sysdeps/ieee754/dbl-64/e_exp10.c
+++ b/sysdeps/ieee754/dbl-64/e_exp10.c
@@ -18,6 +18,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 static const double log10_high = 0x2.4d7637p0;
 static const double log10_low = 0x7.6aaa2b05ba95cp-28;
@@ -47,4 +48,6 @@ __ieee754_exp10 (double arg)
   exp_low = arg_high * log10_low + arg_low * M_LN10;
   return __ieee754_exp (exp_high) * __ieee754_exp (exp_low);
 }
-strong_alias (__ieee754_exp10, __exp10_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10, __exp10_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c
index 22cade8b297985695960215ee9bca8262dc98ef0..028b318a83daa49a02c2762da46a1d4a132be027 100644
--- a/sysdeps/ieee754/dbl-64/e_exp2.c
+++ b/sysdeps/ieee754/dbl-64/e_exp2.c
@@ -145,9 +145,11 @@ __exp2 (double x)
 }
 #ifndef __exp2
 strong_alias (__exp2, __ieee754_exp2)
-strong_alias (__exp2, __exp2_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __exp2, __exp2_finite, GLIBC_2_15);
+# endif
 # if LIBM_SVID_COMPAT
-versioned_symbol (libm, __exp2, exp2, GLIBC_2_29);
+versioned_symbol (libm, __ieee754_exp2, exp2, GLIBC_2_29);
 libm_alias_double_other (__exp2, exp2)
 # else
 libm_alias_double (__exp2, exp2)
diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c
index 1a8c14dc2a2736c97bf16f54a6a7de28e01f3854..5523911700698dafdad8e7606274ddb3972d3975 100644
--- a/sysdeps/ieee754/dbl-64/e_fmod.c
+++ b/sysdeps/ieee754/dbl-64/e_fmod.c
@@ -17,6 +17,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const double one = 1.0, Zero[] = { 0.0, -0.0, };
 
@@ -170,4 +171,6 @@ __ieee754_fmod (double x, double y)
     }
   return x;                     /* exact output */
 }
-strong_alias (__ieee754_fmod, __fmod_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmod, __fmod_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_gamma_r.c b/sysdeps/ieee754/dbl-64/e_gamma_r.c
index 57b09e558d685ef4d4ebbbdf21071962ea048364..552d5998f9f84bca6ac8338ecddd10dfe2cc3b55 100644
--- a/sysdeps/ieee754/dbl-64/e_gamma_r.c
+++ b/sysdeps/ieee754/dbl-64/e_gamma_r.c
@@ -23,6 +23,7 @@
 #include <fenv_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's
    approximation to gamma function.  */
@@ -220,4 +221,6 @@ __ieee754_gamma_r (double x, int *signgamp)
   else
     return ret;
 }
-strong_alias (__ieee754_gamma_r, __gamma_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_gamma_r, __gamma_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_hypot.c b/sysdeps/ieee754/dbl-64/e_hypot.c
index a2c33cc4edb2df3e99bd233821ec0d9fa79412d2..622cda3af9edc32e0ec30c2b86ce85496d84b48d 100644
--- a/sysdeps/ieee754/dbl-64/e_hypot.c
+++ b/sysdeps/ieee754/dbl-64/e_hypot.c
@@ -45,6 +45,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 double
 __ieee754_hypot (double x, double y)
@@ -159,4 +160,8 @@ __ieee754_hypot (double x, double y)
   else
     return w;
 }
-strong_alias (__ieee754_hypot, __hypot_finite)
+#ifndef __ieee754_hypot
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypot, __hypot_finite, GLIBC_2_15);
+# endif
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_j0.c b/sysdeps/ieee754/dbl-64/e_j0.c
index 7f5919910d2d012d4f60ab7861f57cb637ed18ea..85235e2f1099204e83f5d1d407860096911bdba8 100644
--- a/sysdeps/ieee754/dbl-64/e_j0.c
+++ b/sysdeps/ieee754/dbl-64/e_j0.c
@@ -61,6 +61,7 @@
 #include <math.h>
 #include <math-barriers.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static double pzero (double), qzero (double);
 
@@ -143,7 +144,9 @@ __ieee754_j0 (double x)
       return ((one + u) * (one - u) + z * (r / s));
     }
 }
-strong_alias (__ieee754_j0, __j0_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm,__ieee754_j0, __j0_finite, GLIBC_2_15);
+#endif
 
 static const double
 U[] = { -7.38042951086872317523e-02, /* 0xBFB2E4D6, 0x99CBD01F */
@@ -223,7 +226,9 @@ __ieee754_y0 (double x)
   v = v1 + z2 * v2 + z4 * V[3];
   return (u / v + tpi * (__ieee754_j0 (x) * __ieee754_log (x)));
 }
-strong_alias (__ieee754_y0, __y0_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm,__ieee754_y0, __y0_finite, GLIBC_2_15);
+#endif
 
 /* The asymptotic expansions of pzero is
  *	1 - 9/128 s^2 + 11025/98304 s^4 - ...,	where s = 1/x.
diff --git a/sysdeps/ieee754/dbl-64/e_j1.c b/sysdeps/ieee754/dbl-64/e_j1.c
index 734f3ca64a5d983c2dc277db5ad799d055167f48..3368a5897bb9d5f149e3cc67d62e5e7c2063e950 100644
--- a/sysdeps/ieee754/dbl-64/e_j1.c
+++ b/sysdeps/ieee754/dbl-64/e_j1.c
@@ -64,6 +64,7 @@
 #include <math-narrow-eval.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static double pone (double), qone (double);
 
@@ -147,7 +148,9 @@ __ieee754_j1 (double x)
   s = s1 + z2 * s2 + z4 * s3;
   return (x * 0.5 + r / s);
 }
-strong_alias (__ieee754_j1, __j1_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_j1, __j1_finite, GLIBC_2_15);
+#endif
 
 static const double U0[5] = {
  -1.96057090646238940668e-01, /* 0xBFC91866, 0x143CBC8A */
@@ -230,7 +233,9 @@ __ieee754_y1 (double x)
   v = v1 + z2 * v2 + z4 * v3;
   return (x * (u / v) + tpi * (__ieee754_j1 (x) * __ieee754_log (x) - one / x));
 }
-strong_alias (__ieee754_y1, __y1_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y1, __y1_finite, GLIBC_2_15);
+#endif
 
 /* For x >= 8, the asymptotic expansions of pone is
  *	1 + 15/128 s^2 - 4725/2^15 s^4 - ...,	where s = 1/x.
diff --git a/sysdeps/ieee754/dbl-64/e_jn.c b/sysdeps/ieee754/dbl-64/e_jn.c
index 90a7e772709491411f2722d314d2aaff85f48ca9..a2c1c5b5cd1d26a43905fade5295c4b9c2e89a88 100644
--- a/sysdeps/ieee754/dbl-64/e_jn.c
+++ b/sysdeps/ieee754/dbl-64/e_jn.c
@@ -43,6 +43,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const double
   invsqrtpi = 5.64189583547756279280e-01, /* 0x3FE20DD7, 0x50429B6D */
@@ -258,7 +259,9 @@ __ieee754_jn (int n, double x)
     math_check_force_underflow (ret);
   return ret;
 }
-strong_alias (__ieee754_jn, __jn_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_jn, __jn_finite, GLIBC_2_15);
+#endif
 
 double
 __ieee754_yn (int n, double x)
@@ -349,4 +352,6 @@ __ieee754_yn (int n, double x)
     ret = copysign (DBL_MAX, ret) * DBL_MAX;
   return ret;
 }
-strong_alias (__ieee754_yn, __yn_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_yn, __yn_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_lgamma_r.c b/sysdeps/ieee754/dbl-64/e_lgamma_r.c
index 88051bc75bc44cd23e3efabf7ad17dbb17264816..a4b2c23369dcedd341d439989f38a5a26b71c937 100644
--- a/sysdeps/ieee754/dbl-64/e_lgamma_r.c
+++ b/sysdeps/ieee754/dbl-64/e_lgamma_r.c
@@ -81,6 +81,7 @@
 #include <math-narrow-eval.h>
 #include <math_private.h>
 #include <libc-diag.h>
+#include <shlib-compat.h>
 
 static const double
 two52=  4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
@@ -308,4 +309,6 @@ __ieee754_lgamma_r(double x, int *signgamp)
 	DIAG_POP_NEEDS_COMMENT;
 	return r;
 }
-strong_alias (__ieee754_lgamma_r, __lgamma_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_lgamma_r, __lgamma_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_log.c b/sysdeps/ieee754/dbl-64/e_log.c
index a04d73bd8895b74611ebf7d5a7d14151547fd673..ef674c7f175d4221563ddfb0fe2b5c4a8da8ad7b 100644
--- a/sysdeps/ieee754/dbl-64/e_log.c
+++ b/sysdeps/ieee754/dbl-64/e_log.c
@@ -132,9 +132,11 @@ __log (double x)
 }
 #ifndef __log
 strong_alias (__log, __ieee754_log)
-strong_alias (__log, __log_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __log, __log_finite, GLIBC_2_15);
+# endif
 # if LIBM_SVID_COMPAT
-versioned_symbol (libm, __log, log, GLIBC_2_29);
+versioned_symbol (libm, __ieee754_log, log, GLIBC_2_29);
 libm_alias_double_other (__log, log)
 # else
 libm_alias_double (__log, log)
diff --git a/sysdeps/ieee754/dbl-64/e_log10.c b/sysdeps/ieee754/dbl-64/e_log10.c
index 677cbc4df8739521c50a72d5ab657f438c74c129..c294ea8abeec844d44a546d46772d925ab71e1ed 100644
--- a/sysdeps/ieee754/dbl-64/e_log10.c
+++ b/sysdeps/ieee754/dbl-64/e_log10.c
@@ -46,6 +46,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <fix-int-fp-convert-zero.h>
+#include <shlib-compat.h>
 
 static const double two54 = 1.80143985094819840000e+16;         /* 0x43500000, 0x00000000 */
 static const double ivln10 = 4.34294481903251816668e-01;        /* 0x3FDBCB7B, 0x1526E50E */
@@ -84,5 +85,6 @@ __ieee754_log10 (double x)
   z = y * log10_2lo + ivln10 * __ieee754_log (x);
   return z + y * log10_2hi;
 }
-
-strong_alias (__ieee754_log10, __log10_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10, __log10_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_log2.c b/sysdeps/ieee754/dbl-64/e_log2.c
index c89c2ecb1cbeffc5ae007b71bb8a34dde670d84f..a6f64ca5c8753c6b7a30eb6cbb54595c3d703101 100644
--- a/sysdeps/ieee754/dbl-64/e_log2.c
+++ b/sysdeps/ieee754/dbl-64/e_log2.c
@@ -141,9 +141,11 @@ __log2 (double x)
 }
 #ifndef __log2
 strong_alias (__log2, __ieee754_log2)
-strong_alias (__log2, __log2_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __log2, __log2_finite, GLIBC_2_15);
+# endif
 # if LIBM_SVID_COMPAT
-versioned_symbol (libm, __log2, log2, GLIBC_2_29);
+versioned_symbol (libm, __ieee754_log2, log2, GLIBC_2_29);
 libm_alias_double_other (__log2, log2)
 # else
 libm_alias_double (__log2, log2)
diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
index d4b9378fe382d9e237aa0b59466283452dc18bdb..6b47c17c0df50f98f655f188e986947726e7dbf1 100644
--- a/sysdeps/ieee754/dbl-64/e_pow.c
+++ b/sysdeps/ieee754/dbl-64/e_pow.c
@@ -380,9 +380,11 @@ __pow (double x, double y)
 }
 #ifndef __pow
 strong_alias (__pow, __ieee754_pow)
-strong_alias (__pow, __pow_finite)
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __pow, __pow_finite, GLIBC_2_15);
+# endif
 # if LIBM_SVID_COMPAT
-versioned_symbol (libm, __pow, pow, GLIBC_2_29);
+versioned_symbol (libm, __ieee754_pow, pow, GLIBC_2_29);
 libm_alias_double_other (__pow, pow)
 # else
 libm_alias_double (__pow, pow)
diff --git a/sysdeps/ieee754/dbl-64/e_remainder.c b/sysdeps/ieee754/dbl-64/e_remainder.c
index 33cb48b8e3083eef0c06a82829807416c38bdcf9..88c21fdfbd9520b3d5e693a6b14308fa204dc376 100644
--- a/sysdeps/ieee754/dbl-64/e_remainder.c
+++ b/sysdeps/ieee754/dbl-64/e_remainder.c
@@ -36,6 +36,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <fenv_private.h>
+#include <shlib-compat.h>
 
 /**************************************************************************/
 /* An ultimate remainder routine. Given two IEEE double machine numbers x */
@@ -150,4 +151,6 @@ __ieee754_remainder (double x, double y)
 	}
     }
 }
-strong_alias (__ieee754_remainder, __remainder_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainder, __remainder_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c
index c4e34211ac0e166cc89a567cb3a5ace9e8f888d9..53b6a815e0e09caa234e3738f2d4772acb4aa3df 100644
--- a/sysdeps/ieee754/dbl-64/e_sinh.c
+++ b/sysdeps/ieee754/dbl-64/e_sinh.c
@@ -37,6 +37,7 @@ static char rcsid[] = "$NetBSD: e_sinh.c,v 1.7 1995/05/10 20:46:13 jtc Exp $";
 #include <math-narrow-eval.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const double one = 1.0, shuge = 1.0e307;
 
@@ -89,4 +90,6 @@ __ieee754_sinh (double x)
   /* |x| > overflowthresold, sinh(x) overflow */
   return math_narrow_eval (x * shuge);
 }
-strong_alias (__ieee754_sinh, __sinh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sinh, __sinh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_sqrt.c b/sysdeps/ieee754/dbl-64/e_sqrt.c
index ea1f05e69a07e76c8f72cf7367adfa857756f02e..98f89ff5b99f6a6851bfddd73966a93b34ec6d15 100644
--- a/sysdeps/ieee754/dbl-64/e_sqrt.c
+++ b/sysdeps/ieee754/dbl-64/e_sqrt.c
@@ -40,6 +40,7 @@
 #include <math-barriers.h>
 #include <math_private.h>
 #include <fenv_private.h>
+#include <shlib-compat.h>
 
 /*********************************************************************/
 /* An ultimate sqrt routine. Given an IEEE double machine number x   */
@@ -138,4 +139,8 @@ __ieee754_sqrt (double x)
       return 0x1p-256 * __ieee754_sqrt (x * 0x1p512);
     }
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#ifndef __ieee754_sqrt
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+# endif
+#endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c
index 0af05a02221f8a86cc91265b1edda70b59b7bb30..298a88f56c6ee221fb99bbd6dd8264c332550b20 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c
@@ -26,6 +26,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const double
 one	= 1.0,
@@ -64,4 +65,6 @@ __ieee754_acosh (double x)
   else					/* x < 1 */
     return (x - x) / (x - x);
 }
-strong_alias (__ieee754_acosh, __acosh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosh, __acosh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
index fca80b13f975bf32c93c0fffa63dab732621bb35..2b6e35f3725839ac096c7f7623a36e9379ea8a6e 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
@@ -33,6 +33,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const double one = 1.0, half=0.5, huge = 1.0e300;
 
@@ -81,4 +82,6 @@ __ieee754_cosh (double x)
     /* |x| > overflowthresold, cosh(x) overflow */
 	return huge*huge;
 }
-strong_alias (__ieee754_cosh, __cosh_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_cosh, __cosh_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c
index f686bb670681dd63f73f44ab355368d8e426c135..02ff49d7fddf2939f4efe7e7695c1977415462cf 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <stdint.h>
+#include <shlib-compat.h>
 
 static const double one = 1.0, Zero[] = {0.0, -0.0,};
 
@@ -102,4 +103,6 @@ __ieee754_fmod (double x, double y)
 	}
 	return x;		/* exact output */
 }
-strong_alias (__ieee754_fmod, __fmod_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmod, __fmod_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c
index cd5567182fda17d74ad53d46b0e67d97ea6c52a4..be26ee848638fb53a9277d657abf9431730ea56e 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c
@@ -46,6 +46,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <stdint.h>
+#include <shlib-compat.h>
 
 static const double two54 = 1.80143985094819840000e+16;		/* 0x4350000000000000 */
 static const double ivln10 = 4.34294481903251816668e-01;	/* 0x3FDBCB7B1526E50E */
@@ -83,5 +84,6 @@ __ieee754_log10 (double x)
   z = y * log10_2lo + ivln10 * __ieee754_log (x);
   return z + y * log10_2hi;
 }
-
-strong_alias (__ieee754_log10, __log10_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10, __log10_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/float128/float128_private.h b/sysdeps/ieee754/float128/float128_private.h
index f3917b463837e9eb19d18c62ba232d9bb077e9a1..c7bb208efb024030f0ae7cc71a01dab1d42c4fa1 100644
--- a/sysdeps/ieee754/float128/float128_private.h
+++ b/sysdeps/ieee754/float128/float128_private.h
@@ -365,3 +365,12 @@ mul_splitf128 (_Float128 *hi, _Float128 *lo, _Float128 x, _Float128 y)
   *lo = (((x1 * y1 - *hi) + x1 * y2) + x2 * y1) + x2 * y2;
 #endif
 }
+
+/* Ensure compat_symbol uses GLIBC_2_26 since that was when the
+   __<fn>f128_finite symbols were introduced.  */
+#include <shlib-compat.h>
+#if SHLIB_COMPAT (libm, GLIBC_2_26, GLIBC_2_30)
+# undef compat_symbol
+# define compat_symbol(lib, local, symbol, version) \
+  compat_symbol_reference (lib, local, symbol, GLIBC_2_26)
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_acosf.c b/sysdeps/ieee754/flt-32/e_acosf.c
index 3b2e4f1bde9906e483d31081ba794790f0eed05b..1aab50c548be9690d9d58773904c2af606169ad6 100644
--- a/sysdeps/ieee754/flt-32/e_acosf.c
+++ b/sysdeps/ieee754/flt-32/e_acosf.c
@@ -15,6 +15,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const float
 one =  1.0000000000e+00, /* 0x3F800000 */
@@ -75,4 +76,6 @@ __ieee754_acosf(float x)
 	    return (float)2.0*(df+w);
 	}
 }
-strong_alias (__ieee754_acosf, __acosf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosf, __acosf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_acoshf.c b/sysdeps/ieee754/flt-32/e_acoshf.c
index 49e64f3c43f0e5e37232dbcf8a38e7ab0c357453..2d0878c8cdf03ee0f5b25dfb919fb8d70ae26ac7 100644
--- a/sysdeps/ieee754/flt-32/e_acoshf.c
+++ b/sysdeps/ieee754/flt-32/e_acoshf.c
@@ -19,6 +19,7 @@ static char rcsid[] = "$NetBSD: e_acoshf.c,v 1.5 1995/05/12 04:57:20 jtc Exp $";
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const float
 one	= 1.0,
@@ -46,4 +47,6 @@ float __ieee754_acoshf(float x)
 	    return __log1pf(t+sqrtf((float)2.0*t+t*t));
 	}
 }
-strong_alias (__ieee754_acoshf, __acoshf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acoshf, __acoshf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_asinf.c b/sysdeps/ieee754/flt-32/e_asinf.c
index e03073b8bd6998e5649ba50923b1a43767c969ba..6ddce18994153c6f79062dbf181d98d29df3fb4d 100644
--- a/sysdeps/ieee754/flt-32/e_asinf.c
+++ b/sysdeps/ieee754/flt-32/e_asinf.c
@@ -43,6 +43,7 @@ static char rcsid[] = "$NetBSD: e_asinf.c,v 1.5 1995/05/12 04:57:25 jtc Exp $";
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const float
 one =  1.0000000000e+00, /* 0x3F800000 */
@@ -102,4 +103,6 @@ float __ieee754_asinf(float x)
 	}
 	if(hx>0) return t; else return -t;
 }
-strong_alias (__ieee754_asinf, __asinf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asinf, __asinf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_atan2f.c b/sysdeps/ieee754/flt-32/e_atan2f.c
index ddc5873ade50f9c7d717fea6a5afcc465d573904..9b97f003d269b89fe7056d72427d940f7c84d21a 100644
--- a/sysdeps/ieee754/flt-32/e_atan2f.c
+++ b/sysdeps/ieee754/flt-32/e_atan2f.c
@@ -15,6 +15,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const float
 tiny  = 1.0e-30,
@@ -91,4 +92,6 @@ __ieee754_atan2f (float y, float x)
 		    return  (z-pi_lo)-pi;/* atan(-,-) */
 	}
 }
-strong_alias (__ieee754_atan2f, __atan2f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2f, __atan2f_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_atanhf.c b/sysdeps/ieee754/flt-32/e_atanhf.c
index cda75b23c77fb820b6aaa61ae8be73e8c9ab1523..67ea5c2096a80c50dab3bfba93bfbb8fa0f3923a 100644
--- a/sysdeps/ieee754/flt-32/e_atanhf.c
+++ b/sysdeps/ieee754/flt-32/e_atanhf.c
@@ -41,6 +41,7 @@
 #include <math-barriers.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const float huge = 1e30;
 
@@ -73,4 +74,6 @@ __ieee754_atanhf (float x)
 
   return copysignf (t, x);
 }
-strong_alias (__ieee754_atanhf, __atanhf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanhf, __atanhf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_coshf.c b/sysdeps/ieee754/flt-32/e_coshf.c
index a2aa83876d9364b18fe348c1cf2a424db3dd9cfe..655b3c39c49738910ed87eec49b1a19694627be9 100644
--- a/sysdeps/ieee754/flt-32/e_coshf.c
+++ b/sysdeps/ieee754/flt-32/e_coshf.c
@@ -17,6 +17,7 @@
 #include <math.h>
 #include <math-narrow-eval.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const float huge = 1.0e30;
 static const float one = 1.0, half=0.5;
@@ -61,4 +62,6 @@ __ieee754_coshf (float x)
     /* |x| > overflowthresold, cosh(x) overflow */
 	return math_narrow_eval (huge*huge);
 }
-strong_alias (__ieee754_coshf, __coshf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_coshf, __coshf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c
index b6877d179479a9b0ede6c56dea2c362b0498d2fd..e4a328f4c64798e79a3fefc29cc2ef471af8c606 100644
--- a/sysdeps/ieee754/flt-32/e_exp2f.c
+++ b/sysdeps/ieee754/flt-32/e_exp2f.c
@@ -90,7 +90,9 @@ __exp2f (float x)
 }
 #ifndef __exp2f
 strong_alias (__exp2f, __ieee754_exp2f)
-strong_alias (__exp2f, __exp2f_finite)
-versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __exp2f, __exp2f_finite, GLIBC_2_15);
+# endif
+versioned_symbol (libm, __ieee754_exp2f, exp2f, GLIBC_2_27);
 libm_alias_float_other (__exp2, exp2)
 #endif
diff --git a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c
index 811bbddd4026aa21f29961d96f2fa142031fad82..0519dbda7a7864139d9adb2aee0fb45b9147570c 100644
--- a/sysdeps/ieee754/flt-32/e_expf.c
+++ b/sysdeps/ieee754/flt-32/e_expf.c
@@ -108,7 +108,9 @@ __expf (float x)
 #ifndef __expf
 hidden_def (__expf)
 strong_alias (__expf, __ieee754_expf)
-strong_alias (__expf, __expf_finite)
-versioned_symbol (libm, __expf, expf, GLIBC_2_27);
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __expf, __expf_finite, GLIBC_2_15);
+# endif
+versioned_symbol (libm, __ieee754_expf, expf, GLIBC_2_27);
 libm_alias_float_other (__exp, exp)
 #endif
diff --git a/sysdeps/ieee754/flt-32/e_fmodf.c b/sysdeps/ieee754/flt-32/e_fmodf.c
index 1a9407b517c01b7cf144d9d5732543b74c462b0d..71ca9a1a5b88be4b91b502f3d8b0d268fe94f9ef 100644
--- a/sysdeps/ieee754/flt-32/e_fmodf.c
+++ b/sysdeps/ieee754/flt-32/e_fmodf.c
@@ -21,6 +21,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const float one = 1.0, Zero[] = {0.0, -0.0,};
 
@@ -99,4 +100,6 @@ __ieee754_fmodf (float x, float y)
 	}
 	return x;		/* exact output */
 }
-strong_alias (__ieee754_fmodf, __fmodf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmodf, __fmodf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_gammaf_r.c b/sysdeps/ieee754/flt-32/e_gammaf_r.c
index 897e3935d0b4d1e5d5d13534533afd1e6d49ac7f..4bc61c1271924f0bc7c8e5418e51eb345986607d 100644
--- a/sysdeps/ieee754/flt-32/e_gammaf_r.c
+++ b/sysdeps/ieee754/flt-32/e_gammaf_r.c
@@ -23,6 +23,7 @@
 #include <fenv_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's
    approximation to gamma function.  */
@@ -212,4 +213,6 @@ __ieee754_gammaf_r (float x, int *signgamp)
   else
     return ret;
 }
-strong_alias (__ieee754_gammaf_r, __gammaf_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_gammaf_r, __gammaf_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c
index 5336876cf4cbb8d684dcd3510b7e8585aef7524a..afbe49c4e37b6c6279d9288776e1844a77e4b45f 100644
--- a/sysdeps/ieee754/flt-32/e_hypotf.c
+++ b/sysdeps/ieee754/flt-32/e_hypotf.c
@@ -15,6 +15,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 float
 __ieee754_hypotf(float x, float y)
@@ -42,4 +43,8 @@ __ieee754_hypotf(float x, float y)
 
 	return (float) sqrt(d_x * d_x + d_y * d_y);
 }
-strong_alias (__ieee754_hypotf, __hypotf_finite)
+#ifndef __ieee754_hypotf
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotf, __hypotf_finite, GLIBC_2_15);
+# endif
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_j0f.c b/sysdeps/ieee754/flt-32/e_j0f.c
index 0efc646a125df4d4407b49799a0fc6ce073b5862..f39b0005e17a93f3d1ed2027b8d1f3ebde5bed14 100644
--- a/sysdeps/ieee754/flt-32/e_j0f.c
+++ b/sysdeps/ieee754/flt-32/e_j0f.c
@@ -16,6 +16,7 @@
 #include <math.h>
 #include <math-barriers.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static float pzerof(float), qzerof(float);
 
@@ -81,7 +82,9 @@ __ieee754_j0f(float x)
 	    return((one+u)*(one-u)+z*(r/s));
 	}
 }
-strong_alias (__ieee754_j0f, __j0f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm,__ieee754_j0f, __j0f_finite, GLIBC_2_15);
+#endif
 
 static const float
 u00  = -7.3804296553e-02, /* 0xbd9726b5 */
@@ -147,7 +150,9 @@ __ieee754_y0f(float x)
 	v = one+z*(v01+z*(v02+z*(v03+z*v04)));
 	return(u/v + tpi*(__ieee754_j0f(x)*__ieee754_logf(x)));
 }
-strong_alias (__ieee754_y0f, __y0f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y0f, __y0f_finite, GLIBC_2_15);
+#endif
 
 /* The asymptotic expansions of pzero is
  *	1 - 9/128 s^2 + 11025/98304 s^4 - ...,	where s = 1/x.
diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c
index 09b2296483a0e194cdc694527d91367c356eb7f6..f023bde153fb770aff6c932a0aef667d13b38122 100644
--- a/sysdeps/ieee754/flt-32/e_j1f.c
+++ b/sysdeps/ieee754/flt-32/e_j1f.c
@@ -20,6 +20,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static float ponef(float), qonef(float);
 
@@ -87,7 +88,9 @@ __ieee754_j1f(float x)
 	r *= x;
 	return(x*(float)0.5+r/s);
 }
-strong_alias (__ieee754_j1f, __j1f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm,__ieee754_j1f, __j1f_finite, GLIBC_2_15);
+#endif
 
 static const float U0[5] = {
  -1.9605709612e-01, /* 0xbe48c331 */
@@ -156,7 +159,9 @@ __ieee754_y1f(float x)
 	v = one+z*(V0[0]+z*(V0[1]+z*(V0[2]+z*(V0[3]+z*V0[4]))));
 	return(x*(u/v) + tpi*(__ieee754_j1f(x)*__ieee754_logf(x)-one/x));
 }
-strong_alias (__ieee754_y1f, __y1f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y1f, __y1f_finite, GLIBC_2_15);
+#endif
 
 /* For x >= 8, the asymptotic expansions of pone is
  *	1 + 15/128 s^2 - 4725/2^15 s^4 - ...,	where s = 1/x.
diff --git a/sysdeps/ieee754/flt-32/e_jnf.c b/sysdeps/ieee754/flt-32/e_jnf.c
index ae290154243a3c657b9d01e1577a797b138b1df1..6162c7e6c135fdad20ea31ffaeac8469133b9a5d 100644
--- a/sysdeps/ieee754/flt-32/e_jnf.c
+++ b/sysdeps/ieee754/flt-32/e_jnf.c
@@ -20,6 +20,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const float
 two   =  2.0000000000e+00, /* 0x40000000 */
@@ -181,7 +182,9 @@ __ieee754_jnf(int n, float x)
 	math_check_force_underflow (ret);
     return ret;
 }
-strong_alias (__ieee754_jnf, __jnf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_jnf, __jnf_finite, GLIBC_2_15);
+#endif
 
 float
 __ieee754_ynf(int n, float x)
@@ -233,4 +236,6 @@ __ieee754_ynf(int n, float x)
 	ret = copysignf (FLT_MAX, ret) * FLT_MAX;
     return ret;
 }
-strong_alias (__ieee754_ynf, __ynf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_ynf, __ynf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_lgammaf_r.c b/sysdeps/ieee754/flt-32/e_lgammaf_r.c
index a7f9b9fbadc49c353b5e65851a432966ed2b0ab1..234766974797b8a520909a9cf6cafcc7ca3a3621 100644
--- a/sysdeps/ieee754/flt-32/e_lgammaf_r.c
+++ b/sysdeps/ieee754/flt-32/e_lgammaf_r.c
@@ -17,6 +17,7 @@
 #include <math-narrow-eval.h>
 #include <math_private.h>
 #include <libc-diag.h>
+#include <shlib-compat.h>
 
 static const float
 two23=  8.3886080000e+06, /* 0x4b000000 */
@@ -244,4 +245,6 @@ __ieee754_lgammaf_r(float x, int *signgamp)
 	DIAG_POP_NEEDS_COMMENT;
 	return r;
 }
-strong_alias (__ieee754_lgammaf_r, __lgammaf_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_lgammaf_r, __lgammaf_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
index 7f1ffdad771a642d9df9d245ac5062ea11aaeefb..07b1a5bbb37d4bd174d37ac9c37b03cd6060f7e6 100644
--- a/sysdeps/ieee754/flt-32/e_log10f.c
+++ b/sysdeps/ieee754/flt-32/e_log10f.c
@@ -16,6 +16,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <fix-int-fp-convert-zero.h>
+#include <shlib-compat.h>
 
 static const float
 two25      =  3.3554432000e+07, /* 0x4c000000 */
@@ -51,4 +52,6 @@ __ieee754_log10f(float x)
 	z  = y*log10_2lo + ivln10*__ieee754_logf(x);
 	return  z+y*log10_2hi;
 }
-strong_alias (__ieee754_log10f, __log10f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10f, __log10f_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_log2f.c b/sysdeps/ieee754/flt-32/e_log2f.c
index f9364bb0f93d2aca38a0947c49a7843a5fc5b58f..a55125bb4663c3c44e0fdea03c1bff9cc7b72de7 100644
--- a/sysdeps/ieee754/flt-32/e_log2f.c
+++ b/sysdeps/ieee754/flt-32/e_log2f.c
@@ -89,7 +89,9 @@ __log2f (float x)
 }
 #ifndef __log2f
 strong_alias (__log2f, __ieee754_log2f)
-strong_alias (__log2f, __log2f_finite)
-versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __log2f, __log2f_finite, GLIBC_2_15);
+# endif
+versioned_symbol (libm, __ieee754_log2f, log2f, GLIBC_2_27);
 libm_alias_float_other (__log2, log2)
 #endif
diff --git a/sysdeps/ieee754/flt-32/e_logf.c b/sysdeps/ieee754/flt-32/e_logf.c
index 58b068189f2424a0304357e1ee2afc67f87ca3dc..8d7ec9d90cea3551433c2bbfa2d8c3c989147883 100644
--- a/sysdeps/ieee754/flt-32/e_logf.c
+++ b/sysdeps/ieee754/flt-32/e_logf.c
@@ -88,7 +88,9 @@ __logf (float x)
 }
 #ifndef __logf
 strong_alias (__logf, __ieee754_logf)
-strong_alias (__logf, __logf_finite)
-versioned_symbol (libm, __logf, logf, GLIBC_2_27);
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __logf, __logf_finite, GLIBC_2_15);
+# endif
+versioned_symbol (libm, __ieee754_logf, logf, GLIBC_2_27);
 libm_alias_float_other (__log, log)
 #endif
diff --git a/sysdeps/ieee754/flt-32/e_powf.c b/sysdeps/ieee754/flt-32/e_powf.c
index d94d4222cc21e8d9bdd16e485697584e1507e6f8..ef4f8bf2f4536bf1ddaca793929e44f2767474fb 100644
--- a/sysdeps/ieee754/flt-32/e_powf.c
+++ b/sysdeps/ieee754/flt-32/e_powf.c
@@ -231,7 +231,9 @@ __powf (float x, float y)
 }
 #ifndef __powf
 strong_alias (__powf, __ieee754_powf)
-strong_alias (__powf, __powf_finite)
-versioned_symbol (libm, __powf, powf, GLIBC_2_27);
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __powf, __powf_finite, GLIBC_2_15);
+# endif
+versioned_symbol (libm, __ieee754_powf, powf, GLIBC_2_27);
 libm_alias_float_other (__pow, pow)
 #endif
diff --git a/sysdeps/ieee754/flt-32/e_remainderf.c b/sysdeps/ieee754/flt-32/e_remainderf.c
index 8e78784e0f43002124690f839d0f768453c7bd4f..897e1b946678fb2689efc0a15bfa0c22759c177b 100644
--- a/sysdeps/ieee754/flt-32/e_remainderf.c
+++ b/sysdeps/ieee754/flt-32/e_remainderf.c
@@ -15,6 +15,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const float zero = 0.0;
 
@@ -59,4 +60,6 @@ __ieee754_remainderf(float x, float p)
 	SET_FLOAT_WORD(x,hx^sx);
 	return x;
 }
-strong_alias (__ieee754_remainderf, __remainderf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainderf, __remainderf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_sinhf.c b/sysdeps/ieee754/flt-32/e_sinhf.c
index 20f7db81ea72db9dbf5f5350b2602d28bc7e339c..7dda97898b87e17ab3eba3c394edd058c3cc318f 100644
--- a/sysdeps/ieee754/flt-32/e_sinhf.c
+++ b/sysdeps/ieee754/flt-32/e_sinhf.c
@@ -18,6 +18,7 @@
 #include <math-narrow-eval.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const float one = 1.0, shuge = 1.0e37;
 
@@ -59,4 +60,6 @@ __ieee754_sinhf(float x)
     /* |x| > overflowthresold, sinh(x) overflow */
 	return math_narrow_eval (x*shuge);
 }
-strong_alias (__ieee754_sinhf, __sinhf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sinhf, __sinhf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/flt-32/e_sqrtf.c b/sysdeps/ieee754/flt-32/e_sqrtf.c
index 6025da19cfe74a52f08bf8c8e0b38e6df6a2ac7f..435bd2dec99ed8c330445e16d63b080a3ba8d644 100644
--- a/sysdeps/ieee754/flt-32/e_sqrtf.c
+++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
@@ -15,6 +15,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static	const float	one	= 1.0, tiny=1.0e-30;
 
@@ -83,4 +84,8 @@ __ieee754_sqrtf(float x)
 	SET_FLOAT_WORD(z,ix);
 	return z;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#ifndef __ieee754_sqrtf
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+# endif
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_acoshl.c b/sysdeps/ieee754/ldbl-128/e_acoshl.c
index c292759ac6f163ac0d739a5ae682331b507ab3d2..24d603db34019c1b980a66539b4b721a41701e7d 100644
--- a/sysdeps/ieee754/ldbl-128/e_acoshl.c
+++ b/sysdeps/ieee754/ldbl-128/e_acoshl.c
@@ -29,6 +29,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const _Float128
 one	= 1.0,
@@ -58,4 +59,6 @@ __ieee754_acoshl(_Float128 x)
 	    return __log1pl(t+sqrtl(2*t+t*t));
 	}
 }
-strong_alias (__ieee754_acoshl, __acoshl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acoshl, __acoshl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_acosl.c b/sysdeps/ieee754/ldbl-128/e_acosl.c
index 0dc23dee2beb2d9fa1a1f67da421e9559b97340a..82489de241e5d46c5367ab72901444db169260ce 100644
--- a/sysdeps/ieee754/ldbl-128/e_acosl.c
+++ b/sysdeps/ieee754/ldbl-128/e_acosl.c
@@ -56,6 +56,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const _Float128
   one = 1,
@@ -316,4 +317,6 @@ __ieee754_acosl (_Float128 x)
       return 2.0 * w;
     }
 }
-strong_alias (__ieee754_acosl, __acosl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosl, __acosl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_asinl.c b/sysdeps/ieee754/ldbl-128/e_asinl.c
index 4835962db48aee56dcf699a1c677b984b1ea593f..026fe963636eee6c7ad171ae8a2687ea8958da9f 100644
--- a/sysdeps/ieee754/ldbl-128/e_asinl.c
+++ b/sysdeps/ieee754/ldbl-128/e_asinl.c
@@ -64,6 +64,7 @@
 #include <math-barriers.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const _Float128
   one = 1,
@@ -257,4 +258,6 @@ __ieee754_asinl (_Float128 x)
   else
     return -t;
 }
-strong_alias (__ieee754_asinl, __asinl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asinl, __asinl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_atan2l.c b/sysdeps/ieee754/ldbl-128/e_atan2l.c
index 8b4afa4bd567a54545150925b38247b7116f5b40..60117ddb97cff557037db908e171d72c7a5866c9 100644
--- a/sysdeps/ieee754/ldbl-128/e_atan2l.c
+++ b/sysdeps/ieee754/ldbl-128/e_atan2l.c
@@ -42,6 +42,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const _Float128
 tiny  = L(1.0e-4900),
@@ -119,4 +120,6 @@ __ieee754_atan2l(_Float128 y, _Float128 x)
 		    return  (z-pi_lo)-pi;/* atan(-,-) */
 	}
 }
-strong_alias (__ieee754_atan2l, __atan2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2l, __atan2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_atanhl.c b/sysdeps/ieee754/ldbl-128/e_atanhl.c
index 13b7683e1796ee5a24b3c69fbc1ce2c1e3da55cd..a0838dc5aad83372dad7e7f8ab0bcbf15aadf3ed 100644
--- a/sysdeps/ieee754/ldbl-128/e_atanhl.c
+++ b/sysdeps/ieee754/ldbl-128/e_atanhl.c
@@ -36,6 +36,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const _Float128 one = 1, huge = L(1e4900);
 
@@ -72,4 +73,6 @@ __ieee754_atanhl(_Float128 x)
 	    t = 0.5*__log1pl((u.value+u.value)/(one-u.value));
 	if(jx & 0x80000000) return -t; else return t;
 }
-strong_alias (__ieee754_atanhl, __atanhl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanhl, __atanhl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_coshl.c b/sysdeps/ieee754/ldbl-128/e_coshl.c
index 70a2fe3e84ac6ffd754d87b16a0fbd8b8c7d2303..22ed8b49939fc8a3bb14fcd33a617bd77e664d14 100644
--- a/sysdeps/ieee754/ldbl-128/e_coshl.c
+++ b/sysdeps/ieee754/ldbl-128/e_coshl.c
@@ -53,6 +53,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const _Float128 one = 1.0, half = 0.5, huge = L(1.0e4900),
 ovf_thresh = L(1.1357216553474703894801348310092223067821E4);
@@ -107,4 +108,6 @@ __ieee754_coshl (_Float128 x)
   /* |x| > overflowthresold, cosh(x) overflow */
   return huge * huge;
 }
-strong_alias (__ieee754_coshl, __coshl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_coshl, __coshl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_exp10l.c b/sysdeps/ieee754/ldbl-128/e_exp10l.c
index 3d3d762ef02a6d7fb1227d872076ddc88d96aede..2a632bf798fc585118bc42315c140bc6ad739aac 100644
--- a/sysdeps/ieee754/ldbl-128/e_exp10l.c
+++ b/sysdeps/ieee754/ldbl-128/e_exp10l.c
@@ -18,6 +18,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 static const _Float128 log10_high = L(0x2.4d763776aaa2bp0);
 static const _Float128 log10_low = L(0x5.ba95b58ae0b4c28a38a3fb3e7698p-60);
@@ -46,4 +47,6 @@ __ieee754_exp10l (_Float128 arg)
   exp_low = arg_high * log10_low + arg_low * M_LN10l;
   return __ieee754_expl (exp_high) * __ieee754_expl (exp_low);
 }
-strong_alias (__ieee754_exp10l, __exp10l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10l, __exp10l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_expl.c b/sysdeps/ieee754/ldbl-128/e_expl.c
index 7b6ec0b347ae2469a544903d66fe6d10762c02a7..098c6a2b069b2ed67f1a9c60303404a27e5a4b69 100644
--- a/sysdeps/ieee754/ldbl-128/e_expl.c
+++ b/sysdeps/ieee754/ldbl-128/e_expl.c
@@ -69,6 +69,7 @@
 #include <math-underflow.h>
 #include <stdlib.h>
 #include "t_expl.h"
+#include <shlib-compat.h>
 
 static const _Float128 C[] = {
 /* Smallest integer x for which e^x overflows.  */
@@ -253,4 +254,6 @@ __ieee754_expl (_Float128 x)
     /* Return x, if x is a NaN or Inf; or overflow, otherwise.  */
     return TWO16383*x;
 }
-strong_alias (__ieee754_expl, __expl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_expl, __expl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_fmodl.c b/sysdeps/ieee754/ldbl-128/e_fmodl.c
index 73465126b43ff1c975389ff86172b645f18172a0..87a234ce74e2d5ef4a5382b6ad59e08bf348420f 100644
--- a/sysdeps/ieee754/ldbl-128/e_fmodl.c
+++ b/sysdeps/ieee754/ldbl-128/e_fmodl.c
@@ -20,6 +20,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const _Float128 one = 1.0, Zero[] = {0.0, -0.0,};
 
@@ -128,4 +129,6 @@ __ieee754_fmodl (_Float128 x, _Float128 y)
 	}
 	return x;		/* exact output */
 }
-strong_alias (__ieee754_fmodl, __fmodl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmodl, __fmodl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_gammal_r.c b/sysdeps/ieee754/ldbl-128/e_gammal_r.c
index 268d7faf6dc1441159e9818960e8d270cb5a039c..04d6b80acd4a3f7389783b4b020c061a0670d5b5 100644
--- a/sysdeps/ieee754/ldbl-128/e_gammal_r.c
+++ b/sysdeps/ieee754/ldbl-128/e_gammal_r.c
@@ -23,6 +23,7 @@
 #include <fenv_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's
    approximation to gamma function.  */
@@ -217,4 +218,6 @@ __ieee754_gammal_r (_Float128 x, int *signgamp)
   else
     return ret;
 }
-strong_alias (__ieee754_gammal_r, __gammal_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_gammal_r, __gammal_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_hypotl.c b/sysdeps/ieee754/ldbl-128/e_hypotl.c
index 7bafd4ae296318a1a3edf0eb366925ab029aed73..98a844d45d331976a6f71ea10f9ad8e162ee037f 100644
--- a/sysdeps/ieee754/ldbl-128/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-128/e_hypotl.c
@@ -48,6 +48,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 _Float128
 __ieee754_hypotl(_Float128 x, _Float128 y)
@@ -138,4 +139,6 @@ __ieee754_hypotl(_Float128 x, _Float128 y)
 	    return w;
 	} else return w;
 }
-strong_alias (__ieee754_hypotl, __hypotl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotl, __hypotl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_j0l.c b/sysdeps/ieee754/ldbl-128/e_j0l.c
index 5c699956b69a3e87e5a9436757aceffb25936718..c0287806baca0265aafbc71588632a8b3e2d12af 100644
--- a/sysdeps/ieee754/ldbl-128/e_j0l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j0l.c
@@ -94,6 +94,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* 1 / sqrt(pi) */
 static const _Float128 ONEOSQPI = L(5.6418958354775628694807945156077258584405E-1);
@@ -789,7 +790,9 @@ __ieee754_j0l (_Float128 x)
   z = ONEOSQPI * (p * cc - q * ss) / sqrtl (xx);
   return z;
 }
-strong_alias (__ieee754_j0l, __j0l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_j0l, __j0l_finite, GLIBC_2_15);
+#endif
 
 
 /* Y0(x) = 2/pi * log(x) * J0(x) + R(x^2)
@@ -934,4 +937,6 @@ _Float128
   z = ONEOSQPI * (p * ss + q * cc) / sqrtl (x);
   return z;
 }
-strong_alias (__ieee754_y0l, __y0l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y0l, __y0l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_j1l.c b/sysdeps/ieee754/ldbl-128/e_j1l.c
index 0ef3611473ea505fbd2ed1b5ad32a17331378053..1481ab729ade2a274ae6e480685402de560f3adb 100644
--- a/sysdeps/ieee754/ldbl-128/e_j1l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j1l.c
@@ -101,6 +101,7 @@
 #include <fenv_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* 1 / sqrt(pi) */
 static const _Float128 ONEOSQPI = L(5.6418958354775628694807945156077258584405E-1);
@@ -810,7 +811,9 @@ __ieee754_j1l (_Float128 x)
     z = -z;
   return z;
 }
-strong_alias (__ieee754_j1l, __j1l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_j1l, __j1l_finite, GLIBC_2_15);
+#endif
 
 
 /* Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2)
@@ -960,4 +963,6 @@ __ieee754_y1l (_Float128 x)
   z = ONEOSQPI * (p * ss + q * cc) / sqrtl (xx);
   return z;
 }
-strong_alias (__ieee754_y1l, __y1l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y1l, __y1l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_jnl.c b/sysdeps/ieee754/ldbl-128/e_jnl.c
index 3c90072a22b98ed7c4ef8fde7a06c8e0a27ea105..1679510934b4aba6872932fa8772cc2138ae3ed9 100644
--- a/sysdeps/ieee754/ldbl-128/e_jnl.c
+++ b/sysdeps/ieee754/ldbl-128/e_jnl.c
@@ -62,6 +62,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const _Float128
   invsqrtpi = L(5.6418958354775628694807945156077258584405E-1),
@@ -308,7 +309,9 @@ __ieee754_jnl (int n, _Float128 x)
     math_check_force_underflow (ret);
   return ret;
 }
-strong_alias (__ieee754_jnl, __jnl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_jnl, __jnl_finite, GLIBC_2_15);
+#endif
 
 _Float128
 __ieee754_ynl (int n, _Float128 x)
@@ -422,4 +425,6 @@ __ieee754_ynl (int n, _Float128 x)
     ret = copysignl (LDBL_MAX, ret) * LDBL_MAX;
   return ret;
 }
-strong_alias (__ieee754_ynl, __ynl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_ynl, __ynl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
index f470034f9c6b91a6e444d08094750c0ad092024d..b1b099133b2c81c68be84ac71c6056f8ba3c812e 100644
--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
@@ -71,6 +71,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 static const _Float128 PIL = L(3.1415926535897932384626433832795028841972E0);
 static const _Float128 MAXLGM = L(1.0485738685148938358098967157129705071571E4928);
@@ -1039,4 +1040,6 @@ __ieee754_lgammal_r (_Float128 x, int *signgamp)
   q += neval (p, RASY, NRASY) / x;
   return (q);
 }
-strong_alias (__ieee754_lgammal_r, __lgammal_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_lgammal_r, __lgammal_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_log10l.c b/sysdeps/ieee754/ldbl-128/e_log10l.c
index e8f33984f2ceec4dfcbe51696b25595e31385c00..9c9de8ecd5bbdfea00dd552d233de0f8c70876cf 100644
--- a/sysdeps/ieee754/ldbl-128/e_log10l.c
+++ b/sysdeps/ieee754/ldbl-128/e_log10l.c
@@ -62,6 +62,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 /* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
  * 1/sqrt(2) <= x < sqrt(2)
@@ -256,4 +257,6 @@ done:
   z += e * L102A;
   return (z);
 }
-strong_alias (__ieee754_log10l, __log10l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10l, __log10l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_log2l.c b/sysdeps/ieee754/ldbl-128/e_log2l.c
index 06bf04f5e3f7d30a1ae7ebfb3b88f01398f11f65..bce1dd9547d288ba37fad9a458032712bc811ffc 100644
--- a/sysdeps/ieee754/ldbl-128/e_log2l.c
+++ b/sysdeps/ieee754/ldbl-128/e_log2l.c
@@ -61,6 +61,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 /* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
  * 1/sqrt(2) <= x < sqrt(2)
@@ -249,4 +250,6 @@ done:
   z += e;
   return (z);
 }
-strong_alias (__ieee754_log2l, __log2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log2l, __log2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_logl.c b/sysdeps/ieee754/ldbl-128/e_logl.c
index 8672047e4312d72be6be8c4e1c7aeae3ecbca7db..b3388d4a85ca7fe6d27fa042f587dc893e551f91 100644
--- a/sysdeps/ieee754/ldbl-128/e_logl.c
+++ b/sysdeps/ieee754/ldbl-128/e_logl.c
@@ -60,6 +60,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 /* log(1+x) = x - .5 x^2 + x^3 l(x)
    -.0078125 <= x <= +.0078125
@@ -279,4 +280,6 @@ __ieee754_logl(_Float128 x)
   y += e * ln2a;
   return y;
 }
-strong_alias (__ieee754_logl, __logl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_logl, __logl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_powl.c b/sysdeps/ieee754/ldbl-128/e_powl.c
index 47226f8688477491f4bd985718a2a44eb34cd0eb..496fbbf57f37ab60d6f14af937710db7d7d4359d 100644
--- a/sysdeps/ieee754/ldbl-128/e_powl.c
+++ b/sysdeps/ieee754/ldbl-128/e_powl.c
@@ -67,6 +67,7 @@
 #include <math.h>
 #include <math-barriers.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const _Float128 bp[] = {
   1,
@@ -449,4 +450,6 @@ __ieee754_powl (_Float128 x, _Float128 y)
     }
   return sgn * z;
 }
-strong_alias (__ieee754_powl, __powl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_powl, __powl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_remainderl.c b/sysdeps/ieee754/ldbl-128/e_remainderl.c
index 09b8640b78528371e6a23ad68670d56c3faa91a2..f8f43c4a0d9c34b07530ad5ba41b7b649e3ce337 100644
--- a/sysdeps/ieee754/ldbl-128/e_remainderl.c
+++ b/sysdeps/ieee754/ldbl-128/e_remainderl.c
@@ -23,6 +23,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const _Float128 zero = 0;
 
@@ -68,4 +69,6 @@ __ieee754_remainderl(_Float128 x, _Float128 p)
 	SET_LDOUBLE_MSW64(x,hx^sx);
 	return x;
 }
-strong_alias (__ieee754_remainderl, __remainderl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainderl, __remainderl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/e_sinhl.c b/sysdeps/ieee754/ldbl-128/e_sinhl.c
index 39e7cf3084a635a1b0c285cac75317e5094e8894..4fbab7ab5c49d8aed3c5c652f3b0ba849cb64e3b 100644
--- a/sysdeps/ieee754/ldbl-128/e_sinhl.c
+++ b/sysdeps/ieee754/ldbl-128/e_sinhl.c
@@ -57,6 +57,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const _Float128 one = 1.0, shuge = L(1.0e4931),
 ovf_thresh = L(1.1357216553474703894801348310092223067821E4);
@@ -115,4 +116,6 @@ __ieee754_sinhl (_Float128 x)
   /* |x| > overflowthreshold, sinhl(x) overflow */
   return x * shuge;
 }
-strong_alias (__ieee754_sinhl, __sinhl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sinhl, __sinhl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c b/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c
index f85fe678ba27828ac109a9e427c9d15d8aa820e0..8bc999d22ce681dba3e89a1e56caa13fa4a6c53c 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c
@@ -26,6 +26,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const long double
 one	= 1.0L,
@@ -59,4 +60,6 @@ __ieee754_acoshl(long double x)
 	    return __log1pl(t+sqrtl(2.0*t+t*t));
 	}
 }
-strong_alias (__ieee754_acoshl, __acoshl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acoshl, __acoshl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_acosl.c b/sysdeps/ieee754/ldbl-128ibm/e_acosl.c
index 1f8e405c9b0797bcf64a2e833bf86af204275a26..f0304d1a15dd529a81f684a9ba00ac7508a349c8 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_acosl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_acosl.c
@@ -56,6 +56,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const long double
   one = 1.0L,
@@ -313,4 +314,6 @@ __ieee754_acosl (long double x)
       return 2.0 * w;
     }
 }
-strong_alias (__ieee754_acosl, __acosl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acosl, __acosl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_asinl.c b/sysdeps/ieee754/ldbl-128ibm/e_asinl.c
index e8b0221a921d18aec7cf5b688e3d2e1ce7f1b913..f542622bceb09a9650e36283c74eca060fb492bc 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_asinl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_asinl.c
@@ -64,6 +64,7 @@
 #include <math-barriers.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double
   one = 1.0L,
@@ -248,4 +249,6 @@ __ieee754_asinl (long double x)
   else
     return -t;
 }
-strong_alias (__ieee754_asinl, __asinl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asinl, __asinl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c b/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
index b625323df3827f4ed132d8c8bd1557799c157df0..f348e7e52c63aa55ef493b208c87980c3c53e457 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
@@ -42,6 +42,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const long double
 tiny  = 1.0e-300L,
@@ -119,4 +120,6 @@ __ieee754_atan2l(long double y, long double x)
 		    return  (z-pi_lo)-pi;/* atan(-,-) */
 	}
 }
-strong_alias (__ieee754_atan2l, __atan2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2l, __atan2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c b/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
index 25c286b8ff7c31225a84dbdc90479e08c22ae43e..742fffb11f653d6810db74187dc633897577e49c 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
@@ -32,6 +32,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double one = 1.0L, huge = 1e300L;
 
@@ -69,4 +70,6 @@ __ieee754_atanhl(long double x)
 	    t = 0.5*__log1pl((x+x)/(one-x));
 	if(hx>=0) return t; else return -t;
 }
-strong_alias (__ieee754_atanhl, __atanhl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanhl, __atanhl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
index 327b2ab9600028f6c22b45e86440a7104d8964b0..745a05f06439017cbd9f37ef346634d94851d4ca 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
@@ -33,6 +33,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const long double one = 1.0L, half=0.5L, huge = 1.0e300L;
 
@@ -78,4 +79,6 @@ __ieee754_coshl (long double x)
     /* |x| > overflowthresold, cosh(x) overflow */
 	return huge*huge;
 }
-strong_alias (__ieee754_coshl, __coshl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_coshl, __coshl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c b/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c
index 5cc2818cddd3fd356181d85e6fdfdcf58754f80a..50e0d8ca24b6aa23f16d88f615b38e5b93668a61 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c
@@ -18,6 +18,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 static const long double log10_high = 0x2.4d763776aaap+0L;
 static const long double log10_low = 0x2.b05ba95b58ae0b4c28a38a3fb4p-48L;
@@ -45,4 +46,6 @@ __ieee754_exp10l (long double arg)
   exp_low = arg_high * log10_low + arg_low * M_LN10l;
   return __ieee754_expl (exp_high) * __ieee754_expl (exp_low);
 }
-strong_alias (__ieee754_exp10l, __exp10l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp10l, __exp10l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_expl.c b/sysdeps/ieee754/ldbl-128ibm/e_expl.c
index 69faad2afdac39cfce6aa2867cf0c0a144181ba7..20674d379cc80eba90c5e7bc1c1795808aa10f3b 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_expl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_expl.c
@@ -66,7 +66,7 @@
 #include <inttypes.h>
 #include <math_private.h>
 #include <fenv_private.h>
-
+#include <shlib-compat.h>
 
 #include "t_expl.h"
 
@@ -257,4 +257,6 @@ __ieee754_expl (long double x)
     return result;
   return result * scale_u.ld;
 }
-strong_alias (__ieee754_expl, __expl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_expl, __expl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c b/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c
index fae7dbe888b0e2418e94e0ac43b4ac218e9e001a..b4e9ed5516fc809838cd9ba091340e2a6f60e038 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c
@@ -21,6 +21,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <ieee754.h>
+#include <shlib-compat.h>
 
 static const long double one = 1.0, Zero[] = {0.0, -0.0,};
 
@@ -146,4 +147,6 @@ __ieee754_fmodl (long double x, long double y)
 	}
 	return x;		/* exact output */
 }
-strong_alias (__ieee754_fmodl, __fmodl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmodl, __fmodl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c b/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c
index 470c87d41012386c7ba25c40952498ea12420f40..d2a4668dece7690098a485f85a8572038e7dfa65 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c
@@ -23,6 +23,7 @@
 #include <fenv_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's
    approximation to gamma function.  */
@@ -217,4 +218,6 @@ __ieee754_gammal_r (long double x, int *signgamp)
   else
     return ret;
 }
-strong_alias (__ieee754_gammal_r, __gammal_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_gammal_r, __gammal_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c b/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c
index 842f77b7ed709732fe02b4c8db11f45fda122fdd..a6789a0be331ff116a430eed8617bb8d59232377 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c
@@ -45,6 +45,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_hypotl(long double x, long double y)
@@ -136,4 +137,6 @@ __ieee754_hypotl(long double x, long double y)
 	else
 	    return w;
 }
-strong_alias (__ieee754_hypotl, __hypotl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotl, __hypotl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_j0l.c b/sysdeps/ieee754/ldbl-128ibm/e_j0l.c
index 448cfb63fe4a3f58ec7ebd74980915486b363a1b..322b17e0831a509c13953355760c5cab454afaee 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_j0l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_j0l.c
@@ -21,6 +21,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* 1 / sqrt(pi) */
 static const long double ONEOSQPI = 5.6418958354775628694807945156077258584405E-1L;
@@ -716,7 +717,9 @@ __ieee754_j0l (long double x)
   z = ONEOSQPI * (p * cc - q * ss) / sqrtl (xx);
   return z;
 }
-strong_alias (__ieee754_j0l, __j0l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_j0l, __j0l_finite, GLIBC_2_15);
+#endif
 
 
 /* Y0(x) = 2/pi * log(x) * J0(x) + R(x^2)
@@ -861,4 +864,6 @@ long double
   z = ONEOSQPI * (p * ss + q * cc) / sqrtl (x);
   return z;
 }
-strong_alias (__ieee754_y0l, __y0l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y0l, __y0l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_j1l.c b/sysdeps/ieee754/ldbl-128ibm/e_j1l.c
index fada0c226e1d5559417c203aca5e80631a07e17d..d2ce14c50982b29fa02398509bed06c42bbe81ab 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_j1l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_j1l.c
@@ -24,6 +24,7 @@
 #include <fenv_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* 1 / sqrt(pi) */
 static const long double ONEOSQPI = 5.6418958354775628694807945156077258584405E-1L;
@@ -733,7 +734,9 @@ __ieee754_j1l (long double x)
     z = -z;
   return z;
 }
-strong_alias (__ieee754_j1l, __j1l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_j1l, __j1l_finite, GLIBC_2_15);
+#endif
 
 
 /* Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2)
@@ -883,4 +886,6 @@ __ieee754_y1l (long double x)
   z = ONEOSQPI * (p * ss + q * cc) / sqrtl (xx);
   return z;
 }
-strong_alias (__ieee754_y1l, __y1l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm,__ieee754_y1l, __y1l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_jnl.c b/sysdeps/ieee754/ldbl-128ibm/e_jnl.c
index 478824c8fad5964466ff0874e8b671d262b7225c..7636776f9f019b16a082fde342c3e079774639b3 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_jnl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_jnl.c
@@ -62,6 +62,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double
   invsqrtpi = 5.6418958354775628694807945156077258584405E-1L,
@@ -308,7 +309,9 @@ __ieee754_jnl (int n, long double x)
     math_check_force_underflow (ret);
   return ret;
 }
-strong_alias (__ieee754_jnl, __jnl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_jnl, __jnl_finite, GLIBC_2_15);
+#endif
 
 long double
 __ieee754_ynl (int n, long double x)
@@ -424,4 +427,6 @@ __ieee754_ynl (int n, long double x)
     ret = copysignl (LDBL_MAX, ret) * LDBL_MAX;
   return ret;
 }
-strong_alias (__ieee754_ynl, __ynl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_ynl, __ynl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c
index ae2e6559b02149f823dc37265c014356ca435b1b..509ddfd2ddfb4ac1a3413c37356d7d6891b857a1 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c
@@ -21,6 +21,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
 static const long double MAXLGM = 0x5.d53649e2d469dbc1f01e99fd66p+1012L;
@@ -989,4 +990,6 @@ __ieee754_lgammal_r (long double x, int *signgamp)
   q += neval (p, RASY, NRASY) / x;
   return (q);
 }
-strong_alias (__ieee754_lgammal_r, __lgammal_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_lgammal_r, __lgammal_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_log10l.c b/sysdeps/ieee754/ldbl-128ibm/e_log10l.c
index 62e3214ca436f768e07035512dde5019ce184515..0412b4f5047ec06dcfb121885a6bf59c2529a189 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_log10l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_log10l.c
@@ -62,6 +62,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 /* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
  * 1/sqrt(2) <= x < sqrt(2)
@@ -258,4 +259,6 @@ done:
   z += e * L102A;
   return (z);
 }
-strong_alias (__ieee754_log10l, __log10l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log10l, __log10l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_log2l.c b/sysdeps/ieee754/ldbl-128ibm/e_log2l.c
index 1f8b6e9d7f1c8d32ff954e3d63d2710bab28112d..5b4e9f1dbb441199a00cdf47f37578b00a579846 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_log2l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_log2l.c
@@ -61,6 +61,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 /* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
  * 1/sqrt(2) <= x < sqrt(2)
@@ -251,4 +252,6 @@ done:
   z += e;
   return (z);
 }
-strong_alias (__ieee754_log2l, __log2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log2l, __log2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_logl.c b/sysdeps/ieee754/ldbl-128ibm/e_logl.c
index c44feca65bc993d3a7a1c7fc065352550687ca77..80fb721c0d42c6d20e0d46d0259b8139d6eff023 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_logl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_logl.c
@@ -60,6 +60,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 /* log(1+x) = x - .5 x^2 + x^3 l(x)
    -.0078125 <= x <= +.0078125
@@ -297,4 +298,6 @@ __ieee754_logl(long double x)
   y += e * ln2a;
   return y;
 }
-strong_alias (__ieee754_logl, __logl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_logl, __logl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_powl.c b/sysdeps/ieee754/ldbl-128ibm/e_powl.c
index 1f0f2b4c0418971e2e04e13aa7932ac5a3bdb196..ed7fa01c9983d8fd22fa87017cfd90572e47daa3 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_powl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_powl.c
@@ -67,6 +67,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double bp[] = {
   1.0L,
@@ -413,4 +414,6 @@ __ieee754_powl (long double x, long double y)
   math_check_force_underflow (z);
   return z;
 }
-strong_alias (__ieee754_powl, __powl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_powl, __powl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c b/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
index efa83bdab7d761d6255fba1a21c3523861366397..9b212e947751ac0fc2520541bd9f621bbf78b8b9 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
@@ -23,6 +23,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const long double zero = 0.0L;
 
@@ -78,4 +79,6 @@ __ieee754_remainderl(long double x, long double p)
 	  x = -x;
 	return x;
 }
-strong_alias (__ieee754_remainderl, __remainderl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainderl, __remainderl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
index f869fb068cfdf4a88d090b3f0bad5c914d515297..3a777046e99f8256f3df1e280565fa0b54d38ccc 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
@@ -32,6 +32,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double one = 1.0, shuge = 1.0e307;
 
@@ -77,4 +78,6 @@ __ieee754_sinhl(long double x)
     /* |x| > overflowthresold, sinh(x) overflow */
 	return x*shuge;
 }
-strong_alias (__ieee754_sinhl, __sinhl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sinhl, __sinhl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c b/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c
index cd9d43339fa4844c4b70de2cf9a5051cc68f5d51..bcad9cd1f1bc1129bea5a1061f4652a96815eb83 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c
@@ -33,6 +33,7 @@
 /*********************************************************************/
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 typedef union {int64_t i[2]; long double x; double d[2]; } mynumber;
 
@@ -99,4 +100,6 @@ long double __ieee754_sqrtl(long double x)
     return tm256*__ieee754_sqrtl(x*t512);
   }
 }
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_acoshl.c b/sysdeps/ieee754/ldbl-96/e_acoshl.c
index 56b04d4cc43122e4e40f5d7c036932cfb050ba9c..079f21fb6d72a14ab2277a11ed88fdee8524b062 100644
--- a/sysdeps/ieee754/ldbl-96/e_acoshl.c
+++ b/sysdeps/ieee754/ldbl-96/e_acoshl.c
@@ -30,6 +30,7 @@
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const long double
 one	= 1.0,
@@ -58,4 +59,6 @@ __ieee754_acoshl(long double x)
 	    return __log1pl(t+sqrtl(2.0*t+t*t));
 	}
 }
-strong_alias (__ieee754_acoshl, __acoshl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acoshl, __acoshl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_asinl.c b/sysdeps/ieee754/ldbl-96/e_asinl.c
index 806906a58a411bcb246c49cef4d6ce72ee1dab51..728990b07734a7bc3eb4ebfff458a3a415c7d16f 100644
--- a/sysdeps/ieee754/ldbl-96/e_asinl.c
+++ b/sysdeps/ieee754/ldbl-96/e_asinl.c
@@ -62,6 +62,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double
   one = 1.0L,
@@ -155,4 +156,6 @@ __ieee754_asinl (long double x)
   else
     return -t;
 }
-strong_alias (__ieee754_asinl, __asinl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asinl, __asinl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_atanhl.c b/sysdeps/ieee754/ldbl-96/e_atanhl.c
index 7312f84329db49c4787826b22f42fca72550e4cf..fa4a1c31fdc1806bb265d7b1490202e3c5bff362 100644
--- a/sysdeps/ieee754/ldbl-96/e_atanhl.c
+++ b/sysdeps/ieee754/ldbl-96/e_atanhl.c
@@ -37,6 +37,7 @@
 #include <math-barriers.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double one = 1.0, huge = 1e4900L;
 
@@ -68,4 +69,6 @@ __ieee754_atanhl(long double x)
 	    t = 0.5*__log1pl((x+x)/(one-x));
 	if(se<=0x7fff) return t; else return -t;
 }
-strong_alias (__ieee754_atanhl, __atanhl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atanhl, __atanhl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_coshl.c b/sysdeps/ieee754/ldbl-96/e_coshl.c
index 1edf2c154254f98ec97895458c55b3d6c16024a8..6e9e49d239f9bed8f960a439737ecf5bb2fe5a8a 100644
--- a/sysdeps/ieee754/ldbl-96/e_coshl.c
+++ b/sysdeps/ieee754/ldbl-96/e_coshl.c
@@ -36,6 +36,7 @@ static char rcsid[] = "$NetBSD: e_cosh.c,v 1.7 1995/05/10 20:44:58 jtc Exp $";
 
 #include <math.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static const long double one = 1.0, half=0.5, huge = 1.0e4900L;
 
@@ -84,4 +85,6 @@ __ieee754_coshl (long double x)
     /* |x| >= log(2*maxdouble), cosh(x) overflow */
 	return huge*huge;
 }
-strong_alias (__ieee754_coshl, __coshl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_coshl, __coshl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_gammal_r.c b/sysdeps/ieee754/ldbl-96/e_gammal_r.c
index fceb193a415cf4b5ba11ef36b9d1375320e2fc5e..4c29eaafe0689a6593b0f1c6c6bd4bdb51d356bd 100644
--- a/sysdeps/ieee754/ldbl-96/e_gammal_r.c
+++ b/sysdeps/ieee754/ldbl-96/e_gammal_r.c
@@ -22,6 +22,7 @@
 #include <fenv_private.h>
 #include <math-underflow.h>
 #include <float.h>
+#include <shlib-compat.h>
 
 /* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's
    approximation to gamma function.  */
@@ -209,4 +210,6 @@ __ieee754_gammal_r (long double x, int *signgamp)
   else
     return ret;
 }
-strong_alias (__ieee754_gammal_r, __gammal_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_gammal_r, __gammal_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_hypotl.c b/sysdeps/ieee754/ldbl-96/e_hypotl.c
index f664e30c987a3c18000ec1c34b1d3e7e7a20ac33..f54b50f97e215d44bd6f1035a7cc7a2049b21b0f 100644
--- a/sysdeps/ieee754/ldbl-96/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-96/e_hypotl.c
@@ -49,6 +49,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 long double __ieee754_hypotl(long double x, long double y)
 {
@@ -140,4 +141,6 @@ long double __ieee754_hypotl(long double x, long double y)
 	    return w;
 	} else return w;
 }
-strong_alias (__ieee754_hypotl, __hypotl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotl, __hypotl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_j0l.c b/sysdeps/ieee754/ldbl-96/e_j0l.c
index e720ae955801616424395aa54b91df72ee1ecd5e..6f08df46a32d7c6e7e2cffe5b23962709540b939 100644
--- a/sysdeps/ieee754/ldbl-96/e_j0l.c
+++ b/sysdeps/ieee754/ldbl-96/e_j0l.c
@@ -74,6 +74,7 @@
 #include <math.h>
 #include <math-barriers.h>
 #include <math_private.h>
+#include <shlib-compat.h>
 
 static long double pzero (long double), qzero (long double);
 
@@ -165,7 +166,9 @@ __ieee754_j0l (long double x)
       return ((one + u) * (one - u) + z * (r / s));
     }
 }
-strong_alias (__ieee754_j0l, __j0l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_j0l, __j0l_finite, GLIBC_2_15);
+#endif
 
 
 /* y0(x) = 2/pi ln(x) J0(x) + U(x^2)/V(x^2)
@@ -256,7 +259,9 @@ __ieee754_y0l (long double x)
   v = V[0] + z * (V[1] + z * (V[2] + z * (V[3] + z * (V[4] + z))));
   return (u / v + tpi * (__ieee754_j0l (x) * __ieee754_logl (x)));
 }
-strong_alias (__ieee754_y0l, __y0l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y0l, __y0l_finite, GLIBC_2_15);
+#endif
 
 /* The asymptotic expansions of pzero is
  *	1 - 9/128 s^2 + 11025/98304 s^4 - ...,	where s = 1/x.
diff --git a/sysdeps/ieee754/ldbl-96/e_j1l.c b/sysdeps/ieee754/ldbl-96/e_j1l.c
index 581615d563fce9b79cf23e5af15628fa61205398..9f4c58dcc706de68ad5a737c8961be511fe2e675 100644
--- a/sysdeps/ieee754/ldbl-96/e_j1l.c
+++ b/sysdeps/ieee754/ldbl-96/e_j1l.c
@@ -76,6 +76,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static long double pone (long double), qone (long double);
 
@@ -167,7 +168,9 @@ __ieee754_j1l (long double x)
   r *= x;
   return (x * 0.5 + r / s);
 }
-strong_alias (__ieee754_j1l, __j1l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_j1l, __j1l_finite, GLIBC_2_15);
+#endif
 
 
 /* Y1(x) = 2/pi * (log(x) * j1(x) - 1/x) + x R(x^2)
@@ -254,7 +257,9 @@ __ieee754_y1l (long double x)
   return (x * (u / v) +
 	  tpi * (__ieee754_j1l (x) * __ieee754_logl (x) - one / x));
 }
-strong_alias (__ieee754_y1l, __y1l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_y1l, __y1l_finite, GLIBC_2_15);
+#endif
 
 
 /* For x >= 8, the asymptotic expansions of pone is
diff --git a/sysdeps/ieee754/ldbl-96/e_jnl.c b/sysdeps/ieee754/ldbl-96/e_jnl.c
index 6c1c4b4653eb6195dd0f762c868fd82e7f2b830f..1808542a1e21387bb34f9382d15bbaa942e40e8b 100644
--- a/sysdeps/ieee754/ldbl-96/e_jnl.c
+++ b/sysdeps/ieee754/ldbl-96/e_jnl.c
@@ -62,6 +62,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double
   invsqrtpi = 5.64189583547756286948079e-1L, two = 2.0e0L, one = 1.0e0L;
@@ -301,7 +302,9 @@ __ieee754_jnl (int n, long double x)
     math_check_force_underflow (ret);
   return ret;
 }
-strong_alias (__ieee754_jnl, __jnl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_jnl, __jnl_finite, GLIBC_2_15);
+#endif
 
 long double
 __ieee754_ynl (int n, long double x)
@@ -407,4 +410,6 @@ __ieee754_ynl (int n, long double x)
     ret = copysignl (LDBL_MAX, ret) * LDBL_MAX;
   return ret;
 }
-strong_alias (__ieee754_ynl, __ynl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_ynl, __ynl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_lgammal_r.c b/sysdeps/ieee754/ldbl-96/e_lgammal_r.c
index a5d6d0dea5e5d86be675ce163cd5a7328082ed64..0a62c512bc16b3fec245b1a16a5d6f52579719c6 100644
--- a/sysdeps/ieee754/ldbl-96/e_lgammal_r.c
+++ b/sysdeps/ieee754/ldbl-96/e_lgammal_r.c
@@ -94,6 +94,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <libc-diag.h>
+#include <shlib-compat.h>
 
 static const long double
   half = 0.5L,
@@ -436,4 +437,6 @@ __ieee754_lgammal_r (long double x, int *signgamp)
   DIAG_POP_NEEDS_COMMENT;
   return r;
 }
-strong_alias (__ieee754_lgammal_r, __lgammal_r_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_lgammal_r, __lgammal_r_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/ieee754/ldbl-96/e_sinhl.c b/sysdeps/ieee754/ldbl-96/e_sinhl.c
index a4b39783bcca7d8aef10a52cbb407f929fed8a13..106101de29d27cda1d20fa69f9bc7cb148b9716a 100644
--- a/sysdeps/ieee754/ldbl-96/e_sinhl.c
+++ b/sysdeps/ieee754/ldbl-96/e_sinhl.c
@@ -40,6 +40,7 @@ static char rcsid[] = "$NetBSD: $";
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <shlib-compat.h>
 
 static const long double one = 1.0, shuge = 1.0e4931L;
 
@@ -85,4 +86,6 @@ __ieee754_sinhl(long double x)
     /* |x| > overflowthreshold, sinhl(x) overflow */
 	return x*shuge;
 }
-strong_alias (__ieee754_sinhl, __sinhl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sinhl, __sinhl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/m68k/coldfire/fpu/e_sqrt.c b/sysdeps/m68k/coldfire/fpu/e_sqrt.c
index f9cf280fd6d7ac3a7064dd595b2fd9ff4c265310..ca3cca15a51e315559ae0c6e2a132f692cf2a9e4 100644
--- a/sysdeps/m68k/coldfire/fpu/e_sqrt.c
+++ b/sysdeps/m68k/coldfire/fpu/e_sqrt.c
@@ -15,10 +15,14 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <shlib-compat.h>
+
 double
 __ieee754_sqrt (double x)
 {
   asm ("fdsqrt.d %1,%0" : "=f" (x) : "fm" (x));
   return x;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/m68k/coldfire/fpu/e_sqrtf.c b/sysdeps/m68k/coldfire/fpu/e_sqrtf.c
index 61d94ee6ec55ff1a52980557242b50314ddbaf2f..4d97d01fa5e9f8aa6d77eccc7bd8c671b01a4692 100644
--- a/sysdeps/m68k/coldfire/fpu/e_sqrtf.c
+++ b/sysdeps/m68k/coldfire/fpu/e_sqrtf.c
@@ -15,6 +15,8 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <shlib-compat.h>
+
 float
 __ieee754_sqrtf (float x)
 {
@@ -22,4 +24,6 @@ __ieee754_sqrtf (float x)
   asm ("fssqrt.s %1,%0" : "=f" (result) : "dm" (x));
   return result;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/m68k/m680x0/fpu/e_atan2.c b/sysdeps/m68k/m680x0/fpu/e_atan2.c
index 8f41c4765741602ba4912be0ceefe7d28a615f3f..5bd03006b94f0b9f81fe7077770108dbbb8e94b4 100644
--- a/sysdeps/m68k/m680x0/fpu/e_atan2.c
+++ b/sysdeps/m68k/m680x0/fpu/e_atan2.c
@@ -18,6 +18,7 @@
 #include <math.h>
 #include <math_private.h>
 #include "mathimpl.h"
+#include <shlib-compat.h>
 
 #ifndef SUFF
 #define SUFF
@@ -101,4 +102,6 @@ s(__ieee754_atan2) (float_type y, float_type x)
     }
   return z;
 }
-strong_alias (s(__ieee754_atan2), CONCATX (s (__atan2), _finite))
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, s(__ieee754_atan2), CONCATX (s (__atan2), _finite), GLIBC_2_15);
+#endif
diff --git a/sysdeps/m68k/m680x0/fpu/e_pow.c b/sysdeps/m68k/m680x0/fpu/e_pow.c
index 010e127c257996557460148dd8d2e0ec0b4fd5df..71d0c5d9550aafb670135ebea50a669da6cfce09 100644
--- a/sysdeps/m68k/m680x0/fpu/e_pow.c
+++ b/sysdeps/m68k/m680x0/fpu/e_pow.c
@@ -18,6 +18,7 @@
 #include <math.h>
 #include <math_private.h>
 #include "mathimpl.h"
+#include <shlib-compat.h>
 
 #ifndef SUFF
 #define SUFF
@@ -123,4 +124,6 @@ s(__ieee754_pow) (float_type x, float_type y)
     z = m81(__ieee754_exp) (y * m81(__ieee754_log) (x));
   return z;
 }
-strong_alias (s(__ieee754_pow), CONCATX (s(__pow), _finite))
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, s(__ieee754_pow), CONCATX (s(__pow), _finite), GLIBC_2_15);
+#endif
diff --git a/sysdeps/m68k/m680x0/fpu/e_scalb.c b/sysdeps/m68k/m680x0/fpu/e_scalb.c
index dae8b9aa70a87e4036847dc774b4656b155c126e..80de704e9df4ac953c9dec1ebf8720692c0fc8b0 100644
--- a/sysdeps/m68k/m680x0/fpu/e_scalb.c
+++ b/sysdeps/m68k/m680x0/fpu/e_scalb.c
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <math_private.h>
 #include "mathimpl.h"
+#include <shlib-compat.h>
 
 #ifndef SUFF
 #define SUFF
@@ -57,4 +58,6 @@ s(__ieee754_scalb) (float_type x, float_type fn)
   __asm ("fscale%.x %1, %0" : "=f" (retval) : "f" (fn), "0" (x));
   return retval;
 }
-strong_alias (s(__ieee754_scalb), CONCATX (s(__scalb), _finite))
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, s(__ieee754_scalb), CONCATX (s(__scalb), _finite), GLIBC_2_15);
+#endif
diff --git a/sysdeps/mips/fpu/e_sqrt.c b/sysdeps/mips/fpu/e_sqrt.c
index 1a120fda91db5e08bac812e659b0e5a856c1a0d4..d45bdf93b8fc1f09f1caa9f26b134f3b96d66baa 100644
--- a/sysdeps/mips/fpu/e_sqrt.c
+++ b/sysdeps/mips/fpu/e_sqrt.c
@@ -18,7 +18,7 @@
 
 
 #include <sgidefs.h>
-
+#include <shlib-compat.h>
 
 #if (_MIPS_ISA >= _MIPS_ISA_MIPS2)
 
@@ -29,7 +29,9 @@ __ieee754_sqrt (double x)
   __asm__ ("sqrt.d %0,%1" : "=f" (z) : "f" (x));
   return z;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
 
 #else
 
diff --git a/sysdeps/mips/fpu/e_sqrtf.c b/sysdeps/mips/fpu/e_sqrtf.c
index 62ea79f581ba5ebd1a0082481b1f657fdf6d1c5b..61b3fcd9acd41c1f879e6ee2a8c5af9d1ee64502 100644
--- a/sysdeps/mips/fpu/e_sqrtf.c
+++ b/sysdeps/mips/fpu/e_sqrtf.c
@@ -18,7 +18,7 @@
 
 
 #include <sgidefs.h>
-
+#include <shlib-compat.h>
 
 #if (_MIPS_ISA >= _MIPS_ISA_MIPS2)
 
@@ -29,7 +29,9 @@ __ieee754_sqrtf (float x)
   __asm__ ("sqrt.s %0,%1" : "=f" (z) : "f" (x));
   return z;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
 
 #else
 
diff --git a/sysdeps/mips/mips64/e_sqrtl.c b/sysdeps/mips/mips64/e_sqrtl.c
index 0cd27441549d4c783147fd1d3a159170c60cdea7..4370a2a8b035a594f1ec9a10a5abd2956e368be1 100644
--- a/sysdeps/mips/mips64/e_sqrtl.c
+++ b/sysdeps/mips/mips64/e_sqrtl.c
@@ -21,6 +21,7 @@
 #include <stdlib.h>
 #include <soft-fp.h>
 #include <quad.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_sqrtl (const long double a)
@@ -36,4 +37,6 @@ __ieee754_sqrtl (const long double a)
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/fpu/e_hypot.c b/sysdeps/powerpc/fpu/e_hypot.c
index 039e5be4303f70e5afd3f1fd3d5900866249438c..93108737d7a9cb5fe4b9b60a38ab5ed2778de826 100644
--- a/sysdeps/powerpc/fpu/e_hypot.c
+++ b/sysdeps/powerpc/fpu/e_hypot.c
@@ -21,6 +21,7 @@
 #include <math_private.h>
 #include <math-underflow.h>
 #include <stdint.h>
+#include <shlib-compat.h>
 
 static const double two60   = 1.152921504606847e+18;
 static const double two500  = 3.2733906078961419e+150;
@@ -132,4 +133,8 @@ __ieee754_hypot (double x, double y)
     }
   return sqrt (x * x + y * y);
 }
-strong_alias (__ieee754_hypot, __hypot_finite)
+#ifndef __ieee754_hypot
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypot, __hypot_finite, GLIBC_2_15);
+# endif
+#endif
diff --git a/sysdeps/powerpc/fpu/e_hypotf.c b/sysdeps/powerpc/fpu/e_hypotf.c
index 0738b2d9a2946fc15f25ad311ff461cce15b18b9..7d5fe5dd85405ba680f29d9bbc312ee073c7e6d5 100644
--- a/sysdeps/powerpc/fpu/e_hypotf.c
+++ b/sysdeps/powerpc/fpu/e_hypotf.c
@@ -20,6 +20,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <stdint.h>
+#include <shlib-compat.h>
 
 /* __ieee754_hypotf(x,y)
 
@@ -73,4 +74,8 @@ __ieee754_hypotf (float x, float y)
 
   return sqrt ((double) x * x + (double) y * y);
 }
-strong_alias (__ieee754_hypotf, __hypotf_finite)
+#ifndef __ieee754_hypotf
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotf, __hypotf_finite, GLIBC_2_15);
+# endif
+#endif
diff --git a/sysdeps/powerpc/fpu/e_sqrt.c b/sysdeps/powerpc/fpu/e_sqrt.c
index 04381e69549b1653fd0f7fe1e3a77397931c2ac6..bb9692ee3a34eedec93581c33bb8d7e431765539 100644
--- a/sysdeps/powerpc/fpu/e_sqrt.c
+++ b/sysdeps/powerpc/fpu/e_sqrt.c
@@ -24,6 +24,7 @@
 #include <stdint.h>
 #include <sysdep.h>
 #include <ldsodefs.h>
+#include <shlib-compat.h>
 
 #ifndef _ARCH_PPCSQ
 static const double almost_half = 0.5000000000000001;	/* 0.5 + 2^-53 */
@@ -173,4 +174,6 @@ __ieee754_sqrt (double x)
 
   return z;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/fpu/e_sqrtf.c b/sysdeps/powerpc/fpu/e_sqrtf.c
index 5d9e900005a18e278814964ac38bb60b30e88e63..67d21e70261c144ef0fbe8be31e03c13e2dfa688 100644
--- a/sysdeps/powerpc/fpu/e_sqrtf.c
+++ b/sysdeps/powerpc/fpu/e_sqrtf.c
@@ -24,6 +24,7 @@
 #include <stdint.h>
 #include <sysdep.h>
 #include <ldsodefs.h>
+#include <shlib-compat.h>
 
 #ifndef _ARCH_PPCSQ
 static const float almost_half = 0.50000006;	/* 0.5 + 2^-24 */
@@ -148,4 +149,6 @@ __ieee754_sqrtf (float x)
 
   return z;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
index 92312a8a7c14af5a3bab4cc24d150f5e0b7aec9c..1548b35f619b0c9c78c4156e30a22df131fa496e 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
@@ -18,9 +18,6 @@
 
 #include <math.h>
 
-#undef strong_alias
-#define strong_alias(a, b)
-
 #define __ieee754_hypot __ieee754_hypot_power7
 
 #include <sysdeps/powerpc/fpu/e_hypot.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
index 32b008d06feaede68b31907374f53366c870ba4d..c831a8087debbf1fbfdef61c300064c58f4d2238 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
@@ -18,9 +18,6 @@
 
 #include <math.h>
 
-#undef strong_alias
-#define strong_alias(a, b)
-
 #define __ieee754_hypot __ieee754_hypot_ppc32
 
 #include <sysdeps/powerpc/fpu/e_hypot.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
index f49fda8cb1dba6f0878e685826d9670bb6f0230e..84144d7fcc48faadd6151b70daba506301e2f775 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
@@ -30,4 +30,6 @@ libc_ifunc (__ieee754_hypot,
 	    ? __ieee754_hypot_power7
             : __ieee754_hypot_ppc32);
 
-strong_alias (__ieee754_hypot, __hypot_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypot, __hypot_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
index 5b47501739f3ec2a205612f438a3338c98657c9a..ca160fc9f749bc9b0e74d2e50421b063384bccac 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
@@ -18,9 +18,6 @@
 
 #include <math.h>
 
-#undef strong_alias
-#define strong_alias(a, b)
-
 #define __ieee754_hypotf __ieee754_hypotf_power7
 
 #include <sysdeps/powerpc/fpu/e_hypotf.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
index 153e3bcb574433866a52900eb3100fd91f2f36f2..453e19307f213cde2bbdab60b144be4975a4f465 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
@@ -18,9 +18,6 @@
 
 #include <math.h>
 
-#undef strong_alias
-#define strong_alias(a, b)
-
 #define __ieee754_hypotf __ieee754_hypotf_ppc32
 
 #include <sysdeps/ieee754/flt-32/e_hypotf.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
index f637632b1759e26cb0218c934f160ce4a7575ceb..490060d0f0d998118058179c097144d82daeda1d 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
@@ -30,4 +30,6 @@ libc_ifunc (__ieee754_hypotf,
 	    ? __ieee754_hypotf_power7
             : __ieee754_hypotf_ppc32);
 
-strong_alias (__ieee754_hypotf, __hypotf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotf, __hypotf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S
index e0e14c2a470d80fc21611fd1ca4c3dde907c3111..069516e0841c688d39f2bb4c16e2b2bbcc17f0bd 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S
@@ -16,9 +16,6 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#undef strong_alias
-#define strong_alias(a, b)
-
 #define __ieee754_expf __ieee754_expf_power8
 
 #include <sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S>
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c
index dc0023c244f8f81df965d4ccfd3e739bab5c71a9..679cb70b27e2aa33880d1f7ed82394f3034cb159 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c
@@ -29,4 +29,6 @@ libc_ifunc (__ieee754_expf,
 	    ? __ieee754_expf_power8
 	    : __ieee754_expf_ppc64);
 
-strong_alias (__ieee754_expf, __expf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_expf, __expf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c
index da1e80f0d6d81ab02ed832de3d2cb0fbafde202b..a399b021296d186a79cc815830e7141af3c389b8 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c
@@ -18,9 +18,6 @@
 
 #include <math.h>
 
-#undef strong_alias
-#define strong_alias(a, b)
-
 #define __ieee754_hypot __ieee754_hypot_ppc64
 
 #include <sysdeps/powerpc/fpu/e_hypot.c>
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c
index 3bd04e95177ed30ee1b06e61c5ed4d5c9b167a0e..14bfd41baef21da51bf5deb4746e761a10551e5e 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c
@@ -30,4 +30,6 @@ libc_ifunc (__ieee754_hypot,
 	    ? __ieee754_hypot_power7
             : __ieee754_hypot_ppc64);
 
-strong_alias (__ieee754_hypot, __hypot_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypot, __hypot_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c
index 6d5d54bb79652102198572a779cac50a52bf2e30..c20d418c01a65c718d2e8c1f1ad577829c1dd7f6 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c
@@ -18,9 +18,6 @@
 
 #include <math.h>
 
-#undef strong_alias
-#define strong_alias(a, b)
-
 #define __ieee754_hypotf __ieee754_hypotf_ppc64
 
 #include <sysdeps/powerpc/fpu/e_hypotf.c>
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c
index 02c0ab497f70039e9de1b35690079bd75ded24bf..307f7c91d2e20ea74137d868e871e7309ac6b401 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c
@@ -30,4 +30,6 @@ libc_ifunc (__ieee754_hypotf,
 	    ? __ieee754_hypotf_power7
             : __ieee754_hypotf_ppc64);
 
-strong_alias (__ieee754_hypotf, __hypotf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_hypotf, __hypotf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/powerpc/powerpc64/le/fpu/e_sqrtf128.c b/sysdeps/powerpc/powerpc64/le/fpu/e_sqrtf128.c
index b5a841570ec0a24d19f7831efb742dc31a717f26..8985116c91af67938ef7edc5fddba7c6269d8ea3 100644
--- a/sysdeps/powerpc/powerpc64/le/fpu/e_sqrtf128.c
+++ b/sysdeps/powerpc/powerpc64/le/fpu/e_sqrtf128.c
@@ -27,6 +27,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
+#include <shlib-compat.h>
 
 /* Unavoidable hacks since TFmode is assumed to be binary128 when
    -mabi=ibmlongdouble is used.  */
@@ -53,4 +54,6 @@ __ieee754_sqrtf128 (__float128 a)
   FP_HANDLE_EXCEPTIONS;
   return r;
 }
-strong_alias (__ieee754_sqrtf128, __sqrtf128_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_26, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf128, __sqrtf128_finite, GLIBC_2_26);
+#endif
diff --git a/sysdeps/powerpc/powerpc64/le/power9/fpu/e_sqrtf128.c b/sysdeps/powerpc/powerpc64/le/power9/fpu/e_sqrtf128.c
index a36ccf1925bc77a64e6db1716c684152cc5165ea..c613ba6479288862d7b25d122e8a077a0267691c 100644
--- a/sysdeps/powerpc/powerpc64/le/power9/fpu/e_sqrtf128.c
+++ b/sysdeps/powerpc/powerpc64/le/power9/fpu/e_sqrtf128.c
@@ -26,6 +26,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <shlib-compat.h>
+
 __float128
 __ieee754_sqrtf128 (__float128 a)
 {
@@ -33,4 +35,6 @@ __ieee754_sqrtf128 (__float128 a)
   asm ("xssqrtqp %0,%1" : "=v" (z) : "v" (a));
   return z;
 }
-strong_alias (__ieee754_sqrtf128, __sqrtf128_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_26, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf128, __sqrtf128_finite, GLIBC_2_26);
+#endif
diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S b/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S
index 7469a728733d4f46b2615441ea163f44741dcc66..7931e6079954f2ccda8db9a10079722568e7d172 100644
--- a/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S
+++ b/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <sysdep.h>
+#include <shlib-compat.h>
 
 /* Short algorithm description:
  *
@@ -300,4 +301,8 @@ END(__ieee754_expf)
 	.4byte	0x7f800000	/* Single precision Inf.  */
 	.4byte	0		/* Single precision zero.  */
 
-strong_alias (__ieee754_expf, __expf_finite)
+#ifndef __ieee754_expf
+# if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_expf, __expf_finite, GLIBC_2_15);
+# endif
+#endif
diff --git a/sysdeps/riscv/e_sqrtl.c b/sysdeps/riscv/e_sqrtl.c
index 2ac35c603763236bf8383b11ab1cf64391f41d4e..cab624bd874682b7086ab644ae52f651990ca6a3 100644
--- a/sysdeps/riscv/e_sqrtl.c
+++ b/sysdeps/riscv/e_sqrtl.c
@@ -19,6 +19,7 @@
 #include <stdlib.h>
 #include <soft-fp/soft-fp.h>
 #include <soft-fp/quad.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_sqrtl (const long double a)
@@ -34,4 +35,6 @@ __ieee754_sqrtl (const long double a)
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/riscv/rvd/e_sqrt.c b/sysdeps/riscv/rvd/e_sqrt.c
index 4cd354ce94c4163c6d7adf0d008e0a5a975e3a28..98e06596afcb66ef932edf32a13b8008e087ad3d 100644
--- a/sysdeps/riscv/rvd/e_sqrt.c
+++ b/sysdeps/riscv/rvd/e_sqrt.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
+#include <shlib-compat.h>
 
 double
 __ieee754_sqrt (double x)
@@ -24,4 +25,6 @@ __ieee754_sqrt (double x)
   asm ("fsqrt.d %0, %1" : "=f" (x) : "f" (x));
   return x;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/riscv/rvf/e_sqrtf.c b/sysdeps/riscv/rvf/e_sqrtf.c
index e7576784020dc4b4f6066ec2a682690c9440a20c..b73ea68be3052c673a9dbc1d57131fa0436cedae 100644
--- a/sysdeps/riscv/rvf/e_sqrtf.c
+++ b/sysdeps/riscv/rvf/e_sqrtf.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
+#include <shlib-compat.h>
 
 float
 __ieee754_sqrtf (float x)
@@ -24,4 +25,6 @@ __ieee754_sqrtf (float x)
   asm ("fsqrt.s %0, %1" : "=f" (x) : "f" (x));
   return x;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/s390/fpu/e_sqrt.c b/sysdeps/s390/fpu/e_sqrt.c
index 13d096d7a2607009c0581aaeca99f3c96905a5c3..d82eecdca4055e8d4590684337785d63c4733207 100644
--- a/sysdeps/s390/fpu/e_sqrt.c
+++ b/sysdeps/s390/fpu/e_sqrt.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 double
 __ieee754_sqrt (double x)
@@ -26,4 +27,6 @@ __ieee754_sqrt (double x)
   __asm__ ( "sqdbr %0,%1" : "=f" (res) : "f" (x) );
   return res;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/s390/fpu/e_sqrtf.c b/sysdeps/s390/fpu/e_sqrtf.c
index fbb939c2717ff625e830e5cdb1a54a3e5538a2ce..95cb4347e1c41e14279998d3f54d4635f05af229 100644
--- a/sysdeps/s390/fpu/e_sqrtf.c
+++ b/sysdeps/s390/fpu/e_sqrtf.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 float
 __ieee754_sqrtf (float x)
@@ -26,4 +27,6 @@ __ieee754_sqrtf (float x)
   __asm__ ( "sqebr %0,%1" : "=f" (res) : "f" (x) );
   return res;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/s390/fpu/e_sqrtl.c b/sysdeps/s390/fpu/e_sqrtl.c
index 3f453be1fc53772b7c2fa90dfeb52a3568abbf61..5cf9b2a2702bd4cdeb1af61e237f8a35d672227b 100644
--- a/sysdeps/s390/fpu/e_sqrtl.c
+++ b/sysdeps/s390/fpu/e_sqrtl.c
@@ -18,6 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 long double
 __ieee754_sqrtl (long double x)
@@ -27,4 +28,6 @@ __ieee754_sqrtl (long double x)
   __asm__ ( "sqxbr %0,%1" : "=f" (res) : "f" (x) );
   return res;
 }
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/sparc/sparc32/e_sqrt.c b/sysdeps/sparc/sparc32/e_sqrt.c
index 00369dcb61a969aa25c8fa7aff5ba09b1184547c..eaeed0926e9a3c622b3307a6a119f5ce664c9f79 100644
--- a/sysdeps/sparc/sparc32/e_sqrt.c
+++ b/sysdeps/sparc/sparc32/e_sqrt.c
@@ -17,6 +17,7 @@
 
 #include <errno.h>
 #include <math.h>
+#include <shlib-compat.h>
 
 #ifndef	__GNUC__
   #error This file uses GNU C extensions; you must compile with GCC.
@@ -30,4 +31,6 @@ __ieee754_sqrt (double x)
   asm ("fsqrtd %1, %0" : "=f" (result) : "f" (x));
   return result;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/sparc/sparc64/fpu/e_sqrtl.c b/sysdeps/sparc/sparc64/fpu/e_sqrtl.c
index 7742770148a5d255dcc75beda183d466d0641a57..1917402cd1b0bf9ca6f1649ca6514ae1d1d719e1 100644
--- a/sysdeps/sparc/sparc64/fpu/e_sqrtl.c
+++ b/sysdeps/sparc/sparc64/fpu/e_sqrtl.c
@@ -18,6 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
+#include <shlib-compat.h>
 
 extern void _Qp_sqrt(long double *, const long double *);
 
@@ -28,4 +29,6 @@ __ieee754_sqrtl (long double x)
   _Qp_sqrt (&ret, &x);
   return ret;
 }
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86/fpu/e_sqrtf128.c b/sysdeps/x86/fpu/e_sqrtf128.c
index d5aa9d03674879ffa4c82a4b69665510efc4b227..a581ddd0dfc66123ceb4a23df197d9b4be70ef8d 100644
--- a/sysdeps/x86/fpu/e_sqrtf128.c
+++ b/sysdeps/x86/fpu/e_sqrtf128.c
@@ -28,6 +28,7 @@
 
 #include <soft-fp.h>
 #include <quad.h>
+#include <shlib-compat.h>
 
 __float128
 __ieee754_sqrtf128 (__float128 a)
@@ -44,4 +45,7 @@ __ieee754_sqrtf128 (__float128 a)
   FP_HANDLE_EXCEPTIONS;
   return r;
 }
-strong_alias (__ieee754_sqrtf128, __sqrtf128_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_26, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf128, __sqrtf128_finite, GLIBC_2_26);
+#endif
+
diff --git a/sysdeps/x86_64/fpu/e_exp2l.S b/sysdeps/x86_64/fpu/e_exp2l.S
index 0e059b7565ad964104b48c8b518c7fa3553bf960..119fa9b0fef5cb9cd653ea4f6ddd14c861400073 100644
--- a/sysdeps/x86_64/fpu/e_exp2l.S
+++ b/sysdeps/x86_64/fpu/e_exp2l.S
@@ -7,6 +7,7 @@
 
 #include <machine/asm.h>
 #include <x86_64-math-asm.h>
+#include <shlib-compat.h>
 
 DEFINE_LDBL_MIN
 
@@ -55,4 +56,6 @@ ENTRY(__ieee754_exp2l)
 	fldz				/* Set result to 0.  */
 2:	ret
 END (__ieee754_exp2l)
-strong_alias (__ieee754_exp2l, __exp2l_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp2l, __exp2l_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86_64/fpu/e_fmodl.S b/sysdeps/x86_64/fpu/e_fmodl.S
index 07c50df8d12678eeea168ac7ae12f56d5067fdb1..1df1f924ec876a33b1a6f0f8971b76257939e02a 100644
--- a/sysdeps/x86_64/fpu/e_fmodl.S
+++ b/sysdeps/x86_64/fpu/e_fmodl.S
@@ -7,6 +7,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 RCSID("$NetBSD: $")
 
@@ -20,4 +21,6 @@ ENTRY(__ieee754_fmodl)
 	fstp	%st(1)
 	ret
 END (__ieee754_fmodl)
-strong_alias (__ieee754_fmodl, __fmodl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_fmodl, __fmodl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86_64/fpu/e_powl.S b/sysdeps/x86_64/fpu/e_powl.S
index 5a527316be521c0992513adb238b6ffdb248c2c8..7a4f700e1a58123174092eb6ce1a76e7719fd981 100644
--- a/sysdeps/x86_64/fpu/e_powl.S
+++ b/sysdeps/x86_64/fpu/e_powl.S
@@ -19,6 +19,7 @@
 
 #include <machine/asm.h>
 #include <x86_64-math-asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata.cst8,"aM",@progbits,8
 
@@ -430,4 +431,6 @@ ENTRY(__ieee754_powl)
 	ret
 
 END(__ieee754_powl)
-strong_alias (__ieee754_powl, __powl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_powl, __powl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86_64/fpu/e_remainderl.S b/sysdeps/x86_64/fpu/e_remainderl.S
index 4ee0910912fc65f5fab52a16c3f7d3c9aafdbd25..b4f148d48ea578e16d9ffc366418366dc4ea2a8d 100644
--- a/sysdeps/x86_64/fpu/e_remainderl.S
+++ b/sysdeps/x86_64/fpu/e_remainderl.S
@@ -7,6 +7,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 ENTRY(__ieee754_remainderl)
 	fldt	24(%rsp)
@@ -18,4 +19,6 @@ ENTRY(__ieee754_remainderl)
 	fstp	%st(1)
 	ret
 END (__ieee754_remainderl)
-strong_alias (__ieee754_remainderl, __remainderl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_remainderl, __remainderl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86_64/fpu/e_scalbl.S b/sysdeps/x86_64/fpu/e_scalbl.S
index 2982dc3b9e7cb0d9b2bffaf6744eed42b8213738..4ca50c528abbc23a2a1c1c93faa694a7bfb1bb14 100644
--- a/sysdeps/x86_64/fpu/e_scalbl.S
+++ b/sysdeps/x86_64/fpu/e_scalbl.S
@@ -9,6 +9,7 @@
  */
 
 #include <machine/asm.h>
+#include <shlib-compat.h>
 
 	.section .rodata
 
@@ -86,4 +87,6 @@ ENTRY(__ieee754_scalbl)
 	fdiv	%st
 	ret
 END(__ieee754_scalbl)
-strong_alias (__ieee754_scalbl, __scalbl_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_scalbl, __scalbl_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86_64/fpu/e_sqrt.c b/sysdeps/x86_64/fpu/e_sqrt.c
index fa0d39d34b9e79fab93952a977c205e320fd34a0..b6d8939c03429d74c17f948205b22b5471d478c1 100644
--- a/sysdeps/x86_64/fpu/e_sqrt.c
+++ b/sysdeps/x86_64/fpu/e_sqrt.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 #undef __ieee754_sqrt
 double
@@ -28,4 +29,6 @@ __ieee754_sqrt (double x)
 
   return res;
 }
-strong_alias (__ieee754_sqrt, __sqrt_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86_64/fpu/e_sqrtf.c b/sysdeps/x86_64/fpu/e_sqrtf.c
index 57d0dc72704179e5112575d82942778eb4bc9242..94f98a25df6aaffc15ed30d4caa6a0f94777f6c5 100644
--- a/sysdeps/x86_64/fpu/e_sqrtf.c
+++ b/sysdeps/x86_64/fpu/e_sqrtf.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math_private.h>
+#include <shlib-compat.h>
 
 #undef __ieee754_sqrtf
 float
@@ -28,4 +29,6 @@ __ieee754_sqrtf (float x)
 
   return res;
 }
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_15);
+#endif
diff --git a/sysdeps/x86_64/fpu/multiarch/e_asin.c b/sysdeps/x86_64/fpu/multiarch/e_asin.c
index bc533f80b288f7a06145489999fa55eb018ac70b..838d5f38003b105d476d9901f5b55143c39f1f9b 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_asin.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_asin.c
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <shlib-compat.h>
+
 extern double __redirect_ieee754_asin (double);
 extern double __redirect_ieee754_acos (double);
 
@@ -24,7 +26,9 @@ extern double __redirect_ieee754_acos (double);
 
 libc_ifunc_redirected (__redirect_ieee754_asin, __ieee754_asin,
 		       IFUNC_SELECTOR ());
-strong_alias (__ieee754_asin, __asin_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_asin, __asin_finite, GLIBC_2_15);
+#endif
 
 #undef SYMBOL_NAME
 #define SYMBOL_NAME ieee754_acos
@@ -32,8 +36,9 @@ strong_alias (__ieee754_asin, __asin_finite)
 
 libc_ifunc_redirected (__redirect_ieee754_acos, __ieee754_acos,
 		       IFUNC_SELECTOR ());
-strong_alias (__ieee754_acos, __acos_finite)
-
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_acos, __acos_finite, GLIBC_2_15);
+#endif
 
 #define __ieee754_acos __ieee754_acos_sse2
 #define __ieee754_asin __ieee754_asin_sse2
diff --git a/sysdeps/x86_64/fpu/multiarch/e_atan2.c b/sysdeps/x86_64/fpu/multiarch/e_atan2.c
index d75aecbfbc4ef6c22f16d93d43e2f6a5e71ed889..5d5dca0592448631469e20c8f4a5ab7cf0fde2e4 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_atan2.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_atan2.c
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <shlib-compat.h>
+
 extern double __redirect_ieee754_atan2 (double, double);
 
 #define SYMBOL_NAME ieee754_atan2
@@ -23,7 +25,9 @@ extern double __redirect_ieee754_atan2 (double, double);
 
 libc_ifunc_redirected (__redirect_ieee754_atan2,
 		       __ieee754_atan2, IFUNC_SELECTOR ());
-strong_alias (__ieee754_atan2, __atan2_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_atan2, __atan2_finite, GLIBC_2_15);
+#endif
 
 #define __ieee754_atan2 __ieee754_atan2_sse2
 #include <sysdeps/ieee754/dbl-64/e_atan2.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp.c b/sysdeps/x86_64/fpu/multiarch/e_exp.c
index e9e05069ca9c25ef4eb92fcc0b33923e0747e662..4791c695864128ca4fa8c987a05793c9ad897a21 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
+#include <shlib-compat.h>
 
 extern double __redirect_ieee754_exp (double);
 
@@ -25,7 +26,9 @@ extern double __redirect_ieee754_exp (double);
 
 libc_ifunc_redirected (__redirect_ieee754_exp, __ieee754_exp,
 		       IFUNC_SELECTOR ());
-strong_alias (__ieee754_exp, __exp_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_exp, __exp_finite, GLIBC_2_15);
+#endif
 
 #define __exp __ieee754_exp_sse2
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp2f.c b/sysdeps/x86_64/fpu/multiarch/e_exp2f.c
index 777afdc33b44d238a542d8bf58cf20428096fae0..cc8ec2ecedac37e789e47e5dea0359400c9ba0b3 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_exp2f.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp2f.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <libm-alias-float.h>
+#include <shlib-compat.h>
 
 extern float __redirect_exp2f (float);
 
@@ -26,15 +27,16 @@ extern float __redirect_exp2f (float);
 libc_ifunc_redirected (__redirect_exp2f, __exp2f, IFUNC_SELECTOR ());
 
 #ifdef SHARED
-# include <shlib-compat.h>
-versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_exp2f, exp2f, GLIBC_2_27);
 libm_alias_float_other (__exp2, exp2)
 #else
 libm_alias_float (__exp2, exp2)
 #endif
 
 strong_alias (__exp2f, __ieee754_exp2f)
-strong_alias (__exp2f, __exp2f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __exp2f, __exp2f_finite, GLIBC_2_15);
+#endif
 
 #define __exp2f __exp2f_sse2
 #include <sysdeps/ieee754/flt-32/e_exp2f.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_expf.c b/sysdeps/x86_64/fpu/multiarch/e_expf.c
index ba38154fd7be7f63949a48803ba0b4a18cf5a1f9..3d2715bc27fbde055395ca4a3570346a0d9ac420 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_expf.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_expf.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <libm-alias-float.h>
+#include <shlib-compat.h>
 
 extern float __redirect_expf (float);
 
@@ -29,15 +30,16 @@ libc_ifunc_redirected (__redirect_expf, __expf, IFUNC_SELECTOR ());
 __hidden_ver1 (__expf, __GI___expf, __redirect_expf)
   __attribute__ ((visibility ("hidden")));
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __expf, expf, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_expf, expf, GLIBC_2_27);
 libm_alias_float_other (__exp, exp)
 #else
 libm_alias_float (__exp, exp)
 #endif
 
 strong_alias (__expf, __ieee754_expf)
-strong_alias (__expf, __expf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __expf, __expf_finite, GLIBC_2_15);
+#endif
 
 #define __expf __expf_sse2
 #include <sysdeps/ieee754/flt-32/e_expf.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log.c b/sysdeps/x86_64/fpu/multiarch/e_log.c
index 80aa764e272ead9ac81f699f04c4204f5abf7739..435fb03edfdb55f7a6a993f8dd363a6deef6c8ef 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
+#include <shlib-compat.h>
 
 extern double __redirect_ieee754_log (double);
 
@@ -25,7 +26,9 @@ extern double __redirect_ieee754_log (double);
 
 libc_ifunc_redirected (__redirect_ieee754_log, __ieee754_log,
 		       IFUNC_SELECTOR ());
-strong_alias (__ieee754_log, __log_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_log, __log_finite, GLIBC_2_15);
+#endif
 
 #define __log __ieee754_log_sse2
 #include <sysdeps/ieee754/dbl-64/e_log.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_log2f.c b/sysdeps/x86_64/fpu/multiarch/e_log2f.c
index fcf09271368d4f0184415fde9d3ee612d343d60c..b878b6c54ffa24ea17303df4957ae490af507443 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_log2f.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_log2f.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <libm-alias-float.h>
+#include <shlib-compat.h>
 
 extern float __redirect_log2f (float);
 
@@ -29,15 +30,16 @@ libc_ifunc_redirected (__redirect_log2f, __log2f, IFUNC_SELECTOR ());
 __hidden_ver1 (__log2f, __GI___log2f, __redirect_log2f)
   __attribute__ ((visibility ("hidden")));
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_log2f, log2f, GLIBC_2_27);
 libm_alias_float_other (__log2, log2)
 #else
 libm_alias_float (__log2, log2)
 #endif
 
 strong_alias (__log2f, __ieee754_log2f)
-strong_alias (__log2f, __log2f_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __log2f, __log2f_finite, GLIBC_2_15);
+#endif
 
 #define __log2f __log2f_sse2
 #include <sysdeps/ieee754/flt-32/e_log2f.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_logf.c b/sysdeps/x86_64/fpu/multiarch/e_logf.c
index 374d9b33fb3ac5119ce2188b10497d6cae007ea9..03b64c6d72355d75a378fdb21425b5072e0f94fe 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_logf.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_logf.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <libm-alias-float.h>
+# include <shlib-compat.h>
 
 extern float __redirect_logf (float);
 
@@ -29,15 +30,16 @@ libc_ifunc_redirected (__redirect_logf, __logf, IFUNC_SELECTOR ());
 __hidden_ver1 (__logf, __GI___logf, __redirect_logf)
   __attribute__ ((visibility ("hidden")));
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __logf, logf, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_logf, logf, GLIBC_2_27);
 libm_alias_float_other (__log, log)
 #else
 libm_alias_float (__log, log)
 #endif
 
 strong_alias (__logf, __ieee754_logf)
-strong_alias (__logf, __logf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __logf, __logf_finite, GLIBC_2_15);
+#endif
 
 #define __logf __logf_sse2
 #include <sysdeps/ieee754/flt-32/e_logf.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow.c b/sysdeps/x86_64/fpu/multiarch/e_pow.c
index 897607a79059918ed501dbe5a14bf34b1b4eefd9..7a9758572edb575d618b988a738fb940cde7baa8 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_pow.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_pow.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
+#include <shlib-compat.h>
 
 extern double __redirect_ieee754_pow (double, double);
 
@@ -25,7 +26,9 @@ extern double __redirect_ieee754_pow (double, double);
 
 libc_ifunc_redirected (__redirect_ieee754_pow,
 		       __ieee754_pow, IFUNC_SELECTOR ());
-strong_alias (__ieee754_pow, __pow_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __ieee754_pow, __pow_finite, GLIBC_2_15);
+#endif
 
 #define __pow __ieee754_pow_sse2
 #include <sysdeps/ieee754/dbl-64/e_pow.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_powf.c b/sysdeps/x86_64/fpu/multiarch/e_powf.c
index 3cde6db382bc12698f2dc2b3f9f97edd37ef4688..20f015e8228bbcc3326950dedce834b26da672a7 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_powf.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_powf.c
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <libm-alias-float.h>
+#include <shlib-compat.h>
 
 #define powf __redirect_powf
 #define __DECL_SIMD___redirect_powf
@@ -32,15 +33,16 @@ libc_ifunc_redirected (__redirect_powf, __powf, IFUNC_SELECTOR ());
 __hidden_ver1 (__powf, __GI___powf, __redirect_powf)
   __attribute__ ((visibility ("hidden")));
 
-# include <shlib-compat.h>
-versioned_symbol (libm, __powf, powf, GLIBC_2_27);
+versioned_symbol (libm, __ieee754_powf, powf, GLIBC_2_27);
 libm_alias_float_other (__pow, pow)
 #else
 libm_alias_float (__pow, pow)
 #endif
 
 strong_alias (__powf, __ieee754_powf)
-strong_alias (__powf, __powf_finite)
+#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_30)
+compat_symbol (libm, __powf, __powf_finite, GLIBC_2_15);
+#endif
 
 #define __powf __powf_sse2
 #include <sysdeps/ieee754/flt-32/e_powf.c>
