New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
After r307100, segfaults when linking FreeBSD aarch64 kernel #33168
Comments
Reproducible at r308300, and with --no-threads. (gdb) frame With this change:
(Using GDB because LLDB 5.0.0 is currently broken too.) |
Sorry for the delay. Looking at it now. |
Fixed in r308382. |
Sorry, I just noticed this. Yes, that was the correct change. I had in mind only the synthetic linkerscirpt case when I first wrote it. |
No worries. I can confirm that with my original change (emaste/freebsd@1d3dfff) a lld-linked FreeBSD/arm64 kernel and world works (tested on a SoftIron OverDrive 1000). |
Extended Description
As reported on https://reviews.llvm.org/rL307100, after this change linking the FreeBSD aarch64 kernel results in lld segfaulting:
Thread 1 received signal SIGSEGV, Segmentation fault.
lld::elf::OutputSection::addSection (this=0x0, S=0x813b2d008)
at /home/dim/src/llvm-trunk/tools/lld/ELF/OutputSections.cpp:84
84 Sections.push_back(S);
(gdb) bt
#0 lld::elf::OutputSection::addSection (this=0x0, S=0x813b2d008) at /home/dim/src/llvm-trunk/tools/lld/ELF/OutputSections.cpp:84
#1 0x00000000009506eb in (anonymous namespace)::Writer<llvm::object::ELFType<(llvm::support::endianness)1, true> >::addPredefinedSections (this=0x7fffffff6e30) at /home/dim/src/llvm-trunk/tools/lld/ELF/Writer.cpp:1338
#2 0x0000000000949423 in (anonymous namespace)::Writer<llvm::object::ELFType<(llvm::support::endianness)1, true> >::finalizeSections (this=0x7fffffff6e30) at /home/dim/src/llvm-trunk/tools/lld/ELF/Writer.cpp:1243
#3 0x0000000000914495 in (anonymous namespace)::Writer<llvm::object::ELFType<(llvm::support::endianness)1, true> >::run (this=0x7fffffff6e30) at /home/dim/src/llvm-trunk/tools/lld/ELF/Writer.cpp:207
#4 0x0000000000973192 in lld::elf::writeResult<llvm::object::ELFType<(llvm::support::endianness)1, true> > () at /home/dim/src/llvm-trunk/tools/lld/ELF/Writer.cpp:126
#5 0x000000000066c7ff in lld::elf::LinkerDriver::link<llvm::object::ELFType<(llvm::support::endianness)1, true> > (this=0x805ce2000, Args=...) at /home/dim/src/llvm-trunk/tools/lld/ELF/Driver.cpp:1056
#6 0x0000000000655585 in lld::elf::LinkerDriver::main (this=0x805ce2000, ArgsArr=..., CanExitEarly=true) at /home/dim/src/llvm-trunk/tools/lld/ELF/Driver.cpp:386
#7 0x00000000006547a3 in lld::elf::link (Args=..., CanExitEarly=true, Error=...) at /home/dim/src/llvm-trunk/tools/lld/ELF/Driver.cpp:85
#8 0x0000000000457809 in main (Argc=1245, Argv=0x7fffffff8580) at /home/dim/src/llvm-trunk/tools/lld/tools/lld/lld.cpp:104
(gdb) up
#1 0x00000000009506eb in (anonymous namespace)::Writer<llvm::object::ELFType<(llvm::support::endianness)1, true> >::addPredefinedSections (this=0x7fffffff6e30) at /home/dim/src/llvm-trunk/tools/lld/ELF/Writer.cpp:1338
1338 Cmd->Sec->addSection(Sentinel);
(gdb) print Cmd->Sec
$5 = (lld::elf::OutputSection *) 0x0
At this point findSectionCommand() was looping through Script->Opt.Commands, found a not-completely initialized .ARM.exidx section, which still had its null Sec member.
Reverting the findSectionCommand() implementation to its previous version prevents crashing, but it may not be the correct solution
The reproduction test case is unfortunately too large to be attached, find it here:
http://www.andric.com/freebsd/clang/lld-arm64-segfault.tar.xz (18 MiB)
The text was updated successfully, but these errors were encountered: