RISC-V: Fix linker crash in section symbol check.
sym is only set for local symbols. h is only set for global symbols. Gas won't let me create a global section symbol, but bfd appears to have some support for that, and I can't rule out that other assemblers might do this. So we need to support both, and verify sym and h are non-NULL before using. bfd/ PR 24365 * elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check, verify sym non-NULL before using. Add identical check using h.
This commit is contained in:
parent
4e5391148d
commit
a9f5a5517f
2 changed files with 9 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2019-03-21 Jim Wilson <jimw@sifive.com>
|
||||
|
||||
PR 24365
|
||||
* elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check,
|
||||
verify sym non-NULL before using. Add identical check using h.
|
||||
|
||||
2019-03-21 Sudakshina Das <sudi.das@arm.com>
|
||||
|
||||
* elf-bfd.h (struct elf_backend_data): Add argument to
|
||||
|
|
|
@ -2059,7 +2059,9 @@ riscv_elf_relocate_section (bfd *output_bfd,
|
|||
all relocs to update these addends. This is also ambiguous, as
|
||||
we do allow offsets to be added to the target address, which are
|
||||
not to be used to find the auipc address. */
|
||||
if ((ELF_ST_TYPE (sym->st_info) == STT_SECTION) && rel->r_addend)
|
||||
if (((sym != NULL && (ELF_ST_TYPE (sym->st_info) == STT_SECTION))
|
||||
|| (h != NULL && h->type == STT_SECTION))
|
||||
&& rel->r_addend)
|
||||
{
|
||||
r = bfd_reloc_dangerous;
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue