Subject: bug#27489: glibc fails to build on i686

From: Mark H Weaver <[email-masked]>
Date: Sun, 25 Jun 2017 17:08:09 -0400

Ricardo Wurmus <[email-masked]> 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.

For now, I will try to build this derivation on Hydra, so that it will
be available as a substitute.

       Mark