GCC8: fails to build when configured --with-cpu=xscale
Alexey Neyman
stilor@att.net
Wed May 30 10:40:00 GMT 2018
[Sorry for replying to myself & inserting Richard's reply - somehow his
emails do not reach my inbox, so I had to copy it from the web archive
of gcc-help@]
On 05/29/2018 11:16 PM, Alexey Neyman wrote:
>
>
> On 05/26/2018 10:01 PM, Alexey Neyman wrote:
>> Hi,
>>
>> I am seeing the following failure when building a crosstool-NG
>> configuration which configures GCC for XScale CPU. The warning is:
>>
>> cc1: warning: switch -mcpu=xscale conflicts with -march=armv5te switch
>>
>> But during the build of libatomic, -Werror is thrown in, so the
>> warning becomes an error.
>>
>> GCC is configured with:
>>
>> CC_FOR_BUILD='x86_64-build_pc-linux-gnu-gcc' CFLAGS='-O2 -g -pipe
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
>> ' CFLAGS_FOR_BUILD='-O2 -g -pipe
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
>> ' CXXFLAGS='-O2 -g -pipe
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
>> ' CXXFLAGS_FOR_BUILD='-O2 -g -pipe
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
>> '
>> LDFLAGS='-L/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/lib
>> -lstdc++ -lm' CFLAGS_FOR_TARGET='' CXXFLAGS_FOR_TARGET=''
>> LDFLAGS_FOR_TARGET='' '/bin/bash'
>> '/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/configure'
>> '--build=x86_64-build_pc-linux-gnu'
>> '--host=x86_64-build_pc-linux-gnu'
>> '--target=armeb-unknown-linux-uclibcgnueabi'
>> '--prefix=/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi'
>> '--with-sysroot=/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/sysroot'
>> '--enable-languages=c,c++' '--with-cpu=xscale' '--with-float=soft'
>> '--with-pkgversion=crosstool-NG 1.23.0-392-gd274ab06-dirty'
>> '--disable-sjlj-exceptions' '--enable-__cxa_atexit'
>> '--disable-libmudflap' '--disable-libgomp' '--disable-libssp'
>> '--disable-libquadmath' '--disable-libquadmath-support'
>> '--disable-libsanitizer' '--disable-libmpx'
>> '--with-gmp=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
>> '--with-mpfr=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
>> '--with-mpc=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
>> '--with-isl=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
>> '--enable-lto' '--with-host-libstdcxx=-static-libgcc
>> -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' '--enable-threads=posix'
>> '--enable-target-optspace' '--enable-plugin' '--enable-gold'
>> '--disable-nls' '--disable-multilib'
>> '--with-local-prefix=/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/sysroot'
>> '--enable-long-long'
>>
>> Failing command is:
>>
>> [ALLÂ ]Â Â Â libtool: compile:
>> /home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/build/build-cc-gcc-final/./gcc/xgcc
>> -B/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/build/build-cc-gcc-final/./gcc/
>> -B/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/bin/
>> -B/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/lib/
>> -isystem
>> /home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/include
>> -isystem
>> /home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/sys-include
>> -DHAVE_CONFIG_H
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/arm
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/linux/arm
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/posix
>> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic
>> -I. -Wall -Werror -pthread -g -O2 -g -Os -MT init.lo -MD -MP -MF
>> .deps/init.Tpo -c
>> /home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/linux/arm/init.c
>> -fPIC -DPIC -o .libs/init.o
>>
>> The problem, as far as I can see, is that the driver executes cc1
>> with the flags defined in
>>
>> #define OPTION_DEFAULT_SPECS \
>> Â {"arch", "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}" }, \
>> Â {"cpu", "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
>> Â {"tune", "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}}" }, \
>> Â {"float", "%{!mfloat-abi=*:-mfloat-abi=%(VALUE)}" }, \
>> Â {"fpu", "%{!mfpu=*:-mfpu=%(VALUE)}"}, \
>> Â {"abi", "%{!mabi=*:-mabi=%(VALUE)}"}, \
>> Â {"mode", "%{!marm:%{!mthumb:-m%(VALUE)}}"}, \
>> Â {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"},
>>
>> Which evaluates to:
>>
>> -mcpu=xscale -mfloat-abi=soft -mtls-dialect=gnu -marm -march=armv5te
>>
>> added to the arguments from the command line (as you may see, there
>> were no -march= or -mcpu= in the original command).
>>
>> Then, cc1 discovers that -mcpu=xscale and -march=armv5te are not
>> exactly compatible:
>>
>> (gdb) p arm_selected_cpu->common.isa_bits
>> $17 = {isa_bit_armv3m, isa_bit_mode32, isa_bit_notm, isa_bit_xscale,
>> isa_bit_armv4, isa_bit_armv5e, isa_bit_armv5, isa_bit_thumb,
>> isa_nobit <repeats 36 times>}
>> (gdb) p arm_selected_arch->common.isa_bits
>> $18 = {isa_bit_armv3m, isa_bit_mode32, isa_bit_notm, isa_bit_armv4,
>> isa_bit_armv5e, isa_bit_armv5, isa_bit_thumb, isa_nobit <repeats 37
>> times>}
>>
>> Because they differ in the presence of isa_bit_xscale (and that bit
>> is not listed as a quirk that's ignored during comparison), cc1
>> complains.
>>
>> What should be the fix for this?
>>
>> Regards,
>> Alexey.
>>
> The problem is almost certainly that your build system is somehow
> passing an explicit -mcpu=xscale during the build.
It does not. The command being invoked (that fails) is quoted above and
it doesn't contain the -mcpu=xscale option.
Moreover, as you rightfully stated below, if the build system did pass
this option explicitly, the driver wouldn't fall back to passing the
default values for -mcpu and -march - and it is the default values that
cause this issue.
> You need to find out
> where it is coming from and remove it (the configured default from
> --with-cpu is never used when -march or -mcpu are explicitly on the
> command line as it will be when that library is being built.
>
> This rule:
> #define OPTION_DEFAULT_SPECS \
> Â {"arch", "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}" }, \
> Â {"cpu", "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
> Â {"tune", "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}}" }, \
> Â {"float", "%{!mfloat-abi=*:-mfloat-abi=%(VALUE)}" }, \
> Â {"fpu", "%{!mfpu=*:-mfpu=%(VALUE)}"}, \
> Â {"abi", "%{!mabi=*:-mabi=%(VALUE)}"}, \
> Â {"mode", "%{!marm:%{!mthumb:-m%(VALUE)}}"}, \
> Â {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"},
>
> sets up the internal defaults. Note the first two lines both check that
> neither -march nor -mcpu are being passed explicitly before dropping in
> the builtin value.
This is exactly what I am trying to explain: our the build system *does
not* pass explicit -mcpu=xscale into the build, which is why the driver
*does* pass the default values to cc1, which then causes this warning/error.
In fact, I can reproduce this with a very simple build system - in the
attached script. You can place it in the directory with tarballs of GCC
8.1.0 and its pre-requisites:
-rw-r--r--Â 1 avn avn 20286700 May 29 22:17 binutils-2.30.tar.xz
-rwxr-xr-x 1 avn avn    1576 May 30 00:30 b.sh*
-rw-r--r--Â 1 avn avn 63372320 May 29 22:17 gcc-8.1.0.tar.xz
-rw-r--r-- 1 avn avn 1946336 May 29 22:15 gmp-6.1.2.tar.xz
-rw-r--r-- 1 avn avn 1515156 May 29 22:19 isl-0.19.tar.xz
-rw-r--r-- 1 avn avn  701263 May 29 22:16 mpc-1.1.0.tar.gz
-rw-r--r-- 1 avn avn 1412692 May 29 22:16 mpfr-4.0.1.tar.xz
After it builds everything, it will try to compile an empty file with
the resulting compiler:
+ /home/avn/t/i/bin/arm-multilib-linux-uclibcgnueabi-gcc -c foo.c -Werror
cc1: error: switch -mcpu=xscale conflicts with -march=armv5te switch
[-Werror]
cc1: all warnings being treated as errors
Regards,
Alexey.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: b.sh
Type: application/x-shellscript
Size: 1584 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-help/attachments/20180530/f84cf7b6/attachment-0003.bin>
More information about the Gcc-help
mailing list