From 09ca4b9d9bd61ecb779386a6cc7796cb05dde1af Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Thu, 15 Feb 2018 13:48:38 -0800 Subject: [PATCH] RISC-V: Fix relocation failure with zero address sections. bfd/ * elfnn-riscv.c (_bfd_riscv_relax_section): Ifdef out check to ignore symbols whose section address is zero. --- bfd/ChangeLog | 3 +++ bfd/elfnn-riscv.c | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index cab828b..b48afd6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,8 @@ 2018-02-15 Jim Wilson + * elfnn-riscv.c (_bfd_riscv_relax_section): Ifdef out check to ignore + symbols whose section address is zero. + * 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. diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 931bd1d..0530532 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -3399,8 +3399,14 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec, { BFD_ASSERT (isym->st_shndx < elf_numsections (abfd)); sym_sec = elf_elfsections (abfd)[isym->st_shndx]->bfd_section; +#if 0 + /* The purpose of this code is unknown. It breaks linker scripts + for embedded development that place sections at address zero. + This code is believed to be unnecessary. Disabling it but not + yet removing it, in case something breaks. */ if (sec_addr (sym_sec) == 0) continue; +#endif symval = sec_addr (sym_sec) + isym->st_value; } } -- 2.7.4