From: Maciej W. Rozycki Date: Thu, 13 Jun 2002 10:10:51 +0000 (+0000) Subject: * config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d6e9d61afd4cad78a2aff2a5dc6ad3aefa1c8341;p=binutils-gdb.git * config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's value twice for RELA relocations. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index a97948e7ffe..f2a39b1c2f3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2002-06-13 Maciej W. Rozycki + + * config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's + value twice for RELA relocations. + 2002-06-12 Ben Elliston * symbols.c (resolve_symbol_value): Initialise final_val. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 7a973c181cb..acd9cde2549 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -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,