diff --git a/SOURCES/centos-arm32-NO_LONG_DOUBLE_MATH.patch b/SOURCES/centos-arm32-NO_LONG_DOUBLE_MATH.patch
deleted file mode 100644
index 790c74a..0000000
--- a/SOURCES/centos-arm32-NO_LONG_DOUBLE_MATH.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -Naurp a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c
---- a/stdio-common/printf_fp.c	2021-02-03 16:46:26.887807279 +0000
-+++ b/stdio-common/printf_fp.c	2021-02-03 16:50:16.604469900 +0000
-@@ -151,6 +151,7 @@ static wchar_t *group_number (wchar_t *b
- 			      wchar_t thousands_sep, int ngroups)
-      internal_function;
- 
-+#ifndef __NO_LONG_DOUBLE_MATH
- static __always_inline int
- isnanl_or_pseudo (long double in)
- {
-@@ -172,6 +173,7 @@ isnanl_or_pseudo (long double in)
-   return __isnanl (in);
- #endif
- }
-+#endif
- 
- 
- int
diff --git a/SOURCES/glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch b/SOURCES/glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch
deleted file mode 100644
index 78d7c4b..0000000
--- a/SOURCES/glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From patchwork Thu Jul  3 13:26:40 2014
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: ARM: Define ELF_MACHINE_NO_REL
-X-Patchwork-Submitter: Will Newton <will.newton@linaro.org>
-X-Patchwork-Id: 366862
-Message-Id: <1404394000-13429-1-git-send-email-will.newton@linaro.org>
-To: libc-alpha@sourceware.org
-Date: Thu,  3 Jul 2014 14:26:40 +0100
-From: Will Newton <will.newton@linaro.org>
-List-Id: <libc-alpha.sourceware.org>
-
-Fix a -Wundef warning on ARM.
-
-ChangeLog:
-
-2014-07-03  Will Newton  <will.newton@linaro.org>
-
-	* sysdeps/arm/dl-machine.h (ELF_MACHINE_NO_REL): Define.
----
- sysdeps/arm/dl-machine.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
-index c5ffc93..d6b0c52 100644
---- a/sysdeps/arm/dl-machine.h
-+++ b/sysdeps/arm/dl-machine.h
-@@ -296,6 +296,7 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc,
- /* ARM never uses Elf32_Rela relocations for the dynamic linker.
-    Prelinked libraries may use Elf32_Rela though.  */
- #define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP
-+#define ELF_MACHINE_NO_REL 0
- 
- /* Names of the architecture-specific auditing callback functions.  */
- #define ARCH_LA_PLTENTER arm_gnu_pltenter
diff --git a/SOURCES/glibc-rh1256317-armhfp-build-issue.patch b/SOURCES/glibc-rh1256317-armhfp-build-issue.patch
deleted file mode 100644
index aa6e7fe..0000000
--- a/SOURCES/glibc-rh1256317-armhfp-build-issue.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/sysdeps/unix/arm/sysdep.S	2016-11-05 11:44:45.561945344 +0100
-+++ b/sysdeps/unix/arm/sysdep.S	2016-11-05 11:44:19.542069815 +0100
-@@ -37,7 +37,7 @@
- 	moveq r0, $EAGAIN	/* Yes; translate it to EAGAIN.  */
- #endif
- 
--#ifndef IS_IN_rtld
-+#if !IS_IN (rtld)
- 	mov ip, lr
- 	cfi_register (lr, ip)
- 	mov r1, r0
diff --git a/SOURCES/glibc-rh1993930.patch b/SOURCES/glibc-rh1993930.patch
new file mode 100644
index 0000000..45f34c8
--- /dev/null
+++ b/SOURCES/glibc-rh1993930.patch
@@ -0,0 +1,251 @@
+Downstream-only patch to introduce the
+/etc/sysconfig/strcasecmp-nonascii configuration file, which switches
+to an implementation of strcasecmp, strcasecmp_l, strncasecmp,
+strncasecmp_l that always performs case-conversion as per tolower.
+
+The original glibc 2.17 version of these functions only ignored
+case within the ASCII range due to upstream bug 15736, but it is
+too late to change this regression (compared to Red Hat Enterprise
+Linux 6) in Red Hat Enterprise Linux 7.
+
+This patch only covers i686 and x86_64.  s390x is not affected.
+ppc64le would require additional changes.
+
+diff --git a/sysdeps/i386/i686/multiarch/init-arch.h b/sysdeps/i386/i686/multiarch/init-arch.h
+index cd2d0befee728b50..60d0eed17d004871 100644
+--- a/sysdeps/i386/i686/multiarch/init-arch.h
++++ b/sysdeps/i386/i686/multiarch/init-arch.h
+@@ -1 +1,21 @@
+ #include <sysdeps/x86_64/multiarch/init-arch.h>
++
++#ifdef __ASSEMBLER__
++/* Performan an access system call to check whether the configuration
++  file exists.  If it does, load SYMBOL into %eax and jump to LABEL.  */
++# define CHECK_STRCASECMP_CONFIG_FILE(symbol, label) \
++	pushl	%ebx; \
++	cfi_adjust_cfa_offset (4); \
++	cfi_rel_offset (%ebx, 0); \
++	LOAD_PIC_REG (dx); \
++	movl	$__NR_access, %eax; \
++	lea	__sysconfig_strcasecmp_nonascii@GOTOFF(%edx), %ebx; \
++	xor	%ecx, %ecx; \
++	int	$0x80; \
++	test	%eax, %eax; \
++	lea	symbol@GOTOFF(%edx), %eax; \
++	popl	%ebx; \
++	cfi_adjust_cfa_offset (-4); \
++	cfi_restore (%ebx); \
++	jz	label
++#endif
+diff --git a/sysdeps/i386/i686/multiarch/strcasecmp-c.c b/sysdeps/i386/i686/multiarch/strcasecmp-c.c
+index 753c6ec84ab9f8ea..b50c527525a347d0 100644
+--- a/sysdeps/i386/i686/multiarch/strcasecmp-c.c
++++ b/sysdeps/i386/i686/multiarch/strcasecmp-c.c
+@@ -10,3 +10,8 @@ strong_alias (__strcasecmp_nonascii, __strcasecmp_ia32)
+ /* The needs of strcasecmp in libc are minimal, no need to go through
+    the IFUNC.  */
+ strong_alias (__strcasecmp_nonascii, __GI___strcasecmp)
++
++/* Used by the assembler IFUNC selectors.  Presence of this file
++   indicates that the C implementation shall be used.  */
++const char __sysconfig_strcasecmp_nonascii[] attribute_hidden =
++  "/etc/sysconfig/strcasecmp-nonascii";
+diff --git a/sysdeps/i386/i686/multiarch/strcasecmp.S b/sysdeps/i386/i686/multiarch/strcasecmp.S
+index 7efef3b1b0545b5d..9c21a2d5d8b713a1 100644
+--- a/sysdeps/i386/i686/multiarch/strcasecmp.S
++++ b/sysdeps/i386/i686/multiarch/strcasecmp.S
+@@ -23,6 +23,7 @@
+ 	.text
+ ENTRY(__strcasecmp)
+ 	.type	__strcasecmp, @gnu_indirect_function
++	CHECK_STRCASECMP_CONFIG_FILE (__strcasecmp_nonascii, 2f)
+ 	LOAD_GOT_AND_RTLD_GLOBAL_RO
+ 	LOAD_FUNC_GOT_EAX (__strcasecmp_ia32)
+ 	HAS_CPU_FEATURE (SSSE3)
+diff --git a/sysdeps/i386/i686/multiarch/strcasecmp_l.S b/sysdeps/i386/i686/multiarch/strcasecmp_l.S
+index 711c09b0dc1fa62e..512e9bd66ed66b23 100644
+--- a/sysdeps/i386/i686/multiarch/strcasecmp_l.S
++++ b/sysdeps/i386/i686/multiarch/strcasecmp_l.S
+@@ -1,6 +1,7 @@
+ /* Multiple versions of strcasecmp_l
+    All versions must be listed in ifunc-impl-list.c.  */
+ #define STRCMP __strcasecmp_l
++#define STRCMP_NONASCII __strcasecmp_l_nonascii
+ #define USE_AS_STRCASECMP_L
+ #include "strcmp.S"
+ 
+diff --git a/sysdeps/i386/i686/multiarch/strcmp.S b/sysdeps/i386/i686/multiarch/strcmp.S
+index 19967e8db0990c2c..7fc791a18089da6f 100644
+--- a/sysdeps/i386/i686/multiarch/strcmp.S
++++ b/sysdeps/i386/i686/multiarch/strcmp.S
+@@ -54,6 +54,9 @@
+ 	.text
+ ENTRY(STRCMP)
+ 	.type	STRCMP, @gnu_indirect_function
++#if defined (USE_AS_STRCASECMP_L) || defined (USE_AS_STRNCASECMP_L)
++	CHECK_STRCASECMP_CONFIG_FILE (STRCMP_NONASCII, 2f)
++#endif
+ 	LOAD_GOT_AND_RTLD_GLOBAL_RO
+ 	LOAD_FUNC_GOT_EAX (__STRCMP_IA32)
+ 	HAS_CPU_FEATURE (SSSE3)
+diff --git a/sysdeps/i386/i686/multiarch/strncase.S b/sysdeps/i386/i686/multiarch/strncase.S
+index 952c7c60994f3023..36495559de590179 100644
+--- a/sysdeps/i386/i686/multiarch/strncase.S
++++ b/sysdeps/i386/i686/multiarch/strncase.S
+@@ -23,6 +23,7 @@
+ 	.text
+ ENTRY(__strncasecmp)
+ 	.type	__strncasecmp, @gnu_indirect_function
++	CHECK_STRCASECMP_CONFIG_FILE (__strncasecmp_nonascii, 2f)
+ 	LOAD_GOT_AND_RTLD_GLOBAL_RO
+ 	LOAD_FUNC_GOT_EAX (__strncasecmp_ia32)
+ 	HAS_CPU_FEATURE (SSSE3)
+diff --git a/sysdeps/i386/i686/multiarch/strncase_l.S b/sysdeps/i386/i686/multiarch/strncase_l.S
+index 8a74ee8574c720ae..b77951b26b98b8c8 100644
+--- a/sysdeps/i386/i686/multiarch/strncase_l.S
++++ b/sysdeps/i386/i686/multiarch/strncase_l.S
+@@ -1,6 +1,7 @@
+ /* Multiple versions of strncasecmp_l
+    All versions must be listed in ifunc-impl-list.c.  */
+ #define STRCMP __strncasecmp_l
++#define STRCMP_NONASCII __strncasecmp_l_nonascii
+ #define USE_AS_STRNCASECMP_L
+ #include "strcmp.S"
+ 
+diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile
+index c6766bb2b443a28a..d75ec12e6f1237c9 100644
+--- a/sysdeps/x86_64/Makefile
++++ b/sysdeps/x86_64/Makefile
+@@ -14,7 +14,8 @@ tests += tst-mallocalign1
+ endif
+ 
+ ifeq ($(subdir),string)
+-sysdep_routines += cacheinfo strcasecmp_l-nonascii strncase_l-nonascii
++sysdep_routines += cacheinfo strcasecmp_l-nonascii strncase_l-nonascii \
++  strcasecmp-nonascii strncase-nonascii
+ gen-as-const-headers += locale-defines.sym
+ endif
+ 
+diff --git a/sysdeps/x86_64/multiarch/strcasecmp_l.S b/sysdeps/x86_64/multiarch/strcasecmp_l.S
+index 49f5b9fd952d3cdc..0feefe1ac81cefac 100644
+--- a/sysdeps/x86_64/multiarch/strcasecmp_l.S
++++ b/sysdeps/x86_64/multiarch/strcasecmp_l.S
+@@ -1,6 +1,7 @@
+ /* Multiple versions of strcasecmp and strcasecmp_l
+    All versions must be listed in ifunc-impl-list.c.  */
+ #define STRCMP __strcasecmp_l
++#define STRCMP_NONASCII __strcasecmp_l_nonascii
+ #define USE_AS_STRCASECMP_L
+ #include "strcmp.S"
+ 
+diff --git a/sysdeps/x86_64/multiarch/strcmp.S b/sysdeps/x86_64/multiarch/strcmp.S
+index 48b4db8c430a514f..ede41c8f61e8b472 100644
+--- a/sysdeps/x86_64/multiarch/strcmp.S
++++ b/sysdeps/x86_64/multiarch/strcmp.S
+@@ -76,6 +76,17 @@
+ # endif
+ #endif
+ 
++/* Performan an access system call to check whether the configuration
++  file exists.  If it does, load SYMBOL into %rax and jump to LABEL.  */
++#define CHECK_STRCASECMP_CONFIG_FILE(symbol, label) \
++	movl	$__NR_access, %eax; \
++	leaq	__sysconfig_strcasecmp_nonascii(%rip), %rdi; \
++	xor	%esi, %esi; \
++	syscall ; \
++	test	%eax, %eax; \
++	leaq 	symbol(%rip), %rax; \
++	jz	label
++
+ /* Define multiple versions only for the definition in libc.  Don't
+    define multiple versions for strncmp in static library since we
+    need strncmp before the initialization happened.  */
+@@ -83,6 +94,9 @@
+ 	.text
+ ENTRY(STRCMP)
+ 	.type	STRCMP, @gnu_indirect_function
++# if defined (USE_AS_STRCASECMP_L) || defined (USE_AS_STRNCASECMP_L)
++	CHECK_STRCASECMP_CONFIG_FILE(STRCMP_NONASCII, 2f)
++# endif
+ 	LOAD_RTLD_GLOBAL_RO_RDX
+ 	leaq	STRCMP_SSE42(%rip), %rax
+ 	HAS_CPU_FEATURE (SSE4_2)
+@@ -97,6 +111,7 @@ END(STRCMP)
+ # ifdef USE_AS_STRCASECMP_L
+ ENTRY(__strcasecmp)
+ 	.type	__strcasecmp, @gnu_indirect_function
++	CHECK_STRCASECMP_CONFIG_FILE(__strcasecmp_nonascii, 2f)
+ 	LOAD_RTLD_GLOBAL_RO_RDX
+ #  ifdef HAVE_AVX_SUPPORT
+ 	leaq	__strcasecmp_avx(%rip), %rax
+@@ -117,6 +132,7 @@ weak_alias (__strcasecmp, strcasecmp)
+ # ifdef USE_AS_STRNCASECMP_L
+ ENTRY(__strncasecmp)
+ 	.type	__strncasecmp, @gnu_indirect_function
++	CHECK_STRCASECMP_CONFIG_FILE(__strncasecmp_nonascii, 2f)
+ 	LOAD_RTLD_GLOBAL_RO_RDX
+ #  ifdef HAVE_AVX_SUPPORT
+ 	leaq	__strncasecmp_avx(%rip), %rax
+diff --git a/sysdeps/x86_64/multiarch/strncase_l.S b/sysdeps/x86_64/multiarch/strncase_l.S
+index 9c0149788e9c11b5..259ce6b5ef57e178 100644
+--- a/sysdeps/x86_64/multiarch/strncase_l.S
++++ b/sysdeps/x86_64/multiarch/strncase_l.S
+@@ -1,6 +1,7 @@
+ /* Multiple versions of strncasecmp and strncasecmp_l
+    All versions must be listed in ifunc-impl-list.c.  */
+ #define STRCMP __strncasecmp_l
++#define STRCMP_NONASCII __strncasecmp_l_nonascii
+ #define USE_AS_STRNCASECMP_L
+ #include "strcmp.S"
+ 
+diff --git a/sysdeps/x86_64/strcasecmp-nonascii.c b/sysdeps/x86_64/strcasecmp-nonascii.c
+new file mode 100644
+index 0000000000000000..7e81a7bdb6f52c47
+--- /dev/null
++++ b/sysdeps/x86_64/strcasecmp-nonascii.c
+@@ -0,0 +1,13 @@
++#if IS_IN (libc)
++# include <string.h>
++
++extern int __strcasecmp_nonascii (const char *__s1, const char *__s2);
++
++# define __strcasecmp __strcasecmp_nonascii
++# include <string/strcasecmp.c>
++
++/* Used by the assembler IFUNC selectors.  Presence of this file
++   indicates that the C implementation shall be used.  */
++const char __sysconfig_strcasecmp_nonascii[] attribute_hidden =
++  "/etc/sysconfig/strcasecmp-nonascii";
++#endif
+diff --git a/sysdeps/x86_64/strcasecmp_l-nonascii.c b/sysdeps/x86_64/strcasecmp_l-nonascii.c
+index 30e8969603ea7817..4abd55ae2a54f94a 100644
+--- a/sysdeps/x86_64/strcasecmp_l-nonascii.c
++++ b/sysdeps/x86_64/strcasecmp_l-nonascii.c
+@@ -1,8 +1,10 @@
+-#include <string.h>
++#if IS_IN (libc)
++# include <string.h>
+ 
+ extern int __strcasecmp_l_nonascii (const char *__s1, const char *__s2,
+ 				    __locale_t __loc);
+ 
+-#define __strcasecmp_l __strcasecmp_l_nonascii
+-#define USE_IN_EXTENDED_LOCALE_MODEL    1
+-#include <string/strcasecmp.c>
++# define __strcasecmp_l __strcasecmp_l_nonascii
++# define USE_IN_EXTENDED_LOCALE_MODEL    1
++# include <string/strcasecmp.c>
++#endif
+diff --git a/sysdeps/x86_64/strncase-nonascii.c b/sysdeps/x86_64/strncase-nonascii.c
+new file mode 100644
+index 0000000000000000..4db45017c189b87a
+--- /dev/null
++++ b/sysdeps/x86_64/strncase-nonascii.c
+@@ -0,0 +1,7 @@
++#include <string.h>
++
++extern int __strncasecmp_nonascii (const char *__s1, const char *__s2,
++                                   size_t __n);
++
++#define __strncasecmp __strncasecmp_nonascii
++#include <string/strncase.c>
diff --git a/SPECS/glibc.spec b/SPECS/glibc.spec
index 67bcd8d..33fc4f9 100644
--- a/SPECS/glibc.spec
+++ b/SPECS/glibc.spec
@@ -1,6 +1,6 @@
 %define glibcsrcdir glibc-2.17-c758a686
 %define glibcversion 2.17
-%define glibcrelease 324%{?dist}
+%define glibcrelease 325%{?dist}
 ##############################################################################
 # We support the following options:
 # --with/--without,
@@ -249,11 +249,6 @@ Patch0068: glibc-rh1349982.patch
 # These changes were brought forward from RHEL 6 for compatibility
 Patch0069: glibc-rh1448107.patch
 
-# Armhfp build issue
-Patch9997: centos-arm32-NO_LONG_DOUBLE_MATH.patch
-Patch9998: glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch
-Patch9999: glibc-rh1256317-armhfp-build-issue.patch
-
 Patch1000: glibc-rh905877.patch
 Patch1001: glibc-rh958652.patch
 Patch1002: glibc-rh977870.patch
@@ -1646,6 +1641,7 @@ Patch2858: glibc-rh1883162.patch
 Patch2859: glibc-rh1925204-1.patch
 Patch2860: glibc-rh1925204-2.patch
 Patch2861: glibc-rh1927536.patch
+Patch2862: glibc-rh1993930.patch
 
 ##############################################################################
 # End of glibc patches.
@@ -3017,12 +3013,7 @@ package or when debugging this package.
 %patch2859 -p1
 %patch2860 -p1
 %patch2861 -p1
-
-%ifarch %{arm}
-%patch9998 -p1
-%patch9999 -p1
-%patch9997 -p1
-%endif
+%patch2862 -p1
 
 ##############################################################################
 # %%prep - Additional prep required...
@@ -4210,6 +4201,10 @@ rm -f *.filelist*
 %endif
 
 %changelog
+* Thu Aug 19 2021 Florian Weimer <fweimer@redhat.com> - 2.17-325
+- Support /etc/sysconfig/strcasecmp-nonascii for enabling non-ASCII case
+  conversion in strcasecmp, strncasecmp (#1993930)
+
 * Fri Mar 26 2021 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17-324
 - Move __isnanl_pseudo into its own file and link only into libc (#1927536)