This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
3.3.1 PATCH: Fix mips-sgi-irix6o32 bootstrap failure
- From: Rainer Orth <ro at TechFak dot Uni-Bielefeld dot DE>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Eric Christopher <echristo at redhat dot com>
- Date: Wed, 28 May 2003 14:48:25 +0200 (MEST)
- Subject: 3.3.1 PATCH: Fix mips-sgi-irix6o32 bootstrap failure
This patch fixes a bootstrap failure of the mips-sgi-irix6o32 configuration
when using the native IRIX 6 assembler.
There are two problems:
* The SUBTARGET_ASM_DEBUGGING_SPEC currently hardcodes passing the -mdebug
and -no-mdebug flags to as, but these flags are gas-only and not
recognized by as. This is a regression from 3.2.
* Even with this fixed, I still run into the issue described in this
thread
http://gcc.gnu.org/ml/gcc-patches/2002-07/msg01066.html
(and in a recent message to gcc-patches which for some reason hasn't hit
the archive yet).
This patch fixes both problems:
* The -mdebug/-no-mdebug switches are moved to a new mdebug_asm_spec, which
is only used with gas. This requires at least gas 2.13, but I've omitted
the autoconf check for the flag support since no one seems to have
complained about this implicit requirement. I can resurrect the test if
desired from an old patch:
http://gcc.gnu.org/ml/gcc-patches/2002-07/msg01070.html
Unfortunately mdebug_asm_spec is not fully correct: on platforms with
DWARF 2 as PREFERRED_DEBUGGING_TYPE, -mdebug needs to be passed only with
explicit -gstabs*, with stabs-in-mdebug, the current setting is correct.
Since checking for PREFERRED_DEBUGGING_TYPE requires runtime
initialization of specs (e.g. as in the old patch above, using an
approach rth didn't like), I've left this as is. Targets affected by
this problem will have to override MDEBUG_ASM_SPEC.
* The ICE still requires the old patch
http://gcc.gnu.org/ml/gcc-patches/2002-07/msg01086.html
With those two fixes applied, the 3.3 branch finishes bootstrapping the
compiler proper (both with native as and gas), but still ICEs later when
compiling libf2c/libI77/uio.c. I'll submit a PR for this shortly.
The first part of the patch applies to mainline as well (bootstrap still in
progress), the second part doesn't apply and has most likely been obsoleted
by the mips rewrite work.
Ok for 3.3 branch and mainline?
Rainer
-----------------------------------------------------------------------------
Rainer Orth, Faculty of Technology, Bielefeld University
Tue May 27 21:33:11 2003 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* config/mips/mips.h (SUBTARGET_ASM_DEBUGGING_SPEC): Move
-mdebug/-no-mdebug switches ...
(MDEBUG_ASM_SPEC): ... here.
Use only with gas.
(EXTRA_SPECS): Initialize mdebug_asm_spec.
(CONSTANT_ADDRESS_P): Allow native IRIX 6 O32 assembler.
Index: gcc/config/mips/mips.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.h,v
retrieving revision 1.227.4.5
diff -u -p -r1.227.4.5 mips.h
--- gcc/config/mips/mips.h 28 Feb 2003 10:41:20 -0000 1.227.4.5
+++ gcc/config/mips/mips.h 28 May 2003 12:08:54 -0000
@@ -1048,9 +1048,18 @@ extern int mips_abi;
%{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \
%{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \
%{gcoff:-g} %{gcoff0:-g0} %{gcoff1:-g1} %{gcoff2:-g2} %{gcoff3:-g3} \
-%{!gdwarf*:-mdebug} %{gdwarf*:-no-mdebug}"
+%(mdebug_asm_spec)"
#endif
+/* Beginning with gas 2.13, -mdebug must be passed to correctly handle COFF
+ and stabs debugging info. */
+#if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GAS) != 0
+/* GAS */
+#define MDEBUG_ASM_SPEC "%{!gdwarf*:-mdebug} %{gdwarf*:-no-mdebug}"
+#else /* not GAS */
+#define MDEBUG_ASM_SPEC ""
+#endif /* not GAS */
+
/* SUBTARGET_ASM_SPEC is always passed to the assembler. It may be
overridden by subtargets. */
@@ -1178,6 +1187,7 @@ extern int mips_abi;
{ "subtarget_mips_as_asm_spec", SUBTARGET_MIPS_AS_ASM_SPEC }, \
{ "subtarget_asm_optimizing_spec", SUBTARGET_ASM_OPTIMIZING_SPEC }, \
{ "subtarget_asm_debugging_spec", SUBTARGET_ASM_DEBUGGING_SPEC }, \
+ { "mdebug_asm_spec", MDEBUG_ASM_SPEC }, \
{ "subtarget_asm_spec", SUBTARGET_ASM_SPEC }, \
{ "asm_abi_default_spec", ASM_ABI_DEFAULT_SPEC }, \
{ "endian_spec", ENDIAN_SPEC }, \
@@ -3094,17 +3104,16 @@ typedef struct mips_args {
assembler would use $at as a temp to load in the large offset. In this
case $at is already in use. We convert such problem addresses to
`la $5,s;sw $4,70000($5)' via LEGITIMIZE_ADDRESS. */
-/* ??? SGI Irix 6 assembler fails for CONST address, so reject them
- when !TARGET_GAS. */
+/* ??? SGI IRIX 6 assembler fails for CONST address, so reject them
+ when !TARGET_GAS. At least the IRIX 6 O32 assembler has no problem,
+ though. */
/* We should be rejecting everything but const addresses. */
#define CONSTANT_ADDRESS_P(X) \
(GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
|| GET_CODE (X) == CONST_INT || GET_CODE (X) == HIGH \
|| (GET_CODE (X) == CONST \
&& ! (flag_pic && pic_address_needs_scratch (X)) \
- && (TARGET_GAS) \
- && (mips_abi != ABI_N32 \
- && mips_abi != ABI_64)))
+ && (TARGET_GAS || mips_abi == ABI_32)))
/* Define this, so that when PIC, reload won't try to reload invalid