aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/mips/mips.h17
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0475bee..af67fe4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-02-10 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.h (TARGET_GPWORD): Return false for TARGET_NEWABI
+ && TARGET_IRIX.
+
2004-02-09 Ziemowit Laski <zlaski@apple.com>
* objc/objc-act.c (get_super_receiver): Move '#ifdef OBJCPLUS'
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index f53d04c..90e8954 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -290,9 +290,22 @@ extern const struct mips_cpu_info *mips_tune_info;
(!TARGET_MIPS16 && (!TARGET_ABICALLS || TARGET_EXPLICIT_RELOCS))
/* True if .gpword or .gpdword should be used for switch tables.
- Not all SGI assemblers support this. */
+ There are some problems with using these directives with the
+ native IRIX tools:
-#define TARGET_GPWORD (TARGET_ABICALLS && (!TARGET_NEWABI || TARGET_GAS))
+ - It has been reported that some versions of the native n32
+ assembler mishandle .gpword, complaining that symbols are
+ global when they are in fact local.
+
+ - The native assemblers don't understand .gpdword.
+
+ - Although GAS does understand .gpdword, the native linker
+ mishandles the relocations GAS generates (R_MIPS_GPREL32
+ followed by R_MIPS_64).
+
+ We therefore disable GP-relative switch tables for n32 and n64
+ on IRIX targets. */
+#define TARGET_GPWORD (TARGET_ABICALLS && !(TARGET_NEWABI && TARGET_IRIX))
/* Generate mips16 code */
#define TARGET_MIPS16 (target_flags & MASK_MIPS16)