diff --git a/math/Versions b/math/Versions
index 7f84a72b32..f37b7d8efd 100644
--- a/math/Versions
+++ b/math/Versions
@@ -680,5 +680,6 @@ libm {
     acoshf;
     atan2f;
     atanhf;
+    coshf;
   }
 }
diff --git a/math/w_coshf.c b/math/w_coshf.c
new file mode 100644
index 0000000000..a786f7c50a
--- /dev/null
+++ b/math/w_coshf.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-float.h>
+#undef __USE_WRAPPER_TEMPLATE
+#define __USE_WRAPPER_TEMPLATE 1
+#undef declare_mgen_alias
+#define declare_mgen_alias(a, b)
+#include <w_cosh_template.c>
+versioned_symbol (libm, __coshf, coshf, GLIBC_2_42);
+libm_alias_float_other (__coshf, coshf)
diff --git a/math/w_coshf_compat.c b/math/w_coshf_compat.c
index ce5e196c07..39b56da101 100644
--- a/math/w_coshf_compat.c
+++ b/math/w_coshf_compat.c
@@ -20,10 +20,11 @@
 #include <math_private.h>
 #include <math-svid-compat.h>
 #include <libm-alias-float.h>
+#include <shlib-compat.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_42)
 float
-__coshf (float x)
+__cosh_compatf (float x)
 {
 	float z = __ieee754_coshf (x);
 	if (__builtin_expect (!isfinite (z), 0) && isfinite (x)
@@ -32,5 +33,10 @@ __coshf (float x)
 
 	return z;
 }
-libm_alias_float (__cosh, cosh)
+# ifdef NO_COMPAT_NEEDED
+strong_alias (__cosh_compatf, __coshf)
+libm_alias_float (__cosh_compat, cosh)
+# else
+compat_symbol (libm, __cosh_compatf, coshf, GLIBC_2_0);
+# endif
 #endif
diff --git a/sysdeps/ieee754/flt-32/e_coshf.c b/sysdeps/ieee754/flt-32/e_coshf.c
index 602d2b413f..7dea283e7a 100644
--- a/sysdeps/ieee754/flt-32/e_coshf.c
+++ b/sysdeps/ieee754/flt-32/e_coshf.c
@@ -27,10 +27,12 @@ SOFTWARE.
 #include <stdint.h>
 #include <math.h>
 #include <libm-alias-finite.h>
+#include <libm-alias-float.h>
+#include <math-svid-compat.h>
 #include "math_config.h"
 
 float
-__ieee754_coshf (float x)
+__coshf (float x)
 {
   static const double c[] =
     {
@@ -114,4 +116,11 @@ __ieee754_coshf (float x)
     }
   return ub;
 }
+strong_alias (__coshf, __ieee754_coshf)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __coshf, coshf, GLIBC_2_42);
+libm_alias_float_other (__cosh, cosh)
+#else
+libm_alias_float (__cosh, cosh)
+#endif
 libm_alias_finite (__ieee754_coshf, __coshf)
diff --git a/sysdeps/ieee754/flt-32/w_coshf.c b/sysdeps/ieee754/flt-32/w_coshf.c
new file mode 100644
index 0000000000..1cc8931700
--- /dev/null
+++ b/sysdeps/ieee754/flt-32/w_coshf.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_coshf_compat.c b/sysdeps/m68k/m680x0/fpu/w_coshf_compat.c
new file mode 100644
index 0000000000..14444a9f0c
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_coshf_compat.c
@@ -0,0 +1,8 @@
+/* m68k provides an optimized __ieee754_coshhf.  */
+#ifdef SHARED
+# define NO_COMPAT_NEEDED 1
+# include <math/w_coshf_compat.c>
+#else
+# include <math-type-macros-float.h>
+# include <w_cosh_template.c>
+#endif
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index dfc07786eb..d844987004 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1282,6 +1282,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 586d40d5c6..e6be5f808b 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1250,6 +1250,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index fb641db738..807c0556aa 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1409,6 +1409,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
index 1b5d476450..9dcbfa267b 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
index 1b5d476450..9dcbfa267b 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist
index 16885c419f..995f56f2be 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 157b976b1a..b144dfbe0d 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1289,6 +1289,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 1b5d476450..9dcbfa267b 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
index b4d452e44f..2cfcc419c2 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
index b4d452e44f..2cfcc419c2 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 6163837b48..db69c56c5a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index 11dcf4254a..39486d894e 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1250,6 +1250,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index 13e06021e0..53c03becb6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -1072,6 +1072,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index cd6e743a64..4849a96fd6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -1071,6 +1071,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
index 60df9c03c8..1848e326b0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
@@ -1065,6 +1065,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
index 550c36ecb9..6dd5f82933 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
@@ -1434,6 +1434,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index ec9a35b914..ffacf4ae91 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1353,6 +1353,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index 6b5f81265a..0f8fca59b3 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1353,6 +1353,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
index 04714bf403..77b3e3160f 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
index 04714bf403..77b3e3160f 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
@@ -925,6 +925,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
index 3256cc91a0..5cecff58d3 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1360,6 +1360,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index 980cd89d2f..e74513e436 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1250,6 +1250,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index d9c7b785b3..d8443b79ca 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1283,6 +1283,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index d235c026cf..f7d6dab97f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1283,6 +1283,7 @@ GLIBC_2.42 acoshf F
 GLIBC_2.42 asinf F
 GLIBC_2.42 atan2f F
 GLIBC_2.42 atanhf F
+GLIBC_2.42 coshf F
 GLIBC_2.42 lgammaf F
 GLIBC_2.42 lgammaf_r F
 GLIBC_2.42 log10f F
