This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] [powerpc] add multiarch definitions for powerpc-linux-gnu
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 <doko@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)