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


Ping?

Best regards,

Thomas

On Thursday 17 December 2015 17:32:48 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" != 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


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