This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, GCC/ARM, 2/3] Error out for incompatible ARM multilibs
- From: "Thomas Preud'homme" <thomas dot preudhomme at foss dot arm dot com>
- To: <gcc-patches at gcc dot gnu dot org>, "Richard Earnshaw" <Richard dot Earnshaw at arm dot com>, "Ramana Radhakrishnan" <ramana dot radhakrishnan at arm dot com>, "Kyrylo Tkachov" <kyrylo dot tkachov at arm dot com>
- Date: Wed, 16 Dec 2015 19:58:33 +0800
- Subject: [PATCH, GCC/ARM, 2/3] Error out for incompatible ARM multilibs
- Authentication-results: sourceware.org; auth=none
Currently in config.gcc, only the first multilib in a multilib list is checked for validity and the following elements are ignored due to the break which only breaks out of loop in shell. A loop is also done over the multilib list elements despite no combination being legal. This patch rework the code to address both issues.
ChangeLog entry is as follows:
2015-11-24 Thomas Preud'homme <thomas.preudhomme@arm.com>
* config.gcc: Error out when conflicting multilib is detected. Do not
loop over multilibs since no combination is legal.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 59aee2c..be3c720 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -3772,38 +3772,40 @@ case "${target}" in
# Add extra multilibs
if test "x$with_multilib_list" != x; then
arm_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
- for arm_multilib in ${arm_multilibs}; do
- case ${arm_multilib} in
- aprofile)
+ case ${arm_multilibs} in
+ aprofile)
# Note that arm/t-aprofile is a
# stand-alone make file fragment to be
# used only with itself. We do not
# specifically use the
# TM_MULTILIB_OPTION framework because
# this shorthand is more
- # pragmatic. Additionally it is only
- # designed to work without any
- # with-cpu, with-arch with-mode
+ # pragmatic.
+ tmake_profile_file="arm/t-aprofile"
+ ;;
+ default)
+ ;;
+ *)
+ echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
+ exit 1
+ ;;
+ esac
+
+ if test "x${tmake_profile_file}" != x ; then
+ # arm/t-aprofile is only designed to work
+ # without any with-cpu, with-arch, with-mode,
# with-fpu or with-float options.
- if test "x$with_arch" != x \
- || test "x$with_cpu" != x \
- || test "x$with_float" != x \
- || test "x$with_fpu" != x \
- || test "x$with_mode" != x ; then
- echo "Error: You cannot use any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=aprofile" 1>&2
- exit 1
- fi
- tmake_file="${tmake_file} arm/t-aprofile"
- break
- ;;
- default)
- ;;
- *)
- echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
- exit 1
- ;;
- esac
- done
+ if test "x$with_arch" != x \
+ || test "x$with_cpu" != x \
+ || test "x$with_float" != x \
+ || test "x$with_fpu" != x \
+ || test "x$with_mode" != x ; then
+ echo "Error: You cannot use any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=${arm_multilib}" 1>&2
+ exit 1
+ fi
+
+ tmake_file="${tmake_file} ${tmake_profile_file}"
+ fi
fi
;;
Tested with the following multilib lists:
+ foo -> "Error: --with-multilib-list=foo not supported" as expected
+ default,aprofile -> "Error: --with-multilib-list=default,aprofile not supported" as expected
+ aprofile,default -> "Error: --with-multilib-list=aprofile,default not supported" as expected
+ (nothing) -> libraries in $installdir/arm-none-eabi/lib{,fpu,thumb}
+ default -> libraries in $installdir/arm-none-eabi/lib{,fpu,thumb} as expected
+ aprofile -> $installdir/arm-none-eabi/lib contains all supported multilib
Is this ok for trunk?
Best regards,
Thomas