Skip to content

[llvm-dwarfdump] Crash in llvm::prettyPrintBaseTypeRef #93104

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

Closed
mgschossmann opened this issue May 22, 2024 · 1 comment · Fixed by #93156
Closed

[llvm-dwarfdump] Crash in llvm::prettyPrintBaseTypeRef #93104

mgschossmann opened this issue May 22, 2024 · 1 comment · Fixed by #93156
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] tools:llvm-dwarfdump

Comments

@mgschossmann
Copy link
Contributor

When executing llvm-dwarfdump /usr/bin/python3.10d --debug-loclists, llvm-dwarfdump crashes.

LLVM version: 19.0.0git (commit b586149, DEBUG build with assertions)

The Python binary can be obtained from python3-dbg_3.10.6-1~22.04_amd64.deb

Console output (beginning skipped):

0x000219a4: 
            DW_LLE_offset_pair     (0x000000000000012d, 0x000000000000014a): DW_OP_reg17 XMM0
            DW_LLE_offset_pair     (0x000000000000014a, 0x00000000000001ad): DW_OP_reg3 RBX
            DW_LLE_offset_pair     (0x00000000000001ad, 0x00000000000001b1): DW_OP_entry_value(DW_OP_regval_type XMM0PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: llvm-dwarfdump /usr/bin/python3.10d --debug-loclists
 #0 0x00007fef808d6501 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x00007fef808d69fb PrintStackTraceSignalHandler(void*) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x00007fef808d49f6 llvm::sys::RunSignalHandlers() /tmp/llvm-project/llvm/lib/Support/Signals.cpp:105:5
 #3 0x00007fef808d7195 SignalHandler(int) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007fef7fe42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x00007fef826a4bec llvm::DWARFUnitHeader::getOffset() const /tmp/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h:89:39
 #6 0x00007fef826a4839 llvm::DWARFUnit::getOffset() const /tmp/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h:321:32
 #7 0x00007fef8273e1a0 llvm::prettyPrintBaseTypeRef(llvm::DWARFUnit*, llvm::raw_ostream&, llvm::DIDumpOptions, llvm::ArrayRef<unsigned long>, unsigned int) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:243:36
 #8 0x00007fef8273e0be llvm::DWARFExpression::prettyPrintRegisterOp(llvm::DWARFUnit*, llvm::raw_ostream&, llvm::DIDumpOptions, unsigned char, llvm::ArrayRef<unsigned long>) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:284:7
 #9 0x00007fef8273e612 llvm::DWARFExpression::Operation::print(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::DWARFExpression const*, llvm::DWARFUnit*) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:313:9
#10 0x00007fef8273ecb8 llvm::DWARFExpression::print(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::DWARFUnit*, bool) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:368:9
#11 0x00007fef8272827e dumpExpression(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::ArrayRef<unsigned char>, bool, unsigned int, llvm::DWARFUnit*) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:120:3
#12 0x00007fef82727a62 llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&, std::optional<llvm::object::SectionedAddress>, llvm::DWARFObject const&, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const::$_1::operator()(llvm::DWARFLocationEntry const&) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:158:7
#13 0x00007fef827276bd bool llvm::function_ref<bool (llvm::DWARFLocationEntry const&)>::callback_fn<llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&, std::optional<llvm::object::SectionedAddress>, llvm::DWARFObject const&, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const::$_1>(long, llvm::DWARFLocationEntry const&) /tmp/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#14 0x00007fef82728601 llvm::function_ref<bool (llvm::DWARFLocationEntry const&)>::operator()(llvm::DWARFLocationEntry const&) const /tmp/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#15 0x00007fef82726abe llvm::DWARFDebugLoclists::visitLocationList(unsigned long*, llvm::function_ref<bool (llvm::DWARFLocationEntry const&)>) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:335:16
#16 0x00007fef82725cb6 llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&, std::optional<llvm::object::SectionedAddress>, llvm::DWARFObject const&, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:163:7
#17 0x00007fef8272724b llvm::DWARFDebugLoclists::dumpRange(unsigned long, unsigned long, llvm::raw_ostream&, llvm::DWARFObject const&, llvm::DIDumpOptions) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:401:17
#18 0x00007fef826a9efd dumpLoclistsSection(llvm::raw_ostream&, llvm::DIDumpOptions, llvm::DWARFDataExtractor, llvm::DWARFObject const&, std::optional<unsigned long>) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp:975:7
#19 0x00007fef826a6ca2 llvm::DWARFContext::dump(llvm::raw_ostream&, llvm::DIDumpOptions, std::array<std::optional<unsigned long>, 28ul>) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp:1078:5
#20 0x000055f13ee9d0e1 dumpObjectFile(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:725:3
#21 0x000055f13eec3c35 bool std::__invoke_impl<bool, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&>(std::__invoke_other, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61:7
#22 0x000055f13eec3bc5 std::enable_if<is_invocable_r_v<bool, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&>, bool>::type std::__invoke_r<bool, bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&>(bool (*&)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:114:2
#23 0x000055f13eec3add std::_Function_handler<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&), bool (*)(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>::_M_invoke(std::_Any_data const&, llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290:2
#24 0x000055f13eeaa9b5 std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>::operator()(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:2
#25 0x000055f13ee9f1b6 handleBuffer(llvm::StringRef, llvm::MemoryBufferRef, std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>, llvm::raw_ostream&) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:780:11
#26 0x000055f13ee9c27e handleFile(llvm::StringRef, std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>, llvm::raw_ostream&) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:818:10
#27 0x000055f13ee9bf92 main /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:919:18
#28 0x00007fef7fe29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#29 0x00007fef7fe29e40 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007fef7fe29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#31 0x000055f13ee7f575 _start (/tmp/llvm-project/llvm/build/bin/llvm-dwarfdump+0x14575)
Segmentation fault (core dumped)

Adding a null-check for U in llvm::prettyPrintBaseTypeRef solves the issue.

Because dumpLoclistsSection passes nullptr for parameter DWARFUnit *U of DWARFLocationTable::dumpLocationList, which gets forwarded to llvm::prettyPrintBaseTypeRef, I suppose that nullptr is also a valid argument for parameter DWARFUnit *U of llvm::prettyPrintBaseTypeRef.

@mgschossmann mgschossmann changed the title Crash in llvm::prettyPrintBaseTypeRef [llvm-dwarfdump] Crash in llvm::prettyPrintBaseTypeRef May 22, 2024
@EugeneZelenko EugeneZelenko added tools:llvm-dwarfdump crash Prefer [crash-on-valid] or [crash-on-invalid] and removed new issue labels May 22, 2024
@llvmbot
Copy link
Member

llvmbot commented May 22, 2024

@llvm/issue-subscribers-tools-llvm-dwarfdump

Author: None (mgschossmann)

When executing `llvm-dwarfdump /usr/bin/python3.10d --debug-loclists`, llvm-dwarfdump crashes.

LLVM version: 19.0.0git (commit b586149, DEBUG build with assertions)

The Python binary can be obtained from python3-dbg_3.10.6-1~22.04_amd64.deb

Console output (beginning skipped):

0x000219a4: 
            DW_LLE_offset_pair     (0x000000000000012d, 0x000000000000014a): DW_OP_reg17 XMM0
            DW_LLE_offset_pair     (0x000000000000014a, 0x00000000000001ad): DW_OP_reg3 RBX
            DW_LLE_offset_pair     (0x00000000000001ad, 0x00000000000001b1): DW_OP_entry_value(DW_OP_regval_type XMM0PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: llvm-dwarfdump /usr/bin/python3.10d --debug-loclists
 #<!-- -->0 0x00007fef808d6501 llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
 #<!-- -->1 0x00007fef808d69fb PrintStackTraceSignalHandler(void*) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #<!-- -->2 0x00007fef808d49f6 llvm::sys::RunSignalHandlers() /tmp/llvm-project/llvm/lib/Support/Signals.cpp:105:5
 #<!-- -->3 0x00007fef808d7195 SignalHandler(int) /tmp/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #<!-- -->4 0x00007fef7fe42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #<!-- -->5 0x00007fef826a4bec llvm::DWARFUnitHeader::getOffset() const /tmp/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h:89:39
 #<!-- -->6 0x00007fef826a4839 llvm::DWARFUnit::getOffset() const /tmp/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h:321:32
 #<!-- -->7 0x00007fef8273e1a0 llvm::prettyPrintBaseTypeRef(llvm::DWARFUnit*, llvm::raw_ostream&amp;, llvm::DIDumpOptions, llvm::ArrayRef&lt;unsigned long&gt;, unsigned int) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:243:36
 #<!-- -->8 0x00007fef8273e0be llvm::DWARFExpression::prettyPrintRegisterOp(llvm::DWARFUnit*, llvm::raw_ostream&amp;, llvm::DIDumpOptions, unsigned char, llvm::ArrayRef&lt;unsigned long&gt;) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:284:7
 #<!-- -->9 0x00007fef8273e612 llvm::DWARFExpression::Operation::print(llvm::raw_ostream&amp;, llvm::DIDumpOptions, llvm::DWARFExpression const*, llvm::DWARFUnit*) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:313:9
#<!-- -->10 0x00007fef8273ecb8 llvm::DWARFExpression::print(llvm::raw_ostream&amp;, llvm::DIDumpOptions, llvm::DWARFUnit*, bool) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp:368:9
#<!-- -->11 0x00007fef8272827e dumpExpression(llvm::raw_ostream&amp;, llvm::DIDumpOptions, llvm::ArrayRef&lt;unsigned char&gt;, bool, unsigned int, llvm::DWARFUnit*) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:120:3
#<!-- -->12 0x00007fef82727a62 llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&amp;, std::optional&lt;llvm::object::SectionedAddress&gt;, llvm::DWARFObject const&amp;, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const::$_1::operator()(llvm::DWARFLocationEntry const&amp;) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:158:7
#<!-- -->13 0x00007fef827276bd bool llvm::function_ref&lt;bool (llvm::DWARFLocationEntry const&amp;)&gt;::callback_fn&lt;llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&amp;, std::optional&lt;llvm::object::SectionedAddress&gt;, llvm::DWARFObject const&amp;, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const::$_1&gt;(long, llvm::DWARFLocationEntry const&amp;) /tmp/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#<!-- -->14 0x00007fef82728601 llvm::function_ref&lt;bool (llvm::DWARFLocationEntry const&amp;)&gt;::operator()(llvm::DWARFLocationEntry const&amp;) const /tmp/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#<!-- -->15 0x00007fef82726abe llvm::DWARFDebugLoclists::visitLocationList(unsigned long*, llvm::function_ref&lt;bool (llvm::DWARFLocationEntry const&amp;)&gt;) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:335:16
#<!-- -->16 0x00007fef82725cb6 llvm::DWARFLocationTable::dumpLocationList(unsigned long*, llvm::raw_ostream&amp;, std::optional&lt;llvm::object::SectionedAddress&gt;, llvm::DWARFObject const&amp;, llvm::DWARFUnit*, llvm::DIDumpOptions, unsigned int) const /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:163:7
#<!-- -->17 0x00007fef8272724b llvm::DWARFDebugLoclists::dumpRange(unsigned long, unsigned long, llvm::raw_ostream&amp;, llvm::DWARFObject const&amp;, llvm::DIDumpOptions) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp:401:17
#<!-- -->18 0x00007fef826a9efd dumpLoclistsSection(llvm::raw_ostream&amp;, llvm::DIDumpOptions, llvm::DWARFDataExtractor, llvm::DWARFObject const&amp;, std::optional&lt;unsigned long&gt;) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp:975:7
#<!-- -->19 0x00007fef826a6ca2 llvm::DWARFContext::dump(llvm::raw_ostream&amp;, llvm::DIDumpOptions, std::array&lt;std::optional&lt;unsigned long&gt;, 28ul&gt;) /tmp/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp:1078:5
#<!-- -->20 0x000055f13ee9d0e1 dumpObjectFile(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:725:3
#<!-- -->21 0x000055f13eec3c35 bool std::__invoke_impl&lt;bool, bool (*&amp;)(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;), llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;&gt;(std::__invoke_other, bool (*&amp;)(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;), llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61:7
#<!-- -->22 0x000055f13eec3bc5 std::enable_if&lt;is_invocable_r_v&lt;bool, bool (*&amp;)(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;), llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;&gt;, bool&gt;::type std::__invoke_r&lt;bool, bool (*&amp;)(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;), llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;&gt;(bool (*&amp;)(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;), llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:114:2
#<!-- -->23 0x000055f13eec3add std::_Function_handler&lt;bool (llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;), bool (*)(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;)&gt;::_M_invoke(std::_Any_data const&amp;, llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;) /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290:2
#<!-- -->24 0x000055f13eeaa9b5 std::function&lt;bool (llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;)&gt;::operator()(llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;) const /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:2
#<!-- -->25 0x000055f13ee9f1b6 handleBuffer(llvm::StringRef, llvm::MemoryBufferRef, std::function&lt;bool (llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;)&gt;, llvm::raw_ostream&amp;) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:780:11
#<!-- -->26 0x000055f13ee9c27e handleFile(llvm::StringRef, std::function&lt;bool (llvm::object::ObjectFile&amp;, llvm::DWARFContext&amp;, llvm::Twine const&amp;, llvm::raw_ostream&amp;)&gt;, llvm::raw_ostream&amp;) /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:818:10
#<!-- -->27 0x000055f13ee9bf92 main /tmp/llvm-project/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp:919:18
#<!-- -->28 0x00007fef7fe29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#<!-- -->29 0x00007fef7fe29e40 call_init ./csu/../csu/libc-start.c:128:20
#<!-- -->30 0x00007fef7fe29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#<!-- -->31 0x000055f13ee7f575 _start (/tmp/llvm-project/llvm/build/bin/llvm-dwarfdump+0x14575)
Segmentation fault (core dumped)

Adding a null-check for U in llvm::prettyPrintBaseTypeRef solves the issue.

Because dumpLoclistsSection passes nullptr for parameter DWARFUnit *U of DWARFLocationTable::dumpLocationList, which gets forwarded to llvm::prettyPrintBaseTypeRef, I suppose that nullptr is also a valid argument for parameter DWARFUnit *U of llvm::prettyPrintBaseTypeRef.

mgschossmann added a commit to mgschossmann/llvm-project that referenced this issue May 23, 2024
…lvm#93104

Prevent a crash by only printing DWARFUnit-unaware information in cases
in which `DWARFUnit* U` is `nullptr`.
dwblaikie pushed a commit that referenced this issue Jun 7, 2024
Fixes #93104

Prevent a crash by only printing DWARFUnit-unaware information in cases
in which `DWARFUnit* U` is `nullptr`.
nekoshirro pushed a commit to nekoshirro/Alchemist-LLVM that referenced this issue Jun 9, 2024
…93156)

Fixes llvm#93104

Prevent a crash by only printing DWARFUnit-unaware information in cases
in which `DWARFUnit* U` is `nullptr`.

Signed-off-by: Hafidz Muzakky <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] tools:llvm-dwarfdump
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants