* config/tc-mips.c (mips_need_elf_addend_fixup): Remove
authorDaniel Jacobowitz <drow@false.org>
Tue, 6 May 2003 00:16:12 +0000 (00:16 +0000)
committerDaniel Jacobowitz <drow@false.org>
Tue, 6 May 2003 00:16:12 +0000 (00:16 +0000)
symbol_used_in_reloc_p check.
(md_apply_fix3): Remove check for howto->pcrel_offset.

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

index 64852b0ff6961b17e8c232fc1c81512ea61fdbd8..0b23d58c3c1e7926451a11313d7abf63658bed44 100644 (file)
@@ -1,3 +1,9 @@
+2003-05-05  Daniel Jacobowitz  <drow@mvista.com>
+
+       * config/tc-mips.c (mips_need_elf_addend_fixup): Remove
+       symbol_used_in_reloc_p check.
+       (md_apply_fix3): Remove check for howto->pcrel_offset.
+
 2003-05-03  H.J. Lu <hjl@gnu.org>
 
        * config/obj-elf.c (obj_elf_parse_section_letters): Make it a
index 26c54cf969d4bbc584ad72dda94497ae17ece2e3..59f0b3d4043916750d374af07d9948b3d41ef93d 100644 (file)
@@ -11592,13 +11592,12 @@ mips_need_elf_addend_fixup (fixP)
          || S_IS_EXTERNAL (fixP->fx_addsy))
       && !S_IS_COMMON (fixP->fx_addsy))
     return 1;
-  if (symbol_used_in_reloc_p (fixP->fx_addsy)
-      && (((bfd_get_section_flags (stdoutput,
-                                  S_GET_SEGMENT (fixP->fx_addsy))
-           & (SEC_LINK_ONCE | SEC_MERGE)) != 0)
-         || !strncmp (segment_name (S_GET_SEGMENT (fixP->fx_addsy)),
-                      ".gnu.linkonce",
-                      sizeof (".gnu.linkonce") - 1)))
+  if (((bfd_get_section_flags (stdoutput,
+                              S_GET_SEGMENT (fixP->fx_addsy))
+       & (SEC_LINK_ONCE | SEC_MERGE)) != 0)
+      || !strncmp (segment_name (S_GET_SEGMENT (fixP->fx_addsy)),
+                  ".gnu.linkonce",
+                  sizeof (".gnu.linkonce") - 1))
     return 1;
   return 0;
 }
@@ -11658,15 +11657,25 @@ md_apply_fix3 (fixP, valP, seg)
          value -= symval;
 
          howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
-         if (value != 0 && howto && howto->partial_inplace
-             && (! fixP->fx_pcrel || howto->pcrel_offset))
+         if (value != 0 && howto && howto->partial_inplace)
            {
              /* In this case, the bfd_install_relocation routine will
                 incorrectly add the symbol value back in.  We just want
                 the addend to appear in the object file.
 
-                howto->pcrel_offset is added for R_MIPS_PC16, which is
-                generated for code like
+                The condition above used to include
+                "&& (! fixP->fx_pcrel || howto->pcrel_offset)".
+
+                However, howto can't be trusted here, because we
+                might change the reloc type in tc_gen_reloc.  We can
+                check howto->partial_inplace because that conversion
+                happens to preserve howto->partial_inplace; but it
+                does not preserve howto->pcrel_offset.  I've just
+                eliminated the check, because all MIPS PC-relative
+                relocations are marked howto->pcrel_offset.
+
+                howto->pcrel_offset was originally added for
+                R_MIPS_PC16, which is generated for code like
 
                        globl g1 .text
                        .text