diff --git a/misc/efgcvt-template.c b/misc/efgcvt-template.c
index f8650a934f..aeb4e1ea01 100644
--- a/misc/efgcvt-template.c
+++ b/misc/efgcvt-template.c
@@ -76,26 +76,3 @@ __APPEND (FUNC_PREFIX, gcvt) (FLOAT_TYPE value, int ndigit, char *buf)
sprintf (buf, "%.*" FLOAT_FMT_FLAG "g", MIN (ndigit, NDIGIT_MAX), value);
return buf;
}
-
-#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)
-# ifdef LONG_DOUBLE_CVT
-# define cvt_symbol(symbol) \
- cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
- APPEND (FUNC_PREFIX, symbol), GLIBC_2_4)
-# define cvt_symbol_1(lib, local, symbol, version) \
- versioned_symbol (lib, local, symbol, version)
-# else
-# define cvt_symbol(symbol) \
- cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
- APPEND (q, symbol), GLIBC_2_0); \
- strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
-# define cvt_symbol_1(lib, local, symbol, version) \
- compat_symbol (lib, local, symbol, version)
-# endif
-#else
-# define cvt_symbol(symbol) \
- strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
-#endif
-cvt_symbol(fcvt);
-cvt_symbol(ecvt);
-cvt_symbol(gcvt);
diff --git a/misc/efgcvt.c b/misc/efgcvt.c
new file mode 100644
index 0000000000..8e6bdbf358
--- /dev/null
+++ b/misc/efgcvt.c
@@ -0,0 +1,31 @@
+/* Double versions of *cvt_r functions.
+ Copyright (C) 2019 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ . */
+
+#include "efgcvt.c"
+
+#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)
+# define cvt_symbol(local, symbol) \
+ strong_alias (local, symbol); \
+ compat_symbol (libc, local, q##symbol, GLIBC_2_0)
+#else
+# define cvt_symbol(local, symbol) \
+ strong_alias (local, symbol)
+#endif
+cvt_symbol (__fcvt, fcvt);
+cvt_symbol (__ecvt, ecvt);
+cvt_symbol (__gcvt, gcvt);
diff --git a/misc/efgcvt_r-template.c b/misc/efgcvt_r-template.c
index 2194093d9f..f215dbd345 100644
--- a/misc/efgcvt_r-template.c
+++ b/misc/efgcvt_r-template.c
@@ -200,27 +200,3 @@ __APPEND (FUNC_PREFIX, ecvt_r) (FLOAT_TYPE value, int ndigit, int *decpt,
*decpt += exponent;
return 0;
}
-
-#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)
-# ifdef LONG_DOUBLE_CVT
-# define cvt_symbol(symbol) \
- cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
- APPEND (FUNC_PREFIX, symbol), GLIBC_2_4)
-# define cvt_symbol_1(lib, local, symbol, version) \
- versioned_symbol (lib, local, symbol, version)
-# else
-# define cvt_symbol(symbol) \
- cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
- APPEND (q, symbol), GLIBC_2_0); \
- weak_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
-# define cvt_symbol_1(lib, local, symbol, version) \
- compat_symbol (lib, local, symbol, version)
-# endif
-#else
-# define cvt_symbol(symbol) \
- cvt_symbol_1 (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
-# define cvt_symbol_1(local, symbol) \
- weak_alias (local, symbol)
-#endif
-cvt_symbol(fcvt_r);
-cvt_symbol(ecvt_r);
diff --git a/misc/efgcvt_r.c b/misc/efgcvt_r.c
new file mode 100644
index 0000000000..f9066813e7
--- /dev/null
+++ b/misc/efgcvt_r.c
@@ -0,0 +1,30 @@
+/* Double versions of reentrant *cvt_r functions.
+ Copyright (C) 2019 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ . */
+
+#include "efgcvt_r.c"
+
+#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)
+# define cvt_symbol(local, symbol) \
+ weak_alias (local, symbol); \
+ compat_symbol (libc, local, q##symbol, GLIBC_2_0)
+#else
+# define cvt_symbol(local, symbol) \
+ weak_alias (local, symbol)
+#endif
+cvt_symbol (__fcvt_r, fcvt_r);
+cvt_symbol (__ecvt_r, ecvt_r);
diff --git a/misc/qefgcvt.c b/misc/qefgcvt.c
index 6987fb0db1..cddad1c54b 100644
--- a/misc/qefgcvt.c
+++ b/misc/qefgcvt.c
@@ -17,3 +17,14 @@
. */
#include "efgcvt.c"
+
+#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)
+# define cvt_symbol(local, symbol) \
+ versioned_symbol (lib, local, symbol, GLIBC_2_4)
+#else
+# define cvt_symbol(local, symbol) \
+ strong_alias (local, symbol)
+#endif
+cvt_symbol (__qfcvt, qfcvt);
+cvt_symbol (__qecvt, qecvt);
+cvt_symbol (__qgcvt, qgcvt);
diff --git a/misc/qefgcvt_r.c b/misc/qefgcvt_r.c
index e1f074b49c..7293f1e125 100644
--- a/misc/qefgcvt_r.c
+++ b/misc/qefgcvt_r.c
@@ -18,3 +18,13 @@
. */
#include "efgcvt_r.c"
+
+#if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)
+# define cvt_symbol(local, symbol) \
+ versioned_symbol (libc, local, symbol, GLIBC_2_4)
+#else
+# define cvt_symbol(local, symbol) \
+ weak_alias (local, symbol)
+#endif
+cvt_symbol (__qfcvt_r, qfcvt_r);
+cvt_symbol (__qecvt_r, qecvt_r);