From d6e9d61afd4cad78a2aff2a5dc6ad3aefa1c8341 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Thu, 13 Jun 2002 10:10:51 +0000 Subject: [PATCH] * config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's value twice for RELA relocations. --- gas/ChangeLog | 5 +++++ gas/config/tc-mips.c | 9 ++++----- 2 files changed, 9 insertions(+), 5 deletions(-) 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, -- 2.30.2