From d4b2a692a812fd7d908053ed87e2b8c86c49f7bb Mon Sep 17 00:00:00 2001 From: Helmut Pozimski Date: Mon, 27 Feb 2017 13:38:45 +0100 Subject: [PATCH] glibc: revert upstream changes to memchr-sse2 the changes made in glibc upstream commit 23d27709a423aec32821e9a5198a10267107bae2 cause segmentation faults on at least some i686 processors. This commit reverts these changes to resolve the issue on affected systems until there's an upstream fix. --- .../glibc/patches/revert-memchr-i686.patch | 42 +++++++++++++++++++ srcpkgs/glibc/template | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/glibc/patches/revert-memchr-i686.patch diff --git a/srcpkgs/glibc/patches/revert-memchr-i686.patch b/srcpkgs/glibc/patches/revert-memchr-i686.patch new file mode 100644 index 00000000000..da5de426a7b --- /dev/null +++ b/srcpkgs/glibc/patches/revert-memchr-i686.patch @@ -0,0 +1,42 @@ +diff --git a/sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S b/sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S +index dd316486e6..c035329ece 100644 +--- a/sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S ++++ b/sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S +@@ -149,15 +149,9 @@ L(crosscache): + .p2align 4 + L(unaligned_no_match): + # ifndef USE_AS_RAWMEMCHR +- /* Calculate the last acceptable address and check for possible +- addition overflow by using satured math: +- edx = ecx + edx +- edx |= -(edx < ecx) */ +- add %ecx, %edx +- sbb %eax, %eax +- or %eax, %edx + sub $16, %edx +- jbe L(return_null) ++ add %ecx, %edx ++ jle L(return_null) + add $16, %edi + # else + add $16, %edx +diff --git a/sysdeps/i386/i686/multiarch/memchr-sse2.S b/sysdeps/i386/i686/multiarch/memchr-sse2.S +index 910679cfc0..f1a11b5c67 100644 +--- a/sysdeps/i386/i686/multiarch/memchr-sse2.S ++++ b/sysdeps/i386/i686/multiarch/memchr-sse2.S +@@ -118,14 +118,8 @@ L(crosscache): + # ifndef USE_AS_RAWMEMCHR + jnz L(match_case2_prolog1) + lea -16(%edx), %edx +- /* Calculate the last acceptable address and check for possible +- addition overflow by using satured math: +- edx = ecx + edx +- edx |= -(edx < ecx) */ + add %ecx, %edx +- sbb %eax, %eax +- or %eax, %edx +- jbe L(return_null) ++ jle L(return_null) + lea 16(%edi), %edi + # else + jnz L(match_case1_prolog1) diff --git a/srcpkgs/glibc/template b/srcpkgs/glibc/template index 3cefe023652..447a9fedf5d 100644 --- a/srcpkgs/glibc/template +++ b/srcpkgs/glibc/template @@ -1,7 +1,7 @@ # Template file for 'glibc' pkgname=glibc version=2.25 -revision=2 +revision=3 bootstrap=yes short_desc="The GNU C library" maintainer="Juan RP "