RISC-V: Fix riscv g++ testsuite EH failures.
authorJim Wilson <jimw@sifive.com>
Tue, 7 Nov 2017 00:32:08 +0000 (16:32 -0800)
committerPalmer Dabbelt <palmer@sifive.com>
Tue, 7 Nov 2017 17:13:52 +0000 (09:13 -0800)
commitf77bb6c56b4091ed863d8cd03333a79a8d554ce1
treea59c7bf45fb2474e0259e72928345bf9122904d5
parent1270b047fdc68d89f05668ed919d17f5fceeba2a
RISC-V: Fix riscv g++ testsuite EH failures.

This fixes some EH failures for the medany code model in the g++ testsuite.
The problem is that the assembler is computing some values in the eh_frame
section as constants, that instead should have had relocs to be resolved by
the linker.  This happens in output_cfi_insn in the DW_CFA_advance_loc case
where it compares label frags and immediately simplifies if they are the
same.  We can fix that by forcing a new frag after every instruction
that the linker can reduce in size.  I've also added a testcase to verify
the fix.  This was tested with binutils make check, and gcc/g++ make checks on
qemu for medlow and medany code models.

gas/
* config/tc-riscv.c (append_insn): Call frag_wane and frag_new at
end for linker optimizable relocs.
* testsuite/gas/riscv/eh-relocs.d: New.
* testsuite/gas/riscv/eh-relocs.s: New.
* testsuite/gas/riscv/riscv.exp: Run eh-relocs test.
gas/ChangeLog
gas/config/tc-riscv.c
gas/testsuite/gas/riscv/eh-relocs.d [new file with mode: 0644]
gas/testsuite/gas/riscv/eh-relocs.s [new file with mode: 0644]
gas/testsuite/gas/riscv/riscv.exp