2002-09-29 H.J. Lu <hjl@gnu.org>

* config/tc-mips.c (md_apply_fix3): Subtract the symbol value
	twice if howto->pcrel_offset is true.
This commit is contained in:
H.J. Lu 2002-09-30 06:32:00 +00:00
parent b1e61c4bf3
commit 7a49a8c2b4
2 changed files with 19 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2002-09-29 H.J. Lu <hjl@gnu.org>
* config/tc-mips.c (md_apply_fix3): Subtract the symbol value
twice if howto->pcrel_offset is true.
2002-09-28 Matt Thomas <matt@3am-software.com>
Jason Thorpe <thorpej@wasabisystems.com>

View File

@ -10754,11 +10754,23 @@ md_apply_fix3 (fixP, valP, seg)
value -= symval;
howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
if (value != 0 && howto->partial_inplace && ! fixP->fx_pcrel)
if (value != 0 && howto->partial_inplace
&& (! fixP->fx_pcrel || howto->pcrel_offset))
{
/* In this case, the bfd_install_relocation routine will
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.
howto->pcrel_offset is added for R_MIPS_PC16, which is
generated for code like
globl g1 .text
.text
.space 20
g1:
x:
bal g1
*/
value -= symval;
/* Make sure the addend is still non-zero. If it became zero