Discussion:
problems in ABE's support for manifest files and multilibs
Fred Peterson
2015-11-29 03:35:58 UTC
Permalink
Hello,

I am trying to create gcc 4.9.x toolchains for ARM v7 and v8 based on Linaro's sources. At first Linaro's 4.9-2015.05 binary release looked suitable, but then one of my colleagues noticed that that it had an incompatibility with Red Hat Enterprise Linux 6. Linaro has decided not to fix this incompatibility (see https://bugs.linaro.org/show_bug.cgi?id=1869 ).

So, I tried to work around that bug by rebuilding the toolchains myself on RHEL6 using Linaro's new ABE script. I initially tried to recreate the builds by using ABE's --manifest <manifest_file> command line option. I experienced problems with that, though, including it building gcc version 6.x instead of 4.9.x. I eventually gave up on that approach. Instead, I extracted the required branches and revisions from the manifest files and put them into ABE command line options, like this:


abe.sh --target aarch64-elf --build all --parallel --dump --tarball --release fsl-2015.11.16 --set libc=newlib binutils=binutils-gdb.git~linaro_binutils-2_24-***@a93e252ee5250dba831e54f98336b40c7210dac7 gcc=gcc-linaro-4.9-2015.05 gmp=5.1.3 gdb=binutils-gdb.git~gdb-7.10-***@ef5fa52ac9ab68b505b52acb2d2068b366ba8bf2 mpfr=3.1.2 mpc=1.0.1 newlib=newlib.git~linaro_newlib-***@136b66e404df41435bdec4630c0787b0bc7e7580

abe.sh --target aarch64-linux-gnu --build all --parallel --dump --tarball --release fsl-2015.11.16 --set libc=glibc binutils=binutils-gdb.git~linaro_binutils-2_24-***@a93e252ee5250dba831e54f98336b40c7210dac7 gcc=gcc-linaro-4.9-2015.05 gmp=5.1.3 gdb=binutils-gdb.git~gdb-7.10-***@ef5fa52ac9ab68b505b52acb2d2068b366ba8bf2 mpfr=3.1.2 mpc=1.0.1 glibc=glibc-linaro-2.20-2014.11.tar.xz

abe.sh --target arm-eabi --build all --parallel --dump --tarball --release fsl-2015.11.16 --set libc=newlib binutils=binutils-gdb.git~linaro_binutils-2_24-***@a93e252ee5250dba831e54f98336b40c7210dac7 gcc=gcc-linaro-4.9-2015.05 gmp=5.1.3 gdb=binutils-gdb.git~gdb-7.10-***@ef5fa52ac9ab68b505b52acb2d2068b366ba8bf2 mpfr=3.1.2 mpc=1.0.1 newlib=newlib.git~linaro_newlib-***@136b66e404df41435bdec4630c0787b0bc7e7580

abe.sh --target arm-linux-gnueabihf --build all --parallel --dump --tarball --release fsl-2015.11.16 --set libc=glibc binutils=binutils-gdb.git~linaro_binutils-2_24-***@a93e252ee5250dba831e54f98336b40c7210dac7 gcc=gcc-linaro-4.9-2015.05 gmp=5.1.3 gdb=binutils-gdb.git~gdb-7.10-***@ef5fa52ac9ab68b505b52acb2d2068b366ba8bf2 mpfr=3.1.2 mpc=1.0.1 glibc=glibc-linaro-2.20-2014.11.tar.xz


That worked, and the resulting toolchains ran without error under RHEL6. Note that I deliberately chose to switch to glibc in the *-linux-* toolchains, whereas the manifest files had them using eglibc.

At least one serious problem remained. The toolchains supported different multilibs than previous releases. For example, arm-eabi-gcc reported that it supported only three sets of libraries:

$ arm-eabi-gcc -print-multi-lib
.;
thumb;@mthumb
fpu;@mfloat-abi=hard

Linaro's 2015.05 build of the toolchain gives the same output. However, previous releases of this toolchain supported a much larger set of multilibs. A build from 2014.08 reports:

$ arm-none-eabi-gcc --print-multi-lib
.;
thumb;@mthumb
v7-a;@march=armv7-a
v7ve;@march=armv7ve
v8-a;@march=armv8-a
v7-a/fpv3/softfp;@march=armv7-***@mfpu=vfpv3-***@mfloat-abi=softfp
v7-a/fpv3/hard;@march=armv7-***@mfpu=vfpv3-***@mfloat-abi=hard
v7-a/simdv1/softfp;@march=armv7-***@mfpu=***@mfloat-abi=softfp
v7-a/simdv1/hard;@march=armv7-***@mfpu=***@mfloat-abi=hard
v7ve/fpv4/softfp;@march=***@mfpu=vfpv4-***@mfloat-abi=softfp
v7ve/fpv4/hard;@march=***@mfpu=vfpv4-***@mfloat-abi=hard
v7ve/simdvfpv4/softfp;@march=***@mfpu=neon-***@mfloat-abi=softfp
v7ve/simdvfpv4/hard;@march=***@mfpu=neon-***@mfloat-abi=hard
v8-a/simdv8/softfp;@march=armv8-***@mfpu=neon-fp-***@mfloat-abi=softfp
v8-a/simdv8/hard;@march=armv8-***@mfpu=neon-fp-***@mfloat-abi=hard
thumb/v7-a;@***@march=armv7-a
thumb/v7ve;@***@march=armv7ve
thumb/v8-a;@***@march=armv8-a
thumb/v7-a/fpv3/softfp;@***@march=armv7-***@mfpu=vfpv3-***@mfloat-abi=softfp
thumb/v7-a/fpv3/hard;@***@march=armv7-***@mfpu=vfpv3-***@mfloat-abi=hard
thumb/v7-a/simdv1/softfp;@***@march=armv7-***@mfpu=***@mfloat-abi=softfp
thumb/v7-a/simdv1/hard;@***@march=armv7-***@mfpu=***@mfloat-abi=hard
thumb/v7ve/fpv4/softfp;@***@march=***@mfpu=vfpv4-***@mfloat-abi=softfp
thumb/v7ve/fpv4/hard;@***@march=***@mfpu=vfpv4-***@mfloat-abi=hard
thumb/v7ve/simdvfpv4/softfp;@***@march=***@mfpu=neon-***@mfloat-abi=softfp
thumb/v7ve/simdvfpv4/hard;@***@march=***@mfpu=neon-***@mfloat-abi=hard
thumb/v8-a/simdv8/softfp;@***@march=armv8-***@mfpu=neon-fp-***@mfloat-abi=softfp
thumb/v8-a/simdv8/hard;@***@march=armv8-***@mfpu=neon-fp-***@mfloat-abi=hard

I found that the file that encodes this older set of multilib mappings is gcc-linaro-4.9-2015.05/gcc/config/arm/t-aprofile. Based on some comments in gcc-linaro-4.9-2015.05/gcc/config.gcc, I guessed that ABE should have configured gcc with "--with-multilib-list=aprofile", and without "--with-arch=armv7-a" or "--with-fpu=vfpv3-d16". I quickly hacked these changes into abe/config/gcc.conf like this:

diff --git a/config/gcc.conf b/config/gcc.conf
index 19c44ca..4cc5eaf
--- a/config/gcc.conf
+++ b/config/gcc.conf
@@ -111,9 +111,9 @@ if test x"${build}" != x"${target}"; then
default_configure_flags="${default_configure_flags} --with-tune=cortex-a9"
fi
if test x"${override_arch}" = x -a x"${override_cpu}" = x; then
- default_configure_flags="${default_configure_flags} --with-arch=armv7-a"
+ default_configure_flags="${default_configure_flags}"
fi
- default_configure_flags="${default_configure_flags} --enable-threads=no --with-fpu=vfpv3-d16 --enable-multilib --disable-multiarch"
+ default_configure_flags="${default_configure_flags} --enable-threads=no --with-multilib-list=aprofile --enable-multilib --disable-multiarch"
languages="c,c++,lto"
;;
aarch64*-*elf)

After rebuilding the toolchain, I found it had the desired older set of multilibs.

I hope that this mail will help anyone who experiences similar problems. I have filed a bug report for the multilib issue. See https://bugs.linaro.org/show_bug.cgi?id=1920 .

While validating the toolchains, dejagnu reports a few unexpected failures. Does the TCWG publish their validation results anywhere for comparison? That would be very helpful.

Thanks,

Fred Peterson
Freescale Developer Tools

Loading...