<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - segfault when using LTO"
href="https://bugs.llvm.org/show_bug.cgi?id=33462">33462</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>segfault when using LTO
</td>
</tr>
<tr>
<th>Product</th>
<td>lld
</td>
</tr>
<tr>
<th>Version</th>
<td>unspecified
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>release blocker
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>ELF
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>phosek@chromium.org
</td>
</tr>
<tr>
<th>CC</th>
<td>llvm-bugs@lists.llvm.org
</td>
</tr></table>
<p>
<div>
<pre>lld with LTO is segfaulting when linking our C library. This is a regression as
this was working as of r300385. The reproducer is at
<a href="https://storage.googleapis.com/fuchsia-build/lld/crash.cpio">https://storage.googleapis.com/fuchsia-build/lld/crash.cpio</a>. The stack trace
is:
ld.lld: ../../lib/IR/Globals.cpp:317:
llvm::GlobalVariable::GlobalVariable(llvm::Module &, llvm::Type *, bool,
llvm::GlobalValue::LinkageTypes, llvm::Constant *, const llvm::Twine &,
llvm::GlobalVariable *, llvm::GlobalValue::ThreadLocalMode, unsigned int,
bool): Assertion `!Ty->isFunctionTy() && PointerType::isValidElementType(Ty) &&
"invalid type for global variable"' failed.
#0 0x0000000001f3be19
llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Support/Unix/Signals.inc:398:11
#1
0x0000000001f3bfc9 PrintStackTraceSignalHandler(void*)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Support/Unix/Signals.inc:462:1
#2
0x0000000001f3a633 llvm::sys::RunSignalHandlers()
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Support/Signals.cpp:0:5
#3 0x0000000001f3c324 SignalHandler(int)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Support/Unix/Signals.inc:252:1
#4 0x00002ba457431330 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x10330)
#5 0x00002ba4586e3c37 gsignal
/build/eglibc-MjiXCM/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
#6 0x00002ba4586e7028 abort
/build/eglibc-MjiXCM/eglibc-2.19/stdlib/abort.c:91:0
#7 0x00002ba4586dcbf6 __assert_fail_base
/build/eglibc-MjiXCM/eglibc-2.19/assert/assert.c:92:0
#8 0x00002ba4586dcca2
(/lib/x86_64-linux-gnu/libc.so.6+0x2fca2)
#9 0x00000000051de97f
llvm::GlobalVariable::GlobalVariable(llvm::Module&, llvm::Type*, bool,
llvm::GlobalValue::LinkageTypes, llvm::Constant*, llvm::Twine const&,
llvm::GlobalVariable*, llvm::GlobalValue::ThreadLocalMode, unsigned int, bool)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/IR/Globals.cpp:318:3
#10
0x0000000004561f23 (anonymous
namespace)::IRLinker::copyGlobalValueProto(llvm::GlobalValue const*, bool)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Linker/IRMover.cpp:644:15
#11 0x00000000045607f2 (anonymous
namespace)::IRLinker::linkGlobalValueProto(llvm::GlobalValue*, bool)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Linker/IRMover.cpp:927:11
#12 0x00000000045601e6 (anonymous
namespace)::IRLinker::materialize(llvm::Value*, bool)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Linker/IRMover.cpp:0:35
#13 0x0000000004560173
(anonymous namespace)::GlobalValueMaterializer::materialize(llvm::Value*)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Linker/IRMover.cpp:538:3
#14 0x0000000004b3607c (anonymous
namespace)::Mapper::mapValue(llvm::Value const*)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Transforms/Utils/ValueMapper.cpp:332:16
#15 0x0000000004b370af (anonymous
namespace)::Mapper::remapInstruction(llvm::Instruction*)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Transforms/Utils/ValueMapper.cpp:841:12
#16 0x0000000004b37a11 (anonymous
namespace)::Mapper::remapFunction(llvm::Function&)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Transforms/Utils/ValueMapper.cpp:0:7
#17 0x0000000004b38be9 (anonymous
namespace)::Mapper::flush()
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Transforms/Utils/ValueMapper.cpp:801:3
#18
0x0000000004b35ef8 (anonymous namespace)::FlushingMapper::~FlushingMapper()
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Transforms/Utils/ValueMapper.cpp:1040:34
#19 0x0000000004b35f45
llvm::ValueMapper::mapValue(llvm::Value const&)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Transforms/Utils/ValueMapper.cpp:1064:3
#20 0x000000000455e869
(anonymous namespace)::IRLinker::run()
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Linker/IRMover.cpp:1318:9
#21
0x000000000455daed llvm::IRMover::move(std::unique_ptr<llvm::Module,
std::default_delete<llvm::Module> >, llvm::ArrayRef<llvm::GlobalValue*>,
std::function<void (llvm::GlobalValue&, std::function<void
(llvm::GlobalValue&)>)>, bool)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/Linker/IRMover.cpp:1439:3
#22
0x0000000003da9cd4 llvm::lto::LTO::addRegularLTO(llvm::BitcodeModule,
llvm::ArrayRef<llvm::lto::InputFile::Symbol>, llvm::lto::SymbolResolution
const*&, llvm::lto::SymbolResolution const*)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/LTO/LTO.cpp:559:28
#23 0x0000000003da8da9
llvm::lto::LTO::addModule(llvm::lto::InputFile&, unsigned int,
llvm::lto::SymbolResolution const*&, llvm::lto::SymbolResolution const*)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/LTO/LTO.cpp:445:12
#24
0x0000000003da87ed llvm::lto::LTO::add(std::unique_ptr<llvm::lto::InputFile,
std::default_delete<llvm::lto::InputFile> >,
llvm::ArrayRef<llvm::lto::SymbolResolution>)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../lib/LTO/LTO.cpp:427:15
#25 0x00000000020a5e09
lld::elf::BitcodeCompiler::add(lld::elf::BitcodeFile&)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../tools/lld/ELF/LTO.cpp:141:22
#26
0x00000000021218e6
lld::elf::SymbolTable<llvm::object::ELFType<(llvm::support::endianness)1, true>
<span class="quote">>::addCombinedLTOObject()</span >
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../tools/lld/ELF/SymbolTable.cpp:0:10
#27 0x000000000200e7aa void
lld::elf::LinkerDriver::link<llvm::object::ELFType<(llvm::support::endianness)1,
true> >(llvm::opt::InputArgList&)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../tools/lld/ELF/Driver.cpp:973:10
#28
0x0000000001ffed29 lld::elf::LinkerDriver::main(llvm::ArrayRef<char const*>,
bool)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../tools/lld/ELF/Driver.cpp:385:5
#29 0x0000000001ffe52d
lld::elf::link(llvm::ArrayRef<char const*>, bool, llvm::raw_ostream&)
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../tools/lld/ELF/Driver.cpp:86:3
#30 0x0000000001e7c27e main
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/../../tools/lld/tools/lld/lld.cpp:104:12
#31 0x00002ba4586cef45 __libc_start_main
/build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:321:0
#32 0x0000000001e7c029 _start
(/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/bin/ld.lld+0x1e7c029)
Stack dump:
0. Program arguments:
/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/bin/ld.lld -nostdlib
--build-id -m elf_x86_64 -z max-page-size=4096 -z combreloc -z relro -z now -z
text --hash-style=gnu --eh-frame-hdr -z defs
--reproduce=/usr/local/google/home/phosek/clang-llvm/llvm/out/lld/crash.cpio
-shared -soname libc.so <all the .o files></pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>