diff --git a/gas/ChangeLog b/gas/ChangeLog index 4de9cf7eff4..0fab5fba774 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -4,6 +4,12 @@ against constants. (md_apply_fix): Mark relocations against constants as "done." +2017-01-09 Andrew Waterman + + * 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 Kito Cheng diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c index 3f09101108e..6bbaa4b1010 100644 --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -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;