* config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's

value twice for RELA relocations.
This commit is contained in:
Maciej W. Rozycki 2002-06-13 10:10:51 +00:00
parent c4bb8067a5
commit d6e9d61afd
2 changed files with 9 additions and 5 deletions

View 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.

View 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,