RISC-V/GAS: Support more relocs against constant addresses
Previously, some pseudoinstructions like "call" only accepted symbolic addresses and rejected constant addresses with an esoteric internal error. This patch enables them by deferring application of constant relocations to md_apply_fix, rather than eagerly applying them during instruction assembly. gas/ChangeLog 2017-01-09 Andrew Waterman <andrew@sifive.com> * config/tc-riscv.c (append_insn): Don't eagerly apply relocations against constants. (md_apply_fix): Mark relocations against constants as "done."
This commit is contained in:
parent
e294484ee7
commit
a5ec5e3fe1
|
@ -4,6 +4,12 @@
|
|||
against constants.
|
||||
(md_apply_fix): Mark relocations against constants as "done."
|
||||
|
||||
2017-01-09 Andrew Waterman <andrew@sifive.com>
|
||||
|
||||
* config/tc-riscv.c (append_insn): Don't eagerly apply relocations
|
||||
against constants.
|
||||
(md_apply_fix): Mark relocations against constants as "done."
|
||||
|
||||
2017-01-09 Palmer Dabbelt <palmer@dabbelt.com>
|
||||
Kito Cheng <kito.cheng@gmail.com>
|
||||
|
||||
|
|
|
@ -688,9 +688,6 @@ append_insn (struct riscv_cl_insn *ip, expressionS *address_expr,
|
|||
address_expr->X_add_number);
|
||||
return;
|
||||
}
|
||||
else if (address_expr->X_op == O_constant)
|
||||
ip->insn_opcode |= riscv_apply_const_reloc (reloc_type,
|
||||
address_expr->X_add_number);
|
||||
else
|
||||
{
|
||||
howto = bfd_reloc_type_lookup (stdoutput, reloc_type);
|
||||
|
@ -1861,6 +1858,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
|||
case BFD_RELOC_RISCV_LO12_S:
|
||||
bfd_putl32 (riscv_apply_const_reloc (fixP->fx_r_type, *valP)
|
||||
| bfd_getl32 (buf), buf);
|
||||
if (fixP->fx_addsy == NULL)
|
||||
fixP->fx_done = TRUE;
|
||||
relaxable = TRUE;
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue