From 7a49a8c2b494a6e398ab861ba31564d0bd854f68 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 30 Sep 2002 06:32:00 +0000 Subject: [PATCH] 2002-09-29 H.J. Lu * config/tc-mips.c (md_apply_fix3): Subtract the symbol value twice if howto->pcrel_offset is true. --- gas/ChangeLog | 5 +++++ gas/config/tc-mips.c | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index cf754ab3a6f..13ed1e8545a 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2002-09-29 H.J. Lu + + * config/tc-mips.c (md_apply_fix3): Subtract the symbol value + twice if howto->pcrel_offset is true. + 2002-09-28 Matt Thomas Jason Thorpe diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 6d0c13f3d26..7c8be079a60 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -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 -- 2.30.2