* sysdeps/i386/i686/multiarch/strcmp-sse4.S (__strcasecmp_sse4_2) (__strncasecmp_sse4_2) [PIC]: Restore %ebx before falling through to __strcasecmp_nonascii and __strncasecmp_nonascii. * sysdeps/i386/i686/multiarch/strcmp-ssse3.S (__strcasecmp_ssse3) (__strncasecmp_ssse3) [PIC]: Likewise. Index: glibc-2.17/sysdeps/i386/i686/multiarch/strcmp-sse4.S =================================================================== --- glibc-2.17.orig/sysdeps/i386/i686/multiarch/strcmp-sse4.S +++ glibc-2.17/sysdeps/i386/i686/multiarch/strcmp-sse4.S @@ -121,8 +121,14 @@ ENTRY (__strcasecmp_sse4_2) movl (%eax), %eax # endif testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) +# ifdef PIC + je L(ascii) + POP (%ebx) + jmp __strcasecmp_nonascii +# else jne __strcasecmp_nonascii jmp L(ascii) +# endif END (__strcasecmp_sse4_2) #endif @@ -152,8 +158,14 @@ ENTRY (__strncasecmp_sse4_2) movl (%eax), %eax # endif testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) +# ifdef PIC + je L(ascii) + POP (%ebx) + jmp __strncasecmp_nonascii +# else jne __strncasecmp_nonascii jmp L(ascii) +# endif END (__strncasecmp_sse4_2) #endif Index: glibc-2.17/sysdeps/i386/i686/multiarch/strcmp-ssse3.S =================================================================== --- glibc-2.17.orig/sysdeps/i386/i686/multiarch/strcmp-ssse3.S +++ glibc-2.17/sysdeps/i386/i686/multiarch/strcmp-ssse3.S @@ -138,8 +138,14 @@ ENTRY (__strcasecmp_ssse3) movl (%eax), %eax # endif testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) +# ifdef PIC + je L(ascii) + POP (%ebx) + jmp __strcasecmp_nonascii +# else jne __strcasecmp_nonascii jmp L(ascii) +# endif END (__strcasecmp_ssse3) #endif @@ -169,8 +175,14 @@ ENTRY (__strncasecmp_ssse3) movl (%eax), %eax # endif testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) +# ifdef PIC + je L(ascii) + POP (%ebx) + jmp __strncasecmp_nonascii +# else jne __strncasecmp_nonascii jmp L(ascii) +# endif END (__strncasecmp_ssse3) #endif