* config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's
authorMaciej W. Rozycki <macro@linux-mips.org>
Thu, 13 Jun 2002 10:10:51 +0000 (10:10 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Thu, 13 Jun 2002 10:10:51 +0000 (10:10 +0000)
value twice for RELA relocations.

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

index a97948e..f2a39b1 100644 (file)
@@ -1,3 +1,8 @@
+2002-06-13  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+
+       * config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's
+       value twice for RELA relocations.
+
 2002-06-12  Ben Elliston  <bje@redhat.com>
 
        * symbols.c (resolve_symbol_value): Initialise final_val.
index 7a973c1..acd9cde 100644 (file)
@@ -10892,10 +10892,13 @@ md_apply_fix3 (fixP, valP, seg)
     {
       if (mips_need_elf_addend_fixup (fixP))
        {
+         reloc_howto_type *howto;
          valueT symval = S_GET_VALUE (fixP->fx_addsy);
 
          value -= symval;
-         if (value != 0 && ! fixP->fx_pcrel)
+
+         howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
+         if (value != 0 && howto->partial_inplace && ! fixP->fx_pcrel)
            {
              /* In this case, the bfd_install_relocation routine will
                 incorrectly add the symbol value back in.  We just want
@@ -10913,12 +10916,8 @@ md_apply_fix3 (fixP, valP, seg)
                     leave the matching HI16 in-place addends as zero.  */
                  if (fixP->fx_r_type != BFD_RELOC_HI16_S)
                    {
-                     reloc_howto_type *howto;
                      bfd_vma contents, mask, field;
 
-                     howto = bfd_reloc_type_lookup (stdoutput,
-                                                    fixP->fx_r_type);
-
                      contents = bfd_get_bits (fixP->fx_frag->fr_literal
                                               + fixP->fx_where,
                                               fixP->fx_size * 8,