The R6 patch introduced MIPS_ISA_LEVEL_SPEC into DRIVER_SELF_SPECS
for all configurations. One part of MIPS_ISA_LEVEL_SPEC is however
incompatible with those configurations which infer an ISA from an
ABI without specifically setting the default ISAs using
--with-arch-[32|64].

I.e. a generic mips-linux (--enable-targets=all) and
mips64-linux would fail to build the n32/n64 multilibs as -mips1
would be introduced by DRIVER_SELF_SPECS.

I have therefore split MIPS_ISA_LEVEL_SPEC into two. One part is
suitable for all confgurations and one part is only suitable for
configurations that infer an ABI from an ISA (these tend to be
cross-compiler vendor configurations)

I have built and checked the driver generated options for all
relevant configurations and everything appears to work.

Let me know if you can see any problems with this?

Thanks,
Matthew

gcc/

     * config/mips/mips.h (MIPS_ISA_LEVEL_SPEC): Only infer an ISA
     level from an ARCH; do not inject the default.
     (MIPS_DEFAULT_ISA_LEVEL_SPEC): New macro split out from
     MIPS_ISA_LEVEL_SPEC.
     (MIPS_ISA_NAN2008_SPEC): Update comment.
     (BASE_DRIVER_SELF_SPECS): Likewise.
     * config/mips/elfoabi.h (DRIVER_SELF_SPECS): Add
     MIPS_DEFAULT_ISA_LEVEL_SPEC.
     * config/mips/mti-elf.h (DRIVER_SELF_SPECS): Likewise.
     * config/mips/mti-linux.h (DRIVER_SELF_SPECS): Likewise.
     * config/mips/sde.h (DRIVER_SELF_SPECS): Likewise.
---
gcc/config/mips/elfoabi.h   |  3 +++
gcc/config/mips/mips.h      | 16 ++++++++++++----
gcc/config/mips/mti-elf.h   |  3 +++
gcc/config/mips/mti-linux.h |  3 +++
gcc/config/mips/sde.h       |  3 +++
5 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/gcc/config/mips/elfoabi.h b/gcc/config/mips/elfoabi.h
index d88a79c..1e775c0 100644
--- a/gcc/config/mips/elfoabi.h
+++ b/gcc/config/mips/elfoabi.h
@@ -20,6 +20,9 @@ along with GCC; see the file COPYING3.  If not see

 #undef DRIVER_SELF_SPECS
#define DRIVER_SELF_SPECS                           \
+  /* Set the ISA for the default multilib.  */                 \
+  MIPS_DEFAULT_ISA_LEVEL_SPEC,                            \
+                                               \
   /* Make sure a -mips option is present.  This helps us to pick    \
      the right multilib, and also makes the later specs easier      \
      to write.  */                                  \
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 4da256d..9dad480 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -704,8 +704,7 @@ struct mips_cpu_info {
#define MIPS_ARCH_OPTION_SPEC \
   MIPS_ISA_LEVEL_OPTION_SPEC "|march=*"

-/* A spec that infers a -mips argument from an -march argument,
-   or injects the default if no architecture is specified.  */
+/* A spec that infers a -mips argument from an -march argument.  */

 #define MIPS_ISA_LEVEL_SPEC \
   "%{" MIPS_ISA_LEVEL_OPTION_SPEC ":;: \
@@ -725,7 +724,13 @@ struct mips_cpu_info {
      %{march=mips64r2|march=loongson3a|march=octeon|march=xlp: -mips64r2} \
      %{march=mips64r3: -mips64r3} \
      %{march=mips64r5: -mips64r5} \
-     %{march=mips64r6: -mips64r6} \
+     %{march=mips64r6: -mips64r6}}"
+
+/* A spec that injects the default multilib ISA if no architecture is
+   specified.  */
+
+#define MIPS_DEFAULT_ISA_LEVEL_SPEC \
+  "%{" MIPS_ISA_LEVEL_OPTION_SPEC ":;: \
      %{!march=*: -" MULTILIB_ISA_DEFAULT "}}"

 /* A spec that infers a -mhard-float or -msoft-float setting from an
@@ -757,6 +762,7 @@ struct mips_cpu_info {
   "%{msynci|mno-synci:;:%{mips32r2|mips32r3|mips32r5|mips32r6|mips64r2 \
                 |mips64r3|mips64r5|mips64r6:-msynci;:-mno-synci}}"

+/* Infer a -mnan=2008 setting from a -mips argument.  */
#define MIPS_ISA_NAN2008_SPEC \
   "%{mnan*:;mips32r6|mips64r6:-mnan=2008}"

@@ -806,7 +812,9 @@ struct mips_cpu_info {
   {"mips-plt", "%{!mplt:%{!mno-plt:-m%(VALUE)}}" }, \
   {"synci", "%{!msynci:%{!mno-synci:-m%(VALUE)}}" }

-/* A spec that infers the -mdsp setting from an -march argument.  */
+/* A spec that infers the:
+   -mnan=2008 setting from a -mips argument,
+   -mdsp setting from a -march argument.  */
#define BASE_DRIVER_SELF_SPECS \
   MIPS_ISA_NAN2008_SPEC,       \
   "%{!mno-dsp: \
diff --git a/gcc/config/mips/mti-elf.h b/gcc/config/mips/mti-elf.h
index d6dc1bb..45cffd5 100644
--- a/gcc/config/mips/mti-elf.h
+++ b/gcc/config/mips/mti-elf.h
@@ -19,6 +19,9 @@ along with GCC; see the file COPYING3.  If not see

 #undef DRIVER_SELF_SPECS
#define DRIVER_SELF_SPECS                           \
+  /* Set the ISA for the default multilib.  */                 \
+  MIPS_DEFAULT_ISA_LEVEL_SPEC,                            \
+                                               \
   /* Make sure a -mips option is present.  This helps us to pick    \
      the right multilib, and also makes the later specs easier      \
      to write.  */                                  \
diff --git a/gcc/config/mips/mti-linux.h b/gcc/config/mips/mti-linux.h
index 5761ab7..9ea9ce5 100644
--- a/gcc/config/mips/mti-linux.h
+++ b/gcc/config/mips/mti-linux.h
@@ -31,6 +31,9 @@ along with GCC; see the file COPYING3.  If not see

 #undef DRIVER_SELF_SPECS
#define DRIVER_SELF_SPECS                           \
+  /* Set the ISA for the default multilib.  */                 \
+  MIPS_DEFAULT_ISA_LEVEL_SPEC,                            \
+                                               \
   /* Make sure a -mips option is present.  This helps us to pick    \
      the right multilib, and also makes the later specs easier      \
      to write.  */                                  \
diff --git a/gcc/config/mips/sde.h b/gcc/config/mips/sde.h
index c138949..e6b36cf 100644
--- a/gcc/config/mips/sde.h
+++ b/gcc/config/mips/sde.h
@@ -20,6 +20,9 @@ along with GCC; see the file COPYING3.  If not see

 #undef DRIVER_SELF_SPECS
#define DRIVER_SELF_SPECS                           \
+  /* Set the ISA for the default multilib.  */                 \
+  MIPS_DEFAULT_ISA_LEVEL_SPEC,                            \
+                                               \
   /* Make sure a -mips option is present.  This helps us to pick    \
      the right multilib, and also makes the later specs easier      \
      to write.  */                                  \
-- 
1.9.4



Reply via email to