Mark H Weaver <m...@netris.org> writes: > Ricardo Wurmus <rek...@elephly.net> writes: > >> Since commit 665d6a59161769e10b52ffcbcd5cd2db22f32681 I have to build >> glibc from source. Unfortunately, this fails with the following error: >> >> … >> i686-guix-linux-gnu-gcc ../sysdeps/i386/i686/multiarch/strcspn-c.c -c >> -std=gnu11 -fgnu89-inline -O2 -Wall -Werror -Wundef - >> In file included from ../sysdeps/x86_64/multiarch/strcspn-c.c:22:0, >> from ../sysdeps/i386/i686/multiarch/strcspn-c.c:2: >> ../sysdeps/x86_64/multiarch/varshift.h: In function '__m128i_shift_right': >> ../sysdeps/x86_64/multiarch/varshift.h:26:1: error: SSE vector return >> without SSE enabled changes the ABI [-Werror=psabi] >> { >> ^ >> In file included from >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4., >> from >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4., >> from ../sysdeps/x86_64/multiarch/strcspn-c.c:20, >> from ../sysdeps/i386/i686/multiarch/strcspn-c.c:2: >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4.0/include/tmmintrin.h:h >> _mm_shuffle_epi8 (__m128i __X, __m128i __Y) >> ^ >> In file included from ../sysdeps/x86_64/multiarch/strcspn-c.c:22:0, >> from ../sysdeps/i386/i686/multiarch/strcspn-c.c:2: >> ../sysdeps/x86_64/multiarch/varshift.h:27:10: error: called from here >> return _mm_shuffle_epi8 (value, >> ^ >> In file included from >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4., >> from >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4., >> from >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4., >> from >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4., >> from ../sysdeps/x86_64/multiarch/strcspn-c.c:20, >> from ../sysdeps/i386/i686/multiarch/strcspn-c.c:2: >> /gnu/store/85qsxn71dn6944df5kcvkxg0nm3xdg6z-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4.0/include/emmintrin.h:h >> _mm_loadu_si128 (__m128i const *__P) >> ^ >> In file included from ../sysdeps/x86_64/multiarch/strcspn-c.c:22:0, >> from ../sysdeps/i386/i686/multiarch/strcspn-c.c:2: >> ../sysdeps/x86_64/multiarch/varshift.h:27:10: error: called from here >> return _mm_shuffle_epi8 (value, >> ^ >> cc1: all warnings being treated as errors >> make[4]: *** [/tmp/guix-build-glibc-2.25.drv-0/build/sysd-rules:561: >> /tmp/guix-build-glibc-2.25.drv-0/build/string/rtld-strc1 >> make[4]: Leaving directory >> '/tmp/guix-build-glibc-2.25.drv-0/glibc-2.25/string' >> make[3]: *** [../o-iterator.mk:9: >> /tmp/guix-build-glibc-2.25.drv-0/build/string/rtld-strchr.os] Error 2 >> make[3]: Leaving directory '/tmp/guix-build-glibc-2.25.drv-0/glibc-2.25/elf' >> make[2]: *** [Makefile:443: >> /tmp/guix-build-glibc-2.25.drv-0/build/elf/rtld-libc.a] Error 2 >> make[2]: Leaving directory '/tmp/guix-build-glibc-2.25.drv-0/glibc-2.25/elf' >> make[1]: *** [Makefile:215: elf/subdir_lib] Error 2 >> make[1]: Leaving directory '/tmp/guix-build-glibc-2.25.drv-0/glibc-2.25' >> make: *** [Makefile:9: all] Error 2 >> phase `build' failed after 1749.9 seconds >> builder for `/gnu/store/ivvdx2m0p6gnmcxmz355z106ffqg9p25-glibc-2.25.drv' >> failed with exit code 1 >> guix system: error: build failed: build of >> `/gnu/store/ivvdx2m0p6gnmcxmz355z106ffqg9p25-glibc-2.25.drv' failed >> >> This means I cannot upgrade my i686 machines. > > Hmm. The patches added by commit 665d6a5916 change only one file: > rtld.c, so I don't see how that could affect the building of > strcspn-c.c.
I built both the grafted and ungrafted versions of 'glibc-final' for i686-linux, and compared the build logs. The problem is that glibc-CVE-2017-1000366-pt2.patch introduces a reference to 'strcspn' in rtld.c. This causes the glibc build system to automatically add 'rtld-strcspn.os' and 'rtld-strcspn-c.os' to the list of objects to be built. When 'rtld-strcspn-c.os' is built, "-msse4" is passed to the compiler (along with "-mno-sse" near the end). Here's are the relevant parts of the diff: -make subdir=string -C ../string ..=../ objdir=/tmp/guix-build-glibc-2.25.drv-0/build -f Makefile -f ../elf/rtld-Rules rtld-all rtld-modules='rtld-strchr.os rtld-strcmp.os rtld-strdup.os rtld-strlen.os rtld-strnlen.os rtld-memchr.os rtld-memcmp.os rtld-memmove.os rtld-memset.os rtld-mempcpy.os rtld-stpcpy.os rtld-memcpy.os rtld-rawmemchr.os rtld-memset-sse2.os rtld-memcpy-ssse3.os rtld-mempcpy-ssse3.os rtld-memmove-ssse3.os rtld-memcpy-ssse3-rep.os rtld-mempcpy-ssse3-rep.os rtld-memmove-ssse3-rep.os rtld-memset-sse2-rep.os rtld-strcmp-ssse3.os rtld-strcmp-sse4.os rtld-memcmp-ssse3.os rtld-memcmp-sse4.os rtld-strlen-sse2.os rtld-strlen-sse2-bsf.os rtld-stpcpy-ssse3.os rtld-stpcpy-sse2.os rtld-strchr-sse2.os rtld-strchr-sse2-bsf.os rtld-memchr-sse2.os rtld-memchr-sse2-bsf.os rtld-rawmemchr-sse2.os rtld-rawmemchr-sse2-bsf.os rtld-strnlen-sse2.os rtld-strnlen-c.os rtld-memcpy-sse2-unaligned.os rtld-mempcpy-sse2-unaligned.os rtld-memmove-sse2-unaligned.os rtld-cacheinfo.os' +make subdir=string -C ../string ..=../ objdir=/tmp/guix-build-glibc-2.25.drv-0/build -f Makefile -f ../elf/rtld-Rules rtld-all rtld-modules='rtld-strchr.os rtld-strcmp.os rtld-strcspn.os rtld-strdup.os rtld-strlen.os rtld-strnlen.os rtld-memchr.os rtld-memcmp.os rtld-memmove.os rtld-memset.os rtld-mempcpy.os rtld-stpcpy.os rtld-memcpy.os rtld-rawmemchr.os rtld-memset-sse2.os rtld-memcpy-ssse3.os rtld-mempcpy-ssse3.os rtld-memmove-ssse3.os rtld-memcpy-ssse3-rep.os rtld-mempcpy-ssse3-rep.os rtld-memmove-ssse3-rep.os rtld-memset-sse2-rep.os rtld-strcmp-ssse3.os rtld-strcmp-sse4.os rtld-memcmp-ssse3.os rtld-memcmp-sse4.os rtld-strlen-sse2.os rtld-strlen-sse2-bsf.os rtld-stpcpy-ssse3.os rtld-stpcpy-sse2.os rtld-strchr-sse2.os rtld-strchr-sse2-bsf.os rtld-memchr-sse2.os rtld-memchr-sse2-bsf.os rtld-rawmemchr-sse2.os rtld-rawmemchr-sse2-bsf.os rtld-strnlen-sse2.os rtld-strnlen-c.os rtld-memcpy-sse2-unaligned.os rtld-mempcpy-sse2-unaligned.os rtld-memmove-sse2-unaligned.os rtld-strcspn-c.os rtld-cacheinfo.os rtld-varshift.os' [...] +i686-guix-linux-gnu-gcc ../sysdeps/i386/i686/multiarch/strcspn-c.c -c -std=gnu11 -fgnu89-inline -O2 -Wall -Werror -Wundef -Wwrite-strings -fmerge-all-constants -fno-stack-protector -frounding-math -g -Wstrict-prototypes -Wold-style-definition -fPIC -Wa,-mtune=i686 -mno-sse -mno-mmx -mfpmath=387 -msse4 -ftls-model=initial-exec -I../include -I/tmp/guix-build-glibc-2.25.drv-0/build/string -I/tmp/guix-build-glibc-2.25.drv-0/build -I../sysdeps/unix/sysv/linux/i386/i686 -I../sysdeps/i386/i686/nptl -I../sysdeps/unix/sysv/linux/i386 -I../sysdeps/unix/sysv/linux/x86 -I../sysdeps/i386/nptl -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/i386 -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/i386/i686/fpu/multiarch -I../sysdeps/i386/i686/fpu -I../sysdeps/i386/i686/multiarch -I../sysdeps/i386/i686 -I../sysdeps/i386/fpu -I../sysdeps/x86/fpu/include -I../sysdeps/x86/fpu -I../sysdeps/i386 -I../sysdeps/x86 -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -nostdinc -isystem /gnu/store/...-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4.0/include -isystem /gnu/store/...-gcc-cross-boot0-5.4.0-lib/lib/gcc/i686-guix-linux-gnu/5.4.0/include-fixed -isystem /gnu/store/...-linux-libre-headers-4.4.47/include -D_LIBC_REENTRANT -include /tmp/guix-build-glibc-2.25.drv-0/build/libc-modules.h -DMODULE_NAME=rtld -include ../include/libc-symbols.h -DPIC -DSHARED -o /tmp/guix-build-glibc-2.25.drv-0/build/string/rtld-strcspn-c.os -MD -MP -MF /tmp/guix-build-glibc-2.25.drv-0/build/string/rtld-strcspn-c.os.dt -MT /tmp/guix-build-glibc-2.25.drv-0/build/string/rtld-strcspn-c.os -mno-sse -mno-mmx -mfpmath=387 +In file included from ../sysdeps/x86_64/multiarch/strcspn-c.c:22:0, + from ../sysdeps/i386/i686/multiarch/strcspn-c.c:2: +../sysdeps/x86_64/multiarch/varshift.h: In function '__m128i_shift_right': +../sysdeps/x86_64/multiarch/varshift.h:26:1: error: SSE vector return without SSE enabled changes the ABI [-Werror=psabi] [...] The excerpts above are the first hunks of the diff (excluding lines of the form "phase `...' succeeded after N.N seconds"). Mark