* config/tc-mips.c (md_apply_fix): Prevent addend from becoming zero
	if it's expected to be non-zero.
[gas/testsuite]
	* gas/mips/elf-rel3.s: Add zero word to end of file.
This commit is contained in:
Richard Sandiford 2001-07-04 09:49:29 +00:00
parent 5e7079af51
commit 7461da6e23
4 changed files with 47 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2001-07-04 Richard Sandiford <rsandifo@redhat.com>
* config/tc-mips.c (md_apply_fix): Prevent addend from becoming zero
if it's expected to be non-zero.
2001-07-03 Nick Clifton <nickc@cambridge.redhat.com> 2001-07-03 Nick Clifton <nickc@cambridge.redhat.com>
* config/tc-sh.c (sh_frob_section): Replace symbol_get_frag() with * config/tc-sh.c (sh_frob_section): Replace symbol_get_frag() with

View File

@ -9612,9 +9612,44 @@ md_apply_fix (fixP, valueP)
{ {
/* In this case, the bfd_install_relocation routine will /* In this case, the bfd_install_relocation routine will
incorrectly add the symbol value back in. We just want incorrectly add the symbol value back in. We just want
the addend to appear in the object file. the addend to appear in the object file. */
FIXME: If this makes VALUE zero, we're toast. */
value -= symval; value -= symval;
/* Make sure the addend is still non-zero. If it became zero
after the last operation, set it to a spurious value and
subtract the same value from the object file's contents. */
if (value == 0)
{
value = 8;
/* The in-place addends for LO16 relocations are signed;
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,
target_big_endian);
/* MASK has bits set where the relocation should go.
FIELD is -value, shifted into the appropriate place
for this relocation. */
mask = 1 << (howto->bitsize - 1);
mask = (((mask - 1) << 1) | 1) << howto->bitpos;
field = (-value >> howto->rightshift) << howto->bitpos;
bfd_put_bits ((field & mask) | (contents & ~mask),
fixP->fx_frag->fr_literal + fixP->fx_where,
fixP->fx_size * 8,
target_big_endian);
}
}
} }
} }

View File

@ -1,3 +1,7 @@
2001-07-04 Richard Sandiford <rsandifo@redhat.com>
* gas/mips/elf-rel3.s: Add zero word to end of file.
2001-07-03 H.J. Lu <hjl@gnu.org> 2001-07-03 H.J. Lu <hjl@gnu.org>
* gas/mips/lb-xgot-ilocks.d: Add -march=r3900. * gas/mips/lb-xgot-ilocks.d: Add -march=r3900.

View File

@ -9,3 +9,4 @@ x:
b: b:
.word b+4 .word b+4
.word x .word x
.word 0