https://sourceware.org/bugzilla/show_bug.cgi?id=22920
Bug ID: 22920
Summary: Segfault in ld with RISC-V binary target
Product: binutils
Version: unspecified
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: ld
Assignee: unassigned at sourceware dot org
Reporter: geoffrey at allott dot email
Target Milestone: ---
When using the latest release (2.30) and master (2.30.51.20180303), configured
on an x86_64-linux-gnu host with --target=riscv32-unknown-elf, the following
sequence of steps will segfault:
cat <<EOF > main.s
la t0, addr
EOF
cat <<EOF > link.ld
OUTPUT_FORMAT(binary);
SECTIONS {
main : { main.o }
addr = ABSOLUTE(42);
}
EOF
riscv32-unknown-elf-as main.s -o main.o
riscv32-unknown-elf-ld -T link.ld
The backtrace at the time of the segfault is as follows:
(gdb) bt
#0 0x00005555555b42c7 in _bfd_riscv_relax_section (abfd=0x5555558e00b0,
sec=<optimized out>, info=0x5555558a4fa0 <link_info>,
again=0x7fffffffe460) at ./elfnn-riscv.c:3444
#1 0x0000555555583226 in lang_size_sections_1 (prev=0x5555558c9da0,
output_section_statement=output_section_statement@entry=0x5555558ca3b0,
fill=fill@entry=0x0, dot=<optimized out>,
relax=relax@entry=0x7fffffffe604, check_regions=check_regions@entry=0) at
ldlang.c:5436
#2 0x0000555555583318 in lang_size_sections_1 (prev=<optimized out>,
prev@entry=0x5555558ca3c0,
output_section_statement=output_section_statement@entry=0x5555558ca3b0,
fill=0x0, dot=<optimized out>,
relax=relax@entry=0x7fffffffe604, check_regions=check_regions@entry=0) at
ldlang.c:5531
#3 0x00005555555837ef in lang_size_sections_1 (prev=<optimized out>,
prev@entry=0x5555558a0310 <statement_list>,
output_section_statement=0x5555558ca300, fill=fill@entry=0x0,
dot=<optimized out>, dot@entry=0,
relax=relax@entry=0x7fffffffe604, check_regions=check_regions@entry=0) at
ldlang.c:5177
#4 0x0000555555585ab4 in one_lang_size_sections_pass
(relax=relax@entry=0x7fffffffe604, check_regions=check_regions@entry=0)
at ldlang.c:5604
#5 0x0000555555587326 in lang_size_sections (relax=0x7fffffffe604,
check_regions=0) at ldlang.c:5716
#6 0x00005555555875a0 in lang_relax_sections (need_layout=<optimized out>) at
ldlang.c:6967
#7 0x0000555555598673 in gldelf32lriscv_map_segments (need_layout=<optimized
out>) at eelf32lriscv.c:66
#8 gldelf32lriscv_after_allocation () at eelf32lriscv.c:143
#9 0x0000555555589c39 in lang_process () at ldlang.c:7405
#10 0x0000555555577844 in main (argc=<optimized out>, argv=<optimized out>) at
./ldmain.c:439
It appears that the variable htab is null here
(gdb) l
3439 while (h->root.type == bfd_link_hash_indirect
3440 || h->root.type == bfd_link_hash_warning)
3441 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3442
3443 if (h->plt.offset != MINUS_ONE)
3444 symval = sec_addr (htab->elf.splt) + h->plt.offset;
3445 else if (h->root.u.def.section->output_section == NULL
3446 || (h->root.type != bfd_link_hash_defined
3447 && h->root.type != bfd_link_hash_defweak))
3448 continue;
(gdb) p htab
$1 = (struct riscv_elf_link_hash_table *) 0x0
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
bug-binutils mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-binutils