aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/mips/t-vr35
-rw-r--r--gcc/config/mips/vr.h7
3 files changed, 18 insertions, 32 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4268d24..c19a7b0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2002-10-14 Richard Sandiford <rsandifo@redhat.com>
+ * config/mips/vr.h (DRIVER_SELF_SPECS): Define.
+ * config/mips/t-vr (MULTILIB_OPTIONS): Remove mlong32.
+ (MULTILIB_DIRNAMES): Remove long32.
+ (MULTILIB_EXCEPTIONS): Don't build -mabi=32 -mgp32 multilibs.
+ (MULTILIB_REDUNDANT_DIRS): Remove.
+
+2002-10-14 Richard Sandiford <rsandifo@redhat.com>
+
* doc/tm.texi (DRIVER_SELF_SPECS): Document.
* gcc.c (driver_self_specs): New variable.
(do_self_spec): New function.
diff --git a/gcc/config/mips/t-vr b/gcc/config/mips/t-vr
index 7af78ab..68daad8 100644
--- a/gcc/config/mips/t-vr
+++ b/gcc/config/mips/t-vr
@@ -39,7 +39,7 @@ MULTILIB_OPTIONS = \
EL/EB \
mabi=32/mabi=o64/mabi=eabi \
mgp32 \
- mlong32/mlong64 \
+ mlong64 \
mips16 \
march=vr5400/march=vr4100
@@ -47,7 +47,7 @@ MULTILIB_DIRNAMES = \
el eb \
o32 o64 eabi \
gp32 \
- long32 long64 \
+ long64 \
mips16 \
vr5400 vr4100
@@ -59,38 +59,9 @@ MULTILIB_MATCHES = EL=mel EB=meb
# without a -mabi flag.
MULTILIB_EXCEPTIONS = \
*mabi=32/mlong64* \
- *mabi=32/mgp32/mlong64* \
+ *mabi=32/mgp32* \
*mabi=o64/mgp32* \
*mabi=o64/mlong64* \
mgp32* E[LB]/mgp32* \
mlong64* E[LB]/mlong64* \
*mips16/march=vr5*
-
-# The real value of this macro is very long, so generate it using a
-# shell fragment. The idea is to tell the GCC driver how -mabi,
-# -mgp32, -mlong32 and -mlong64 interact, so that it choses the right
-# library when some options are specified redundantly (for example,
-# -mabi=32 -mgp32).
-
-# The core equalities are listed after "for changes in ". The first
-# entry assumes o64 is the default ABI.
-MULTILIB_REDUNDANT_DIRS=` \
- for endian in '' 'el' 'eb'; do \
- for arch in '' 'vr5400' 'vr4100' \
- 'mips16' 'mips16/vr100'; do \
- for changes in long32= \
- o32/gp32=o32 \
- o32/gp32/long32=o32 \
- o32/long32=o32 \
- o64/long32=o64 \
- eabi/gp32/long32=eabi/gp32 \
- eabi/long64=eabi; do \
- from=\`echo \$${changes} | sed 's/=.*//'\`; \
- to=\`echo \$${changes} | sed 's/.*=//'\`; \
- echo \$$endian \$$from \$$arch=\$$endian \$$to \$$arch \
- | sed -e 's: *= *:=:' \
- -e 's: *:/:g' \
- -e 's:=$$:=.:'; \
- done; \
- done; \
- done`
diff --git a/gcc/config/mips/vr.h b/gcc/config/mips/vr.h
index 4bdc245..1352599 100644
--- a/gcc/config/mips/vr.h
+++ b/gcc/config/mips/vr.h
@@ -22,3 +22,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define MIPS_CPU_STRING_DEFAULT "vr4100"
#define MULTILIB_DEFAULTS \
{ MULTILIB_ENDIAN_DEFAULT, MULTILIB_ABI_DEFAULT, "march=vr4100" }
+
+/* Make sure that -mlong64 always appears on the command line when
+ 64-bit longs are needed. Also make sure that -mgp32 doesn't appear
+ if it is redundant. */
+#define DRIVER_SELF_SPECS \
+ "%{mabi=eabi:%{!mlong*:%{!mgp32:-mlong64}}}", \
+ "%{mabi=32:%<mgp32}"