From fe024e3ae1bb19740fac79747370d1c61f75627132c4079ff2a3dd5568c93e9c Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 28 Oct 2014 11:58:29 +0000 Subject: [PATCH] Accepting request 258649 from home:Andreas_Schwab:Factory - Update to crypt_blowfish 1.3. * Add support for the $2b$ prefix. - ifunc-x86-slow-sse4.patch: Fix misdetected Slow_SSE4_2 cpu feature bit (BZ #17501) OBS-URL: https://build.opensuse.org/request/show/258649 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=389 --- crypt_blowfish-1.2-sha.diff | 28 ++++----- crypt_blowfish-1.2.tar.gz | 3 - crypt_blowfish-1.2.tar.gz.sign | 10 --- crypt_blowfish-1.3.tar.gz | 3 + crypt_blowfish-1.3.tar.gz.sign | 10 +++ crypt_blowfish-gensalt.patch | 50 ++++++++------- glibc-testsuite.changes | 8 +++ glibc-testsuite.spec | 6 +- glibc-utils.changes | 8 +++ glibc-utils.spec | 6 +- glibc.changes | 8 +++ glibc.spec | 6 +- ifunc-x86-slow-sse4.patch | 111 +++++++++++++++++++++++++++++++++ 13 files changed, 203 insertions(+), 54 deletions(-) delete mode 100644 crypt_blowfish-1.2.tar.gz delete mode 100644 crypt_blowfish-1.2.tar.gz.sign create mode 100644 crypt_blowfish-1.3.tar.gz create mode 100644 crypt_blowfish-1.3.tar.gz.sign create mode 100644 ifunc-x86-slow-sse4.patch diff --git a/crypt_blowfish-1.2-sha.diff b/crypt_blowfish-1.2-sha.diff index 218ce1e..d7a5ce9 100644 --- a/crypt_blowfish-1.2-sha.diff +++ b/crypt_blowfish-1.2-sha.diff @@ -9,10 +9,10 @@ Subject: [PATCH crypt_blowfish] support for sha256 and sha512 wrapper.c | 23 +++++++++++++++++++++ 3 files changed, 95 insertions(+), 0 deletions(-) -Index: crypt_blowfish-1.2/crypt.3 +Index: crypt_blowfish-1.3/crypt.3 =================================================================== ---- crypt_blowfish-1.2.orig/crypt.3 -+++ crypt_blowfish-1.2/crypt.3 +--- crypt_blowfish-1.3.orig/crypt.3 ++++ crypt_blowfish-1.3/crypt.3 @@ -399,6 +399,20 @@ too low for the currently available hard .hash "$1$" "\e$1\e$[^$]{1,8}\e$[./0-9A-Za-z]{22}" unlimited 8 "" 128 "6 to 48" 1000 .PP @@ -34,10 +34,10 @@ Index: crypt_blowfish-1.2/crypt.3 .BR "OpenBSD-style Blowfish-based" " (" bcrypt ) .br .B bcrypt -Index: crypt_blowfish-1.2/crypt_gensalt.c +Index: crypt_blowfish-1.3/crypt_gensalt.c =================================================================== ---- crypt_blowfish-1.2.orig/crypt_gensalt.c -+++ crypt_blowfish-1.2/crypt_gensalt.c +--- crypt_blowfish-1.3.orig/crypt_gensalt.c ++++ crypt_blowfish-1.3/crypt_gensalt.c @@ -19,6 +19,7 @@ */ @@ -107,10 +107,10 @@ Index: crypt_blowfish-1.2/crypt_gensalt.c + errno = ENOMEM; + return NULL; +} -Index: crypt_blowfish-1.2/crypt_gensalt.h +Index: crypt_blowfish-1.3/crypt_gensalt.h =================================================================== ---- crypt_blowfish-1.2.orig/crypt_gensalt.h -+++ crypt_blowfish-1.2/crypt_gensalt.h +--- crypt_blowfish-1.3.orig/crypt_gensalt.h ++++ crypt_blowfish-1.3/crypt_gensalt.h @@ -26,5 +26,7 @@ extern char *_crypt_gensalt_extended_rn( const char *input, int size, char *output, int output_size); extern char *_crypt_gensalt_md5_rn(const char *prefix, unsigned long count, @@ -119,10 +119,10 @@ Index: crypt_blowfish-1.2/crypt_gensalt.h + const char *input, int size, char *output, int output_size); #endif -Index: crypt_blowfish-1.2/wrapper.c +Index: crypt_blowfish-1.3/wrapper.c =================================================================== ---- crypt_blowfish-1.2.orig/wrapper.c -+++ crypt_blowfish-1.2/wrapper.c +--- crypt_blowfish-1.3.orig/wrapper.c ++++ crypt_blowfish-1.3/wrapper.c @@ -50,6 +50,10 @@ #include "crypt.h" extern char *__md5_crypt_r(const char *key, const char *salt, @@ -169,6 +169,6 @@ Index: crypt_blowfish-1.2/wrapper.c + if (!strncmp(prefix, "$5$", 3) || !strncmp(prefix, "$6$", 3)) + use = _crypt_gensalt_sha2_rn; + else - if (!strncmp(prefix, "$2a$", 4) || !strncmp(prefix, "$2y$", 4)) + if (!strncmp(prefix, "$2a$", 4) || !strncmp(prefix, "$2b$", 4) || + !strncmp(prefix, "$2y$", 4)) use = _crypt_gensalt_blowfish_rn; - else diff --git a/crypt_blowfish-1.2.tar.gz b/crypt_blowfish-1.2.tar.gz deleted file mode 100644 index 4f3c60b..0000000 --- a/crypt_blowfish-1.2.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:12a3455700d4795f5a99e6fca54c782688d3785e6525cbfe5129dcc363858e27 -size 29757 diff --git a/crypt_blowfish-1.2.tar.gz.sign b/crypt_blowfish-1.2.tar.gz.sign deleted file mode 100644 index 5097d2b..0000000 --- a/crypt_blowfish-1.2.tar.gz.sign +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.10 (GNU/Linux) -Comment: http://www.openwall.com/signatures/ - -iQCVAwUATiLawHK5fbEpUCnxAQIT4wP9GTUroM4r21oggeW0k3j5vICwSVHV5BbJ -MBOfliwa1tW9JNh/dEA9GHiPeVWXr/KNWm9/3bSYGDqfsYMlQ7x8w/CCUrS/gvpv -XtvwxUE5juAH5wy4+6oV1gBWiISWGOUcCqkgxPVZKOjlSV4c7kvr10JwqYdnqjK9 -RT/A2FgAxM4= -=K4Xs ------END PGP SIGNATURE----- diff --git a/crypt_blowfish-1.3.tar.gz b/crypt_blowfish-1.3.tar.gz new file mode 100644 index 0000000..fcb0aed --- /dev/null +++ b/crypt_blowfish-1.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83fa01fca6996fe8d882b7f8e9ba0305a5664936100b01481ea3c6a8ce8d72fd +size 30310 diff --git a/crypt_blowfish-1.3.tar.gz.sign b/crypt_blowfish-1.3.tar.gz.sign new file mode 100644 index 0000000..77b51bb --- /dev/null +++ b/crypt_blowfish-1.3.tar.gz.sign @@ -0,0 +1,10 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 +Comment: http://www.openwall.com/signatures/ + +iQCVAwUAU71f6nK5fbEpUCnxAQJCewQAqvRc4UbpJyJlYR0sbVbIjLPc6+3s9KQ9 +9LUrDkNJLlWli/4i0FXiFgRohNgzSYwaMRqbrsxZ+Dbp5XHKgjf3wzyhGGDvr0wb +fLvIVrIHO/XgeBz08h6feFsxD+er5iy4FMBVe1MRMw6IiJNtWsahQLP5EjddfEwD +XvIct4zt2Cc= +=cncr +-----END PGP SIGNATURE----- diff --git a/crypt_blowfish-gensalt.patch b/crypt_blowfish-gensalt.patch index 685fbec..9d1dd87 100644 --- a/crypt_blowfish-gensalt.patch +++ b/crypt_blowfish-gensalt.patch @@ -1,8 +1,8 @@ -Index: crypt_blowfish-1.2/crypt_blowfish.c +Index: crypt_blowfish-1.3/crypt_blowfish.c =================================================================== ---- crypt_blowfish-1.2.orig/crypt_blowfish.c -+++ crypt_blowfish-1.2/crypt_blowfish.c -@@ -872,31 +872,3 @@ char *_crypt_blowfish_rn(const char *key +--- crypt_blowfish-1.3.orig/crypt_blowfish.c ++++ crypt_blowfish-1.3/crypt_blowfish.c +@@ -877,31 +877,3 @@ char *_crypt_blowfish_rn(const char *key __set_errno(EINVAL); /* pretend we don't support this hash type */ return NULL; } @@ -13,7 +13,7 @@ Index: crypt_blowfish-1.2/crypt_blowfish.c - if (size < 16 || output_size < 7 + 22 + 1 || - (count && (count < 4 || count > 31)) || - prefix[0] != '$' || prefix[1] != '2' || -- (prefix[2] != 'a' && prefix[2] != 'y')) { +- (prefix[2] != 'a' && prefix[2] != 'b' && prefix[2] != 'y')) { - if (output_size > 0) output[0] = '\0'; - __set_errno((output_size < 7 + 22 + 1) ? ERANGE : EINVAL); - return NULL; @@ -34,10 +34,10 @@ Index: crypt_blowfish-1.2/crypt_blowfish.c - - return output; -} -Index: crypt_blowfish-1.2/crypt_blowfish.h +Index: crypt_blowfish-1.3/crypt_blowfish.h =================================================================== ---- crypt_blowfish-1.2.orig/crypt_blowfish.h -+++ crypt_blowfish-1.2/crypt_blowfish.h +--- crypt_blowfish-1.3.orig/crypt_blowfish.h ++++ crypt_blowfish-1.3/crypt_blowfish.h @@ -20,8 +20,5 @@ extern int _crypt_output_magic(const char *setting, char *output, int size); extern char *_crypt_blowfish_rn(const char *key, const char *setting, @@ -47,10 +47,10 @@ Index: crypt_blowfish-1.2/crypt_blowfish.h - const char *input, int size, char *output, int output_size); #endif -Index: crypt_blowfish-1.2/crypt_gensalt.c +Index: crypt_blowfish-1.3/crypt_gensalt.c =================================================================== ---- crypt_blowfish-1.2.orig/crypt_gensalt.c -+++ crypt_blowfish-1.2/crypt_gensalt.c +--- crypt_blowfish-1.3.orig/crypt_gensalt.c ++++ crypt_blowfish-1.3/crypt_gensalt.c @@ -20,6 +20,7 @@ #include @@ -108,7 +108,7 @@ Index: crypt_blowfish-1.2/crypt_gensalt.c + if (size < 16 || output_size < 7 + 22 + 1 || + (count && (count < 4 || count > 31)) || + prefix[0] != '$' || prefix[1] != '2' || -+ (prefix[2] != 'a' && prefix[2] != 'y')) { ++ (prefix[2] != 'a' && prefix[2] != 'b' && prefix[2] != 'y')) { + if (output_size > 0) output[0] = '\0'; + __set_errno((output_size < 7 + 22 + 1) ? ERANGE : EINVAL); + return NULL; @@ -129,10 +129,10 @@ Index: crypt_blowfish-1.2/crypt_gensalt.c + + return output; +} -Index: crypt_blowfish-1.2/crypt_gensalt.h +Index: crypt_blowfish-1.3/crypt_gensalt.h =================================================================== ---- crypt_blowfish-1.2.orig/crypt_gensalt.h -+++ crypt_blowfish-1.2/crypt_gensalt.h +--- crypt_blowfish-1.3.orig/crypt_gensalt.h ++++ crypt_blowfish-1.3/crypt_gensalt.h @@ -28,5 +28,8 @@ extern char *_crypt_gensalt_md5_rn(const const char *input, int size, char *output, int output_size); extern char *_crypt_gensalt_sha2_rn(const char *prefix, unsigned long count, @@ -142,11 +142,11 @@ Index: crypt_blowfish-1.2/crypt_gensalt.h + const char *input, int size, char *output, int output_size); #endif -Index: crypt_blowfish-1.2/wrapper-gensalt.c +Index: crypt_blowfish-1.3/wrapper-gensalt.c =================================================================== --- /dev/null -+++ crypt_blowfish-1.2/wrapper-gensalt.c -@@ -0,0 +1,113 @@ ++++ crypt_blowfish-1.3/wrapper-gensalt.c +@@ -0,0 +1,114 @@ +/* + * Written by Solar Designer in 2000-2011. + * No copyright is claimed, and the software is hereby placed in the public @@ -202,7 +202,8 @@ Index: crypt_blowfish-1.2/wrapper-gensalt.c + if (!strncmp(prefix, "$5$", 3) || !strncmp(prefix, "$6$", 3)) + use = _crypt_gensalt_sha2_rn; + else -+ if (!strncmp(prefix, "$2a$", 4) || !strncmp(prefix, "$2y$", 4)) ++ if (!strncmp(prefix, "$2a$", 4) || !strncmp(prefix, "$2b$", 4) || ++ !strncmp(prefix, "$2y$", 4)) + use = _crypt_gensalt_blowfish_rn; + else + if (!strncmp(prefix, "$1$", 3)) @@ -260,10 +261,10 @@ Index: crypt_blowfish-1.2/wrapper-gensalt.c +weak_alias(__crypt_gensalt, crypt_gensalt) +#endif + -Index: crypt_blowfish-1.2/wrapper.c +Index: crypt_blowfish-1.3/wrapper.c =================================================================== ---- crypt_blowfish-1.2.orig/wrapper.c -+++ crypt_blowfish-1.2/wrapper.c +--- crypt_blowfish-1.3.orig/wrapper.c ++++ crypt_blowfish-1.3/wrapper.c @@ -35,7 +35,6 @@ #endif @@ -280,7 +281,7 @@ Index: crypt_blowfish-1.2/wrapper.c #if defined(__GLIBC__) && defined(_LIBC) /* crypt.h from glibc-crypt-2.1 will define struct crypt_data for us */ -@@ -209,88 +207,11 @@ char *crypt(const char *key, const char +@@ -209,89 +207,11 @@ char *crypt(const char *key, const char crypt_rn(key, setting, output, sizeof(output)), setting, output, sizeof(output)); } @@ -306,7 +307,8 @@ Index: crypt_blowfish-1.2/wrapper.c - if (!strncmp(prefix, "$5$", 3) || !strncmp(prefix, "$6$", 3)) - use = _crypt_gensalt_sha2_rn; - else -- if (!strncmp(prefix, "$2a$", 4) || !strncmp(prefix, "$2y$", 4)) +- if (!strncmp(prefix, "$2a$", 4) || !strncmp(prefix, "$2b$", 4) || +- !strncmp(prefix, "$2y$", 4)) - use = _crypt_gensalt_blowfish_rn; - else - if (!strncmp(prefix, "$1$", 3)) diff --git a/glibc-testsuite.changes b/glibc-testsuite.changes index 2648c16..95b4d12 100644 --- a/glibc-testsuite.changes +++ b/glibc-testsuite.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Oct 28 08:56:47 UTC 2014 - schwab@suse.de + +- Update to crypt_blowfish 1.3. + * Add support for the $2b$ prefix. +- ifunc-x86-slow-sse4.patch: Fix misdetected Slow_SSE4_2 cpu feature bit + (BZ #17501) + ------------------------------------------------------------------- Mon Sep 8 09:48:26 UTC 2014 - schwab@suse.de diff --git a/glibc-testsuite.spec b/glibc-testsuite.spec index 446406d..1f24478 100644 --- a/glibc-testsuite.spec +++ b/glibc-testsuite.spec @@ -24,7 +24,7 @@ # It will avoid building some parts of glibc %bcond_with fast_build -%define crypt_bf_version 1.2 +%define crypt_bf_version 1.3 Name: glibc-testsuite %define normal_build ("%{name}" == "glibc") @@ -232,6 +232,8 @@ Patch306: glibc-fix-double-loopback.diff ### # Patches from upstream ### +# PATCH-FIX-UPSTREAM Fix misdetected Slow_SSE4_2 cpu feature bit (BZ #17501) +Patch1000: ifunc-x86-slow-sse4.patch ### # Patches awaiting upstream approval @@ -450,6 +452,8 @@ rm nscd/s-stamp %patch304 -p1 %patch306 -p1 +%patch1000 -p1 + %patch2000 -p1 %patch2002 -p1 %patch2003 -p1 diff --git a/glibc-utils.changes b/glibc-utils.changes index 2648c16..95b4d12 100644 --- a/glibc-utils.changes +++ b/glibc-utils.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Oct 28 08:56:47 UTC 2014 - schwab@suse.de + +- Update to crypt_blowfish 1.3. + * Add support for the $2b$ prefix. +- ifunc-x86-slow-sse4.patch: Fix misdetected Slow_SSE4_2 cpu feature bit + (BZ #17501) + ------------------------------------------------------------------- Mon Sep 8 09:48:26 UTC 2014 - schwab@suse.de diff --git a/glibc-utils.spec b/glibc-utils.spec index 8f4f771..bcf4f22 100644 --- a/glibc-utils.spec +++ b/glibc-utils.spec @@ -24,7 +24,7 @@ # It will avoid building some parts of glibc %bcond_with fast_build -%define crypt_bf_version 1.2 +%define crypt_bf_version 1.3 Name: glibc-utils %define normal_build ("%{name}" == "glibc") @@ -231,6 +231,8 @@ Patch306: glibc-fix-double-loopback.diff ### # Patches from upstream ### +# PATCH-FIX-UPSTREAM Fix misdetected Slow_SSE4_2 cpu feature bit (BZ #17501) +Patch1000: ifunc-x86-slow-sse4.patch ### # Patches awaiting upstream approval @@ -450,6 +452,8 @@ rm nscd/s-stamp %patch304 -p1 %patch306 -p1 +%patch1000 -p1 + %patch2000 -p1 %patch2002 -p1 %patch2003 -p1 diff --git a/glibc.changes b/glibc.changes index 2648c16..95b4d12 100644 --- a/glibc.changes +++ b/glibc.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Oct 28 08:56:47 UTC 2014 - schwab@suse.de + +- Update to crypt_blowfish 1.3. + * Add support for the $2b$ prefix. +- ifunc-x86-slow-sse4.patch: Fix misdetected Slow_SSE4_2 cpu feature bit + (BZ #17501) + ------------------------------------------------------------------- Mon Sep 8 09:48:26 UTC 2014 - schwab@suse.de diff --git a/glibc.spec b/glibc.spec index e78a302..8c78aaf 100644 --- a/glibc.spec +++ b/glibc.spec @@ -24,7 +24,7 @@ # It will avoid building some parts of glibc %bcond_with fast_build -%define crypt_bf_version 1.2 +%define crypt_bf_version 1.3 Name: glibc %define normal_build ("%{name}" == "glibc") @@ -232,6 +232,8 @@ Patch306: glibc-fix-double-loopback.diff ### # Patches from upstream ### +# PATCH-FIX-UPSTREAM Fix misdetected Slow_SSE4_2 cpu feature bit (BZ #17501) +Patch1000: ifunc-x86-slow-sse4.patch ### # Patches awaiting upstream approval @@ -450,6 +452,8 @@ rm nscd/s-stamp %patch304 -p1 %patch306 -p1 +%patch1000 -p1 + %patch2000 -p1 %patch2002 -p1 %patch2003 -p1 diff --git a/ifunc-x86-slow-sse4.patch b/ifunc-x86-slow-sse4.patch new file mode 100644 index 0000000..7bc194c --- /dev/null +++ b/ifunc-x86-slow-sse4.patch @@ -0,0 +1,111 @@ +2014-10-27 Andreas Schwab + + [BZ #17501] + * sysdeps/i386/i686/multiarch/strcasecmp.S (__strcasecmp): Fix + check for Slow_SSE4_2 feature bit. + * sysdeps/i386/i686/multiarch/strcmp.S (STRCMP): Likewise. + * sysdeps/i386/i686/multiarch/strncase.S (__strncasecmp): Likewise. + * sysdeps/x86_64/multiarch/strcmp.S (STRCMP, __strcascmp): + Likewise. Fix check for Fast_Unaligned_Load feature bit. + +Index: glibc-2.20/sysdeps/i386/i686/multiarch/strcasecmp.S +=================================================================== +--- glibc-2.20.orig/sysdeps/i386/i686/multiarch/strcasecmp.S ++++ glibc-2.20/sysdeps/i386/i686/multiarch/strcasecmp.S +@@ -37,7 +37,7 @@ ENTRY(__strcasecmp) + leal __strcasecmp_ssse3@GOTOFF(%ebx), %eax + testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features@GOTOFF(%ebx) + jz 2f +- testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) ++ testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) + jnz 2f + leal __strcasecmp_sse4_2@GOTOFF(%ebx), %eax + 2: popl %ebx +@@ -58,7 +58,7 @@ ENTRY(__strcasecmp) + leal __strcasecmp_ssse3, %eax + testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features + jz 2f +- testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features ++ testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features + jnz 2f + leal __strcasecmp_sse4_2, %eax + 2: ret +Index: glibc-2.20/sysdeps/i386/i686/multiarch/strcmp.S +=================================================================== +--- glibc-2.20.orig/sysdeps/i386/i686/multiarch/strcmp.S ++++ glibc-2.20/sysdeps/i386/i686/multiarch/strcmp.S +@@ -68,7 +68,7 @@ ENTRY(STRCMP) + leal __STRCMP_SSSE3@GOTOFF(%ebx), %eax + testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features@GOTOFF(%ebx) + jz 2f +- testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) ++ testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) + jnz 2f + leal __STRCMP_SSE4_2@GOTOFF(%ebx), %eax + 2: popl %ebx +@@ -89,7 +89,7 @@ ENTRY(STRCMP) + leal __STRCMP_SSSE3, %eax + testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features + jz 2f +- testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features ++ testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features + jnz 2f + leal __STRCMP_SSE4_2, %eax + 2: ret +Index: glibc-2.20/sysdeps/i386/i686/multiarch/strncase.S +=================================================================== +--- glibc-2.20.orig/sysdeps/i386/i686/multiarch/strncase.S ++++ glibc-2.20/sysdeps/i386/i686/multiarch/strncase.S +@@ -37,7 +37,7 @@ ENTRY(__strncasecmp) + leal __strncasecmp_ssse3@GOTOFF(%ebx), %eax + testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features@GOTOFF(%ebx) + jz 2f +- testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) ++ testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) + jnz 2f + leal __strncasecmp_sse4_2@GOTOFF(%ebx), %eax + 2: popl %ebx +@@ -58,7 +58,7 @@ ENTRY(__strncasecmp) + leal __strncasecmp_ssse3, %eax + testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features + jz 2f +- testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features ++ testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features + jnz 2f + leal __strncasecmp_sse4_2, %eax + 2: ret +Index: glibc-2.20/sysdeps/x86_64/multiarch/strcmp.S +=================================================================== +--- glibc-2.20.orig/sysdeps/x86_64/multiarch/strcmp.S ++++ glibc-2.20/sysdeps/x86_64/multiarch/strcmp.S +@@ -91,10 +91,10 @@ ENTRY(STRCMP) + 1: + #ifdef USE_AS_STRCMP + leaq __strcmp_sse2_unaligned(%rip), %rax +- testl $bit_Fast_Unaligned_Load, __cpu_features+CPUID_OFFSET+index_Fast_Unaligned_Load(%rip) ++ testl $bit_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_Fast_Unaligned_Load(%rip) + jnz 3f + #else +- testl $bit_Slow_SSE4_2, __cpu_features+CPUID_OFFSET+index_Slow_SSE4_2(%rip) ++ testl $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip) + jnz 2f + leaq STRCMP_SSE42(%rip), %rax + testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) +@@ -120,7 +120,7 @@ ENTRY(__strcasecmp) + testl $bit_AVX_Usable, __cpu_features+FEATURE_OFFSET+index_AVX_Usable(%rip) + jnz 3f + # endif +- testl $bit_Slow_SSE4_2, __cpu_features+CPUID_OFFSET+index_Slow_SSE4_2(%rip) ++ testl $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip) + jnz 2f + leaq __strcasecmp_sse42(%rip), %rax + testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) +@@ -146,7 +146,7 @@ ENTRY(__strncasecmp) + testl $bit_AVX_Usable, __cpu_features+FEATURE_OFFSET+index_AVX_Usable(%rip) + jnz 3f + # endif +- testl $bit_Slow_SSE4_2, __cpu_features+CPUID_OFFSET+index_Slow_SSE4_2(%rip) ++ testl $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip) + jnz 2f + leaq __strncasecmp_sse42(%rip), %rax + testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)