aboutsummaryrefslogtreecommitdiff
path: root/gas/write.c
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2013-05-29 16:22:14 +0000
committerMaciej W. Rozycki <macro@linux-mips.org>2013-05-29 16:22:14 +0000
commitd6101ac20076846ff5092444691d502fd689c886 (patch)
treebc8ed8a04d7189c55c1d9b6b3966300002064ba8 /gas/write.c
parent95e34fb4f43f5cc57c48d4799c5c59d7dcf6c2a2 (diff)
downloadgdb-d6101ac20076846ff5092444691d502fd689c886.zip
gdb-d6101ac20076846ff5092444691d502fd689c886.tar.gz
gdb-d6101ac20076846ff5092444691d502fd689c886.tar.bz2
gas/
* write.c (resolve_reloc_expr_symbols): On REL targets don't convert relocs who have no relocatable field either. Rephrase the conditional so that the PC-relative check is only applied for REL targets. gas/testsuite/ * gas/mips/jalr3.d: New test. * gas/mips/jalr3-n32.d: New test. * gas/mips/jalr3-n64.d: New test. * gas/mips/jalr3.s: New test source. * gas/mips/mips.exp: Run the new tests. ld/testsuite/ * ld-mips-elf/jalr3.dd: New test. * ld-mips-elf/jalr3.ld: New test linker script. * ld-mips-elf/mips-elf.exp: Run the new test.
Diffstat (limited to 'gas/write.c')
-rw-r--r--gas/write.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gas/write.c b/gas/write.c
index 22e68c5..745abe6 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -722,9 +722,10 @@ resolve_reloc_expr_symbols (void)
unless it has enough bits to cover the whole address
space. */
if (S_IS_LOCAL (sym) && !symbol_section_p (sym)
- && !(howto->partial_inplace
- && howto->pc_relative
- && howto->src_mask != addr_mask))
+ && (sec->use_rela_p
+ || (howto->partial_inplace
+ && (!howto->pc_relative
+ || howto->src_mask == addr_mask))))
{
asection *symsec = S_GET_SEGMENT (sym);
if (!(((symsec->flags & SEC_MERGE) != 0