mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
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:
@ -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>
|
2018-02-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
PR ld/22832
|
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_I:
|
||||||
case R_RISCV_PCREL_LO12_S:
|
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,
|
if (riscv_record_pcrel_lo_reloc (&pcrel_relocs, input_section, info,
|
||||||
howto, rel, relocation, name,
|
howto, rel, relocation, name,
|
||||||
contents))
|
contents))
|
||||||
@ -2234,25 +2244,27 @@ riscv_elf_relocate_section (bfd *output_bfd,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case bfd_reloc_outofrange:
|
case bfd_reloc_outofrange:
|
||||||
msg = _("internal error: out of range error");
|
msg = _("%X%P: internal error: out of range error\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case bfd_reloc_notsupported:
|
case bfd_reloc_notsupported:
|
||||||
msg = _("internal error: unsupported relocation error");
|
msg = _("%X%P: internal error: unsupported relocation error\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case bfd_reloc_dangerous:
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
msg = _("internal error: unknown error");
|
msg = _("%X%P: internal error: unknown error\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg)
|
if (msg)
|
||||||
info->callbacks->warning
|
info->callbacks->einfo (msg);
|
||||||
(info, msg, name, input_bfd, input_section, rel->r_offset);
|
|
||||||
/* We already reported the error via a callback, so don't try to report
|
/* We already reported the error via a callback, so don't try to report
|
||||||
it again by returning false. That leads to spurious errors. */
|
it again by returning false. That leads to spurious errors. */
|
||||||
ret = TRUE;
|
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>
|
2018-02-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/22842
|
PR ld/22842
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
if [istarget "riscv*-*-*"] {
|
if [istarget "riscv*-*-*"] {
|
||||||
run_dump_test "c-lui"
|
run_dump_test "c-lui"
|
||||||
run_dump_test "disas-jalr"
|
run_dump_test "disas-jalr"
|
||||||
|
run_dump_test "pcrel-lo-addend"
|
||||||
|
|
||||||
# The following tests require shared library support.
|
# The following tests require shared library support.
|
||||||
if ![check_shared_lib_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
|
Reference in New Issue
Block a user