[llvm-bugs] [Bug 31619] New: LLD segfaults while linking FreeBSD EFI loader with -error-limit=0

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Jan 12 08:56:15 PST 2017


https://llvm.org/bugs/show_bug.cgi?id=31619

            Bug ID: 31619
           Summary: LLD segfaults while linking FreeBSD EFI loader with
                    -error-limit=0
           Product: lld
           Version: unspecified
          Hardware: PC
                OS: FreeBSD
            Status: NEW
          Severity: normal
          Priority: P
         Component: ELF
          Assignee: unassignedbugs at nondot.org
          Reporter: emaste at freebsd.org
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

While investigating a failure to link the FreeBSD EFI loader (described in a
comment at https://reviews.llvm.org/D28313) I encountered a segfault.

(lldb) bt
* thread #1: tid = 0, 0x0000000000546b20
ld.lld`llvm::DenseMapBase<llvm::DenseMap<lld::Atom const*,
llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<lld::Atom const*>,
llvm::detail::DenseSetPair<lld::Atom const*> >, lld::Atom const*,
llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<lld::Atom const*>,
llvm::detail::DenseSetPair<lld::Atom const*>
>::initEmpty(this=0x00007fffffffcc20) + 80 at DenseMap.h:318, name = 'lld',
stop reason = signal SIGSEGV
  * frame #0: 0x0000000000546b20
ld.lld`llvm::DenseMapBase<llvm::DenseMap<lld::Atom const*,
llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<lld::Atom const*>,
llvm::detail::DenseSetPair<lld::Atom const*> >, lld::Atom const*,
llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<lld::Atom const*>,
llvm::detail::DenseSetPair<lld::Atom const*>
>::initEmpty(this=0x00007fffffffcc20) + 80 at DenseMap.h:318
    frame #1: 0x00000000005a0e19
ld.lld`lld::coff::SectionChunk::classof(C=0x0000000000000000) + 25 at
Chunks.h:138
    frame #2: 0x00000000005a0cd8
ld.lld`llvm::cast_convert_val<lld::coff::SectionChunk, lld::coff::Chunk*,
lld::coff::Chunk*>::doit(Val=0x0000000804a48120) + 8 at Casting.h:199
    frame #3: 0x000000000058578b ld.lld`void
std::__1::__sort<lld::coff::fixupExports(__first=0x297373622e283a6f,
__last=0x2e6568636163622f, __comp=0x726564616f6c2f69)::$_0&,
lld::coff::Export*>(lld::coff::Export*, lld::coff::Export*,
lld::coff::fixupExports()::$_0&) + 1835 at algorithm:3935
    frame #4: 0x00000000006251a2 ld.lld`void
std::__1::vector<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> >,
std::__1::allocator<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> > >
>::__push_back_slow_path<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> >
>(std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> >&&) [inlined]
std::__1::vector<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> >,
std::__1::allocator<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> > >
>::size(this=0x00000008027d6c00, this=0x000000080369a903,
this=0x00007fffffffcb10, __new_size=34401516544) const + 468 at vector:973
    frame #5: 0x0000000000624fce ld.lld`void
std::__1::vector<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> >,
std::__1::allocator<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> > >
>::__push_back_slow_path<std::__1::vector<lld::coff::DefinedImportData*,
std::__1::allocator<lld::coff::DefinedImportData*> > >(this=0x00000008027cfc00,
__x=0x00000008027cf800) + 174 at vector:1579
    frame #6: 0x00000000006304f6
ld.lld`std::__1::__function::__func<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)>::__clone() const
[inlined]
std::__1::__compressed_pair<std::__1::__function::__func<llvm::ExitOnError::ExitOnError(this=0x00007fffffffca98,
this=0x0000000001d812cc, __p=0x00000008027b63dc)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)>*,
std::__1::__allocator_destructor<std::__1::allocator<std::__1::__function::__func<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)> > > >::second()
+ 25 at memory:3475
    frame #7: 0x00000000006304dd
ld.lld`std::__1::__function::__func<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)>::__clone() const
[inlined]
std::__1::unique_ptr<std::__1::__function::__func<llvm::ExitOnError::ExitOnError(this=0x00007fffffffca30,
__p=0x00007fffffffca98)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)>,
std::__1::__allocator_destructor<std::__1::allocator<std::__1::__function::__func<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)> > >
>::reset(std::__1::__function::__func<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)>*) + 149 at
memory:2630
    frame #8: 0x0000000000630448
ld.lld`std::__1::__function::__func<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)>::__clone() const
[inlined] ~unique_ptr(this=0x00007fffffffcb80) at memory:2598
    frame #9: 0x0000000000630448
ld.lld`std::__1::__function::__func<llvm::ExitOnError::ExitOnError(this=0x0000000000000000)::'lambda'(llvm::Error
const&),
std::__1::allocator<llvm::ExitOnError::ExitOnError(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >,
int)::'lambda'(llvm::Error const&)>, int (llvm::Error const&)>::__clone() const
+ 1496 at functional:1340
    frame #10: 0x00000000004fb2cb
ld.lld`llvm::Triple::getOSTypeName(llvm::Triple::OSType) [inlined]
StringRef(this=0x0000000000000000, Str=0x0000000000000000) + 14 at
StringRef.h:83
    frame #11: 0x00000000004fb2bd
ld.lld`llvm::Triple::getOSTypeName(Kind=UnknownOS) + 2541 at Triple.cpp:189
    frame #12: 0x00000000004f47ba ld.lld`std::__1::vector<unsigned short,
std::__1::allocator<unsigned short> >::max_size(this=0x00007fffffffd080) const
+ 42 at vector:956
    frame #13: 0x00000000004f3bc7
ld.lld`__split_buffer(this=0x0000000804819080, __cap=34435338368, __start=0,
__a=0x0000000000000050) + 7 at __split_buffer:324
    frame #14: 0x000000000046512b ld.lld`parseFlavor(std::__1::vector<char
const*, std::__1::allocator<char const*> >&) [inlined] std::__1::vector<char
const*, std::__1::allocator<char const*> >::operator[](this=0x000000000000007b,
this=0x0000000804871c40, this=0x0000000000000050, LHS=StringRef at
0x00007fffffffd298, __n=140737488343680, Str=0x0000000803bf6bbf,
Str=0x00007fffffffd080, RHS=StringRef at 0x00007fffffffd288) + 23 at
StringRef.h:83
    frame #15: 0x0000000000465114 ld.lld`parseFlavor(V=0x0000000804806df0) +
148 at lld.cpp:76
    frame #16: 0x0000000000464d5f ld.lld`_start(ap=<unavailable>,
cleanup=<unavailable>) + 367 at crt1.c:72

Reproducer at https://people.freebsd.org/~emaste/lld/efi_loader.tar.

LLD version r291724.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170112/b2e2967c/attachment.html>


More information about the llvm-bugs mailing list