RISC-V: Give error for ignored pcrel_lo addend.
bfd/ * elfnn-riscv.c (riscv_elf_relocate_section): Use bfd_reloc_dangerous when pcrel_lo reloc has an addend. Use reloc_dangerous callback for bfd_reloc_dangerous. Use einfo instead of warning callback for errors. Add %X%P to error messages. ld/ * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Run pcrel-lo-addend test. * testsuite/ld-riscv-elf/pcrel-lo-addend.d: New. * testsuite/ld-riscv-elf/pcrel-lo-addend.s: New.
This commit is contained in:
parent
49ded53def
commit
2a0d985349
@ -1,3 +1,10 @@
|
||||
2018-02-15 Jim Wilson <jimw@sifive.com>
|
||||
|
||||
* elfnn-riscv.c (riscv_elf_relocate_section): Use bfd_reloc_dangerous
|
||||
when pcrel_lo reloc has an addend. Use reloc_dangerous callback for
|
||||
bfd_reloc_dangerous. Use einfo instead of warning callback for errors.
|
||||
Add %X%P to error messages.
|
||||
|
||||
2018-02-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR ld/22832
|
||||
|
@ -1993,6 +1993,16 @@ riscv_elf_relocate_section (bfd *output_bfd,
|
||||
|
||||
case R_RISCV_PCREL_LO12_I:
|
||||
case R_RISCV_PCREL_LO12_S:
|
||||
/* Addends are not allowed, because then riscv_relax_delete_bytes
|
||||
would have to search through all relocs to update the addends.
|
||||
Also, riscv_resolve_pcrel_lo_relocs does not support addends
|
||||
when searching for a matching hi reloc. */
|
||||
if (rel->r_addend)
|
||||
{
|
||||
r = bfd_reloc_dangerous;
|
||||
break;
|
||||
}
|
||||
|
||||
if (riscv_record_pcrel_lo_reloc (&pcrel_relocs, input_section, info,
|
||||
howto, rel, relocation, name,
|
||||
contents))
|
||||
@ -2234,25 +2244,27 @@ riscv_elf_relocate_section (bfd *output_bfd,
|
||||
break;
|
||||
|
||||
case bfd_reloc_outofrange:
|
||||
msg = _("internal error: out of range error");
|
||||
msg = _("%X%P: internal error: out of range error\n");
|
||||
break;
|
||||
|
||||
case bfd_reloc_notsupported:
|
||||
msg = _("internal error: unsupported relocation error");
|
||||
msg = _("%X%P: internal error: unsupported relocation error\n");
|
||||
break;
|
||||
|
||||
case bfd_reloc_dangerous:
|
||||
msg = _("internal error: dangerous relocation");
|
||||
info->callbacks->reloc_dangerous
|
||||
(info, "%pcrel_lo with addend", input_bfd, input_section,
|
||||
rel->r_offset);
|
||||
break;
|
||||
|
||||
default:
|
||||
msg = _("internal error: unknown error");
|
||||
msg = _("%X%P: internal error: unknown error\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (msg)
|
||||
info->callbacks->warning
|
||||
(info, msg, name, input_bfd, input_section, rel->r_offset);
|
||||
info->callbacks->einfo (msg);
|
||||
|
||||
/* We already reported the error via a callback, so don't try to report
|
||||
it again by returning false. That leads to spurious errors. */
|
||||
ret = TRUE;
|
||||
|
@ -1,3 +1,9 @@
|
||||
2018-02-15 Jim Wilson <jimw@sifive.com>
|
||||
|
||||
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Run pcrel-lo-addend test.
|
||||
* testsuite/ld-riscv-elf/pcrel-lo-addend.d: New.
|
||||
* testsuite/ld-riscv-elf/pcrel-lo-addend.s: New.
|
||||
|
||||
2018-02-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22842
|
||||
|
@ -22,6 +22,7 @@
|
||||
if [istarget "riscv*-*-*"] {
|
||||
run_dump_test "c-lui"
|
||||
run_dump_test "disas-jalr"
|
||||
run_dump_test "pcrel-lo-addend"
|
||||
|
||||
# The following tests require shared library support.
|
||||
if ![check_shared_lib_support] {
|
||||
|
5
ld/testsuite/ld-riscv-elf/pcrel-lo-addend.d
Normal file
5
ld/testsuite/ld-riscv-elf/pcrel-lo-addend.d
Normal file
@ -0,0 +1,5 @@
|
||||
#name: %pcrel_lo with an addend
|
||||
#source: pcrel-lo-addend.s
|
||||
#as: -march=rv32ic
|
||||
#ld: -melf32lriscv
|
||||
#error: .*dangerous relocation: %pcrel_lo with addend
|
17
ld/testsuite/ld-riscv-elf/pcrel-lo-addend.s
Normal file
17
ld/testsuite/ld-riscv-elf/pcrel-lo-addend.s
Normal file
@ -0,0 +1,17 @@
|
||||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
auipc ra, %pcrel_hi(tdata)
|
||||
addi ra, ra, %pcrel_lo(.text)
|
||||
lb t1, 0(ra)
|
||||
foo:
|
||||
auipc ra, %pcrel_hi(tdata)
|
||||
addi ra, ra, %pcrel_lo(.text+12)
|
||||
lb t2, 1(ra)
|
||||
|
||||
.data
|
||||
tdata:
|
||||
.byte 0xff
|
||||
.byte 0x00
|
||||
.byte 0xf0
|
||||
.byte 0x0f
|
Loading…
Reference in New Issue
Block a user