[PATCH] D132900: [DWARF] Fix infinite recursion in Type Printer.

Alexander Yermolovich via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 22 15:43:28 PDT 2022


ayermolo added a comment.

Circled back with fresh eyes. So this example passes with trunk. So looks like current allow list (below), regresses it.

  Stack dump:
  0.  Program arguments: /home/ayermolo/local/llvm-build-debug/bin/llvm-dwarfdump --show-form --verbose --debug-info --choose-strategy=1 --enable-verbose-mode=false repro.o
    #0 0x000055cc332c360a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:569:11
    #1 0x000055cc332c37bb PrintStackTraceSignalHandler(void*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:636:1
    #2 0x000055cc332c1e36 llvm::sys::RunSignalHandlers() /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Signals.cpp:103:5
    #3 0x000055cc332c3ea5 SignalHandler(int) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:407:1
    #4 0x00007f54e2edbce0 __restore_rt (/lib64/libpthread.so.0+0x12ce0)
    #5 0x000055cc32d645a4 llvm::StringRef::size() const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/ADT/StringRef.h:137:0
    #6 0x000055cc32dbafe5 llvm::DataExtractor::size() const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/Support/DataExtractor.h:688:25
    #7 0x000055cc32db7ee9 llvm::DataExtractor::isValidOffset(unsigned long) const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/Support/DataExtractor.h:665:61
    #8 0x000055cc32db8348 llvm::DataExtractor::isValidOffsetForDataOfSize(unsigned long, unsigned long) const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/Support/DataExtractor.h:673:41
    #9 0x000055cc331d9500 llvm::DataExtractor::prepareRead(unsigned long, unsigned long, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:19:7
   #10 0x000055cc331da839 unsigned int llvm::DataExtractor::getU<unsigned int>(unsigned long*, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:47:7
   #11 0x000055cc331d97c5 llvm::DataExtractor::getU32(unsigned long*, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:108:3
   #12 0x000055cc331d9912 llvm::DataExtractor::getUnsigned(unsigned long*, unsigned int, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:133:12
   #13 0x000055cc32dfac8b llvm::DWARFDataExtractor::getRelocatedValue(unsigned int, unsigned long*, unsigned long*, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDataExtractor.cpp:58:12
   #14 0x000055cc32e52caa llvm::DWARFFormValue::extractValue(llvm::DWARFDataExtractor const&, unsigned long*, llvm::dwarf::FormParams, llvm::DWARFContext const*, llvm::DWARFUnit const*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFFormValue.cpp:311:25
   #15 0x000055cc32e005f9 llvm::DWARFFormValue::extractValue(llvm::DWARFDataExtractor const&, unsigned long*, llvm::dwarf::FormParams, llvm::DWARFUnit const*) /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFFormValue.h:104:5
   #16 0x000055cc32dffd93 llvm::DWARFAbbreviationDeclaration::getAttributeValueFromOffset(unsigned int, unsigned long, llvm::DWARFUnit const&) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp:181:7
   #17 0x000055cc32dffe7c llvm::DWARFAbbreviationDeclaration::getAttributeValue(unsigned long, llvm::dwarf::Attribute, llvm::DWARFUnit const&) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp:0:10
   #18 0x000055cc32e3dd9a llvm::DWARFDie::find(llvm::dwarf::Attribute) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp:257:5
   #19 0x000055cc32e3e1e8 llvm::DWARFDie::getAttributeValueAsReferencedDie(llvm::dwarf::Attribute) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp:310:32
   #20 0x000055cc32e462b4 llvm::resolveReferencedType(llvm::DWARFDie, llvm::dwarf::Attribute) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:94:12
   #21 0x000055cc32e47051 llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*)::$_0::operator()() const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:135:40
   #22 0x000055cc32e466ef llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:139:36
   #23 0x000055cc32e498e7 llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:572:22
   #24 0x000055cc32e472d3 llvm::DWARFTypePrinter::appendQualifiedName(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:351:1
   #25 0x000055cc32e4905b llvm::DWARFTypePrinter::appendSubroutineNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool, bool, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:584:5
   #26 0x000055cc32e4898d llvm::DWARFTypePrinter::appendUnqualifiedNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:253:5
   #27 0x000055cc32e4992b llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:574:3
   #28 0x000055cc32e4986e llvm::DWARFTypePrinter::appendScopes(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:707:5
   #29 0x000055cc32e46506 llvm::DWARFTypePrinter::appendQualifiedNameBefore(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:0:7
   #30 0x000055cc32e463f2 llvm::DWARFTypePrinter::appendPointerLikeTypeBefore(llvm::DWARFDie, llvm::DWARFDie, llvm::StringRef) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:115:3
   #31 0x000055cc32e4673d llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:140:5
   #32 0x000055cc32e498e7 llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:572:22
   #33 0x000055cc32e472d3 llvm::DWARFTypePrinter::appendQualifiedName(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:351:1
   #34 0x000055cc32e4905b llvm::DWARFTypePrinter::appendSubroutineNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool, bool, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:584:5
   #35 0x000055cc32e4898d llvm::DWARFTypePrinter::appendUnqualifiedNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:253:5
   #36 0x000055cc32e4992b llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:574:3
   #37 0x000055cc32e4986e llvm::DWARFTypePrinter::appendScopes(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:707:5
   #38 0x000055cc32e46506 llvm::DWARFTypePrinter::appendQualifiedNameBefore(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:0:7
   #39 0x000055cc32e463f2 llvm::DWARFTypePrinter::appendPointerLikeTypeBefore(llvm::DWARFDie, llvm::DWARFDie, llvm::StringRef) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:115:3
   #40 0x000055cc32e4673d llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:140:5
   #41 0x000055cc32e498e7 llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:572:22
   #42 0x000055cc32e472d3 llvm::DWARFTypePrinter::appendQualifiedName(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:351:1
   #43 0x000055cc32e4905b llvm::DWARFTypePrinter::appendSubroutineNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool, bool, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:584:5
   #44 0x000055cc32e4898d llvm::DWARFTypePrinter::appendUnqualifiedNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:253:5
   #45 0x000055cc32e4992b llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:574:3

Print out with TAGS:

  0x000000a1:       DW_TAG_formal_parameter [4]   (0x00000098)
                      DW_AT_type [DW_FORM_ref4] (cu + 0x00a6 => {0x000000a6} "
  appendQualifiedName:  a6 : DW_TAG_pointer_type
  appendUnqualifiedName:  a6 : DW_TAG_pointer_type
  appendUnqualifiedNameBefore:  a6 : DW_TAG_pointer_type
  appendPointerLikeTypeBefore:  a6 : DW_TAG_pointer_type
  appendQualifiedNameBefore:  ac : DW_TAG_const_type
  appendScopes:   98 : DW_TAG_subroutine_type
  appendScopes:   5e : DW_TAG_subprogram
  appendUnqualifiedName:  98 : DW_TAG_subroutine_type
  appendUnqualifiedNameBefore:  98 : DW_TAG_subroutine_type
  void appendUnqualifiedNameAfter:  98 : DW_TAG_subroutine_type
  appendSubroutineNameAfter:  98 : DW_TAG_subroutine_type
  (
  appendQualifiedName:  a6 : DW_TAG_pointer_type
  appendUnqualifiedName:  a6 : DW_TAG_pointer_type
  appendUnqualifiedNameBefore:  a6 : DW_TAG_pointer_type
  appendPointerLikeTypeBefore:  a6 : DW_TAG_pointer_type
  appendQualifiedNameBefore:  ac : DW_TAG_const_type
  appendScopes:   98 : DW_TAG_subroutine_type
  appendScopes:   5e : DW_TAG_subprogram
  appendUnqualifiedName:  98 : DW_TAG_subroutine_type
  appendUnqualifiedNameBefore:  98 : DW_TAG_subroutine_type
  void appendUnqualifiedNameAfter:  98 : DW_TAG_subroutine_type
  appendSubroutineNameAfter:  98 : DW_TAG_subroutine_type
  (
  appendQualifiedName:  a6 : DW_TAG_pointer_type
  appendUnqualifiedName:  a6 : DW_TAG_pointer_type
  appendUnqualifiedNameBefore:  a6 : DW_TAG_pointer_type
  appendPointerLikeTypeBefore:  a6 : DW_TAG_pointer_type
  appendQualifiedNameBefore:  ac : DW_TAG_const_type
  appendScopes:   98 : DW_TAG_subroutine_type
  appendScopes:   5e : DW_TAG_subprogram
  appendUnqualifiedName:  98 : DW_TAG_subroutine_type
  appendUnqualifiedNameBefore:  98 : DW_TAG_subroutine_type
  void appendUnqualifiedNameAfter:  98 : DW_TAG_subroutine_type
  appendSubroutineNameAfter:  98 : DW_TAG_subroutine_type



  switch (D.getTag()) {
        case dwarf::DW_TAG_structure_type:
        case dwarf::DW_TAG_class_type:
        case dwarf::DW_TAG_union_type:
        case dwarf::DW_TAG_namespace:
        case DW_TAG_enumeration_type:
          appendScopes(D.getParent());
          break;
        default:
          break;
        }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D132900/new/

https://reviews.llvm.org/D132900



More information about the llvm-commits mailing list