This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [arm-embedded][PATCH, GCC/ARM, 2/3] Error out for incompatible ARM multilibs


Hi,

We decided to also apply this patch to the ARM embedded 6 branch.

Best regards,

Thomas

On 17/12/15 09:32, Thomas Preud'homme wrote:
Hi,

We decided to apply the following patch to the ARM embedded 5 branch.

Best regards,

Thomas

-----Original Message-----
From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches-
owner@gcc.gnu.org] On Behalf Of Thomas Preud'homme
Sent: Wednesday, December 16, 2015 7:59 PM
To: gcc-patches@gcc.gnu.org; Richard Earnshaw; Ramana Radhakrishnan;
Kyrylo Tkachov
Subject: [PATCH, GCC/ARM, 2/3] Error out for incompatible ARM
multilibs

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" !=; then
 			arm_multilibs=cho $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=rm/t-aprofile"
+				;;
+			default)
+				;;
+			*)
+				echo "Error: --with-multilib-
list=with_multilib_list} not supported." 1>&2
+				exit 1
+				;;
+			esac
+
+			if test "x${tmake_profile_file}" != ; 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" != \
-					    || test "x$with_cpu" != \
-					    || test "x$with_float" != \
-					    || test "x$with_fpu" != \
-					    || test "x$with_mode" != ;
then
-					    echo "Error: You cannot use
any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=rofile"
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" != \
+				    || test "x$with_cpu" != \
+				    || test "x$with_float" != \
+				    || test "x$with_fpu" != \
+				    || test "x$with_mode" != ; 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=o not supported" as expected
  + default,aprofile -> "Error: --with-multilib-list�fault,aprofile not
supported" as expected
  + aprofile,default -> "Error: --with-multilib-list=rofile,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




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]