Am 15.11.2012 00:55, schrieb Joseph S. Myers: > On Thu, 15 Nov 2012, Matthias Klose wrote: > >> Am 14.11.2012 23:41, schrieb Joseph S. Myers: >>> Your t-linux setting fails to allow for the possibility of the compiler >>> being configured to default to soft-float (whether --with-float=soft, or >>> --with-cpu etc. for a CPU that implies soft-float). soft-float (only >>> supported for 32-bit) is ABI-incompatible with hard-float and needs its >>> own multiarch name. >> >> checking for --with-float=soft is ok, but I'm a bit lost which cpu's imply >> soft-float. rs6000/t-fprules MULTILIB_MATCHES_FLOAT has a list of such cpu's. >> Are these all cpu's which imply soft-float? > > The CPUs implying soft-float are the ones using MASK_SOFT_FLOAT in > rs6000-cpus.def. If you follow MULTILIB_MATCHES_FLOAT, at least you won't > be making things wrong in any case that currently works properly (but > confirming the correctness of MULTILIB_MATCHES_FLOAT would certainly be > good).
MULTILIB_MATCHES_FLOAT doesn't list e300c2. Is this intended? updated the patch to check for soft-float configurations, and only define the multiarch name in t-spe if configured for linux. Matthias
2012-11-14 Matthias Klose <d...@ubuntu.com> * config/rs6000/t-linux64: Add multiarch names in MULTILIB_OSDIRNAMES. * config/rs6000/t-linux: New file; define MULTIARCH_DIRNAME for hard float configurations. * config/rs6000/t-fprules (SOFT_FLOAT_CPUS): New macro. (MULTILIB_MATCHES_FLOAT): Define in terms of SOFT_FLOAT_CPUS. * config/rs6000/t-spe: Define MULTIARCH_DIRNAME for linux targets. * config.gcc <powerpc-*-linux* | powerpc64-*-linux*> (tmake_file): Include rs6000/t-linux for 32bit non-biarch configurations. * configure.ac (with_cpu): Substitute variable. * configure: Regenerate. * Makefile.in (with_cpu): New macro. Index: config/rs6000/t-linux =================================================================== --- config/rs6000/t-linux (revision 0) +++ config/rs6000/t-linux (revision 0) @@ -0,0 +1,5 @@ +# do not define the multiarch name if configured for a soft-float cpu +# or soft-float. +ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float)) +MULTIARCH_DIRNAME = powerpc-linux-gnu +endif Index: config/rs6000/t-linux64 =================================================================== --- config/rs6000/t-linux64 (revision 193510) +++ config/rs6000/t-linux64 (working copy) @@ -29,4 +29,5 @@ MULTILIB_OPTIONS = m64/m32 MULTILIB_DIRNAMES = 64 32 MULTILIB_EXTRA_OPTS = fPIC -MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) +MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:powerpc64-linux-gnu) +MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) Index: config/rs6000/t-fprules =================================================================== --- config/rs6000/t-fprules (revision 193510) +++ config/rs6000/t-fprules (working copy) @@ -16,17 +16,8 @@ # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. -MULTILIB_MATCHES_FLOAT = msoft-float=mcpu?401 \ - msoft-float=mcpu?403 \ - msoft-float=mcpu?405 \ - msoft-float=mcpu?440 \ - msoft-float=mcpu?464 \ - msoft-float=mcpu?476 \ - msoft-float=mcpu?ec603e \ - msoft-float=mcpu?801 \ - msoft-float=mcpu?821 \ - msoft-float=mcpu?823 \ - msoft-float=mcpu?860 +SOFT_FLOAT_CPUS = 401 403 405 440 464 476 ec603e 801 821 823 860 +MULTILIB_MATCHES_FLOAT = $(foreach cpu, $(SOFT_FLOAT_CPUS), msoft-float=mcpu?$(cpu)) # Build the libraries for both hard and soft floating point by default Index: config/rs6000/t-spe =================================================================== --- config/rs6000/t-spe (revision 193510) +++ config/rs6000/t-spe (working copy) @@ -71,3 +71,7 @@ mabi=altivec/mlittle \ maltivec/mlittle \ maltivec/mabi=altivec/mlittle + +ifneq (,$(findstring linux, $(target))) +MULTIARCH_DIRNAME = powerpc-linux-gnuspe$(if $(findstring rs6000/e500-double.h, $(tm_file)),,v1) +endif Index: config.gcc =================================================================== --- config.gcc (revision 193510) +++ config.gcc (working copy) @@ -2057,6 +2060,7 @@ ;; *) tm_file="${tm_file} rs6000/linux.h glibc-stdint.h" + tmake_file="$tmake_file rs6000/t-linux" ;; esac case ${target} in Index: configure.ac =================================================================== --- configure.ac (revision 193510) +++ configure.ac (working copy) @@ -636,6 +636,7 @@ AC_MSG_RESULT($enable_multiarch$ma_msg_suffix) # needed for setting the multiarch name for soft-float/hard-float ABIs +AC_SUBST(with_cpu) AC_SUBST(with_float) # Enable __cxa_atexit for C++. Index: Makefile.in =================================================================== --- Makefile.in (revision 193510) +++ Makefile.in (working copy) @@ -532,6 +532,7 @@ # Multiarch support enable_multiarch = @enable_multiarch@ +with_cpu = @with_cpu@ with_float = @with_float@ ifeq ($(enable_multiarch),yes) if_multiarch = $(1)