* config/tc-mn10300.c (mn10300_force_relocation): Don't
authorAlexandre Oliva <aoliva@redhat.com>
Wed, 16 May 2001 01:48:51 +0000 (01:48 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Wed, 16 May 2001 01:48:51 +0000 (01:48 +0000)
optimize differences between symbols in code sections to
constants.
(mn10300_fix_adjustable): Don't adjust to section+offset
relocations pointing at symbols in code sections.

gas/ChangeLog
gas/config/tc-mn10300.c

index bb2f95db1cb3e9fcb050b1279b170e50d1bb8e56..9b8c932186b4aa84e5405f3930ec2e4c47ddd657 100644 (file)
@@ -1,3 +1,11 @@
+2001-05-15  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/tc-mn10300.c (mn10300_force_relocation): Don't
+       optimize differences between symbols in code sections to
+       constants.
+       (mn10300_fix_adjustable): Don't adjust to section+offset
+       relocations pointing at symbols in code sections.
+
 2001-05-16  Alan Modra  <amodra@one.net.au>
 
        * config/tc-arc.c (md_assemble): Correct dwarf2_emit_insn param
index ab6781a5405d1356b3830340f5313a81c8ae7a18..9f3ee5f911ce0ce32547242cd43414497f0beb42 100644 (file)
@@ -1993,6 +1993,15 @@ mn10300_force_relocation (fixp)
       || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
     return 1;
 
+  /* Do not adjust relocations involving symbols in code sections,
+     because it breaks linker relaxations.  This could be fixed in the
+     linker, but this fix is simpler, and it pretty much only affects
+     object size a little bit.  */
+  if ((S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_CODE)
+      && fixp->fx_subsy
+      && S_GET_SEGMENT (fixp->fx_addsy) == S_GET_SEGMENT (fixp->fx_subsy))
+    return 1;
+
   return 0;
 }
 
@@ -2011,6 +2020,13 @@ mn10300_fix_adjustable (fixp)
       || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
     return 0;
 
+  /* Do not adjust relocations involving symbols in code sections,
+     because it breaks linker relaxations.  This could be fixed in the
+     linker, but this fix is simpler, and it pretty much only affects
+     object size a little bit.  */
+  if (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_CODE)
+    return 0;
+
   return 1;
 }