[Lldb-commits] [lldb] e33302f - Revert "[lldb][test] TestLocationListLookup.py: skip expr check on unsupported platforms (#74818)"
Author: Mikhail Goncharov Date: 2023-12-08T11:39:10+01:00 New Revision: e33302fa1279d0a15aac18eca3f0311669bfe328 URL: https://github.com/llvm/llvm-project/commit/e33302fa1279d0a15aac18eca3f0311669bfe328 DIFF: https://github.com/llvm/llvm-project/commit/e33302fa1279d0a15aac18eca3f0311669bfe328.diff LOG: Revert "[lldb][test] TestLocationListLookup.py: skip expr check on unsupported platforms (#74818)" This reverts commit 11a7e5781c6363ca3061f57f3aa7e49164673821. Test fails: https://lab.llvm.org/buildbot/#/builders/219/builds/7416 and others. Added: Modified: lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py Removed: diff --git a/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py b/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py index ccee3bfde3f5de..07f306a6ed78b6 100644 --- a/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py +++ b/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py @@ -7,7 +7,10 @@ class LocationListLookupTestCase(TestBase): -def launch(self) -> lldb.SBProcess: +@skipIf(oslist=["linux"], archs=["arm"]) +def test_loclist(self): +self.build() + exe = self.getBuildArtifact("a.out") target = self.dbg.CreateTarget(exe) self.assertTrue(target, VALID_TARGET) @@ -19,31 +22,15 @@ def launch(self) -> lldb.SBProcess: self.assertTrue(process.IsValid()) self.assertTrue(process.is_stopped) -return process - -def check_local_vars(self, process: lldb.SBProcess, check_expr: bool): # Find `bar` on the stack, then # make sure we can read out the local # variables (with both `frame var` and `expr`) for f in process.GetSelectedThread().frames: -frame_name = f.GetDisplayFunctionName() -if frame_name is not None and frame_name.startswith("Foo::bar"): +if f.GetDisplayFunctionName().startswith("Foo::bar"): argv = f.GetValueForVariablePath("argv").GetChildAtIndex(0) strm = lldb.SBStream() argv.GetDescription(strm) self.assertNotEqual(strm.GetData().find("a.out"), -1) -if check_expr: -process.GetSelectedThread().SetSelectedFrame(f.idx) -self.expect_expr("this", result_type="Foo *") - -@skipIf(oslist=["linux"], archs=["arm"]) -@skipIfDarwin -def test_loclist_frame_var(self): -self.build() -self.check_local_vars(self.launch(), check_expr=False) - -@skipUnlessDarwin -def test_loclist_expr(self): -self.build() -self.check_local_vars(self.launch(), check_expr=True) +process.GetSelectedThread().SetSelectedFrame(f.idx) +self.expect_expr("this", result_type="Foo *") ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] b43ab18 - Reapply "[lldb][test] TestLocationListLookup.py: skip expr check on unsupported platforms (#74818)"
Author: Mikhail Goncharov Date: 2023-12-08T11:43:14+01:00 New Revision: b43ab182040f7c3b43e37ade7af600af1c9b3dfd URL: https://github.com/llvm/llvm-project/commit/b43ab182040f7c3b43e37ade7af600af1c9b3dfd DIFF: https://github.com/llvm/llvm-project/commit/b43ab182040f7c3b43e37ade7af600af1c9b3dfd.diff LOG: Reapply "[lldb][test] TestLocationListLookup.py: skip expr check on unsupported platforms (#74818)" This reverts commit e33302fa1279d0a15aac18eca3f0311669bfe328. there is a fix already, sorry for the noise Added: Modified: lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py Removed: diff --git a/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py b/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py index 07f306a6ed78b..ccee3bfde3f5d 100644 --- a/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py +++ b/lldb/test/API/functionalities/location-list-lookup/TestLocationListLookup.py @@ -7,10 +7,7 @@ class LocationListLookupTestCase(TestBase): -@skipIf(oslist=["linux"], archs=["arm"]) -def test_loclist(self): -self.build() - +def launch(self) -> lldb.SBProcess: exe = self.getBuildArtifact("a.out") target = self.dbg.CreateTarget(exe) self.assertTrue(target, VALID_TARGET) @@ -22,15 +19,31 @@ def test_loclist(self): self.assertTrue(process.IsValid()) self.assertTrue(process.is_stopped) +return process + +def check_local_vars(self, process: lldb.SBProcess, check_expr: bool): # Find `bar` on the stack, then # make sure we can read out the local # variables (with both `frame var` and `expr`) for f in process.GetSelectedThread().frames: -if f.GetDisplayFunctionName().startswith("Foo::bar"): +frame_name = f.GetDisplayFunctionName() +if frame_name is not None and frame_name.startswith("Foo::bar"): argv = f.GetValueForVariablePath("argv").GetChildAtIndex(0) strm = lldb.SBStream() argv.GetDescription(strm) self.assertNotEqual(strm.GetData().find("a.out"), -1) -process.GetSelectedThread().SetSelectedFrame(f.idx) -self.expect_expr("this", result_type="Foo *") +if check_expr: +process.GetSelectedThread().SetSelectedFrame(f.idx) +self.expect_expr("this", result_type="Foo *") + +@skipIf(oslist=["linux"], archs=["arm"]) +@skipIfDarwin +def test_loclist_frame_var(self): +self.build() +self.check_local_vars(self.launch(), check_expr=False) + +@skipUnlessDarwin +def test_loclist_expr(self): +self.build() +self.check_local_vars(self.launch(), check_expr=True) ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] fe6db8d - Revert "[lldb] Fix thread step until to not set breakpoint(s) on incorrect line numbers"
Author: Mikhail Goncharov Date: 2022-06-27T10:18:39+02:00 New Revision: fe6db8d03ff16a65f57af24d2cb04f489e2e9b0c URL: https://github.com/llvm/llvm-project/commit/fe6db8d03ff16a65f57af24d2cb04f489e2e9b0c DIFF: https://github.com/llvm/llvm-project/commit/fe6db8d03ff16a65f57af24d2cb04f489e2e9b0c.diff LOG: Revert "[lldb] Fix thread step until to not set breakpoint(s) on incorrect line numbers" This reverts commit a57b62deef37c7f2ec31bca3bf9173a6206bfb9b. lldb-aarch64-ubuntu buildbot test fails since https://lab.llvm.org/buildbot/#/builders/96/builds/25128 Added: Modified: lldb/source/Commands/CommandObjectThread.cpp lldb/test/API/functionalities/thread/step_until/TestStepUntil.py Removed: diff --git a/lldb/source/Commands/CommandObjectThread.cpp b/lldb/source/Commands/CommandObjectThread.cpp index 9396c3615497..037bbafdf894 100644 --- a/lldb/source/Commands/CommandObjectThread.cpp +++ b/lldb/source/Commands/CommandObjectThread.cpp @@ -1033,21 +1033,11 @@ class CommandObjectThreadUntil : public CommandObjectParsed { line_table->FindLineEntryByAddress(fun_end_addr, function_start, &end_ptr); -// Since not all source lines will contribute code, check if we are -// setting the breakpoint on the exact line number or the nearest -// subsequent line number and set breakpoints at all the line table -// entries of the chosen line number (exact or nearest subsequent). for (uint32_t line_number : line_numbers) { - LineEntry line_entry; - bool exact = false; uint32_t start_idx_ptr = index_ptr; - start_idx_ptr = sc.comp_unit->FindLineEntry( - index_ptr, line_number, nullptr, exact, &line_entry); - if (start_idx_ptr != UINT32_MAX) -line_number = line_entry.line; - exact = true; - start_idx_ptr = index_ptr; while (start_idx_ptr <= end_ptr) { +LineEntry line_entry; +const bool exact = false; start_idx_ptr = sc.comp_unit->FindLineEntry( start_idx_ptr, line_number, nullptr, exact, &line_entry); if (start_idx_ptr == UINT32_MAX) diff --git a/lldb/test/API/functionalities/thread/step_until/TestStepUntil.py b/lldb/test/API/functionalities/thread/step_until/TestStepUntil.py index ee25d1343735..0145b34f31de 100644 --- a/lldb/test/API/functionalities/thread/step_until/TestStepUntil.py +++ b/lldb/test/API/functionalities/thread/step_until/TestStepUntil.py @@ -19,7 +19,7 @@ def setUp(self): self.greater_than_two = line_number('main.c', 'Greater than or equal to 2.') self.back_out_in_main = line_number('main.c', 'Back out in main') -def common_setup (self, args): +def do_until (self, args, until_lines, expected_linenum): self.build() exe = self.getBuildArtifact("a.out") @@ -48,8 +48,7 @@ def common_setup (self, args): thread = threads[0] return thread -def do_until (self, args, until_lines, expected_linenum): -thread = self.common_setup(args) +thread = self.common_setup(None) cmd_interp = self.dbg.GetCommandInterpreter() ret_obj = lldb.SBCommandReturnObject() @@ -78,7 +77,7 @@ def test_targetting_two_hitting_second (self): self.do_until(None, [self.less_than_two, self.greater_than_two], self.less_than_two) def test_missing_one (self): -"""Test thread step until - targeting one line and missing it by stepping out to call site""" +"""Test thread step until - targeting one line and missing it.""" self.do_until(["foo", "bar", "baz"], [self.less_than_two], self.back_out_in_main) ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix release build (PR #68979)
https://github.com/metaflow created https://github.com/llvm/llvm-project/pull/68979 due to 64d78d8b3cd09dff32c97fbefa56bcfc8b676406 that used side effects in assert() >From d632aa31f3b5a5a98bc84b4523f06f82e9d7e8a8 Mon Sep 17 00:00:00 2001 From: Mikhail Goncharov Date: Fri, 13 Oct 2023 13:34:07 +0200 Subject: [PATCH] [lldb] fix release build due to 64d78d8b3cd09dff32c97fbefa56bcfc8b676406 that used side effects in assert() --- lldb/source/Commands/CommandObjectTarget.cpp | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp index 0c378b069086d03..7c20893db243c92 100644 --- a/lldb/source/Commands/CommandObjectTarget.cpp +++ b/lldb/source/Commands/CommandObjectTarget.cpp @@ -2682,12 +2682,14 @@ class CommandObjectTargetModulesDumpSeparateDebugInfoFiles llvm::StringRef type; llvm::StringRef symfile; StructuredData::Array *files; - assert(separate_debug_info_list->GetValueForKeyAsString("type", - type)); - assert(separate_debug_info_list->GetValueForKeyAsString("symfile", - symfile)); - assert(separate_debug_info_list->GetValueForKeyAsArray( - "separate-debug-info-files", files)); + if (!(separate_debug_info_list->GetValueForKeyAsString("type", + type) && +separate_debug_info_list->GetValueForKeyAsString("symfile", + symfile) && +separate_debug_info_list->GetValueForKeyAsArray( +"separate-debug-info-files", files))) { +assert(false); + } strm << "Symbol file: " << symfile; strm.EOL(); ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] fix release build (PR #68979)
https://github.com/metaflow closed https://github.com/llvm/llvm-project/pull/68979 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 193a9b3 - Revert "[lldb] Use translated full ftag values"
Author: Mikhail Goncharov Date: 2020-11-19T15:24:59+01:00 New Revision: 193a9b374e24d31b30095f2789f1994bc0c7b663 URL: https://github.com/llvm/llvm-project/commit/193a9b374e24d31b30095f2789f1994bc0c7b663 DIFF: https://github.com/llvm/llvm-project/commit/193a9b374e24d31b30095f2789f1994bc0c7b663.diff LOG: Revert "[lldb] Use translated full ftag values" This reverts commit c43abf043692babf9ad4f8bded2fdf6ab9c354b0. Test commands/register/register/register_command/TestRegisters.py fails. Buildbot http://lab.llvm.org:8011/#/changes/4149 Added: Modified: lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp lldb/source/Plugins/Process/Utility/CMakeLists.txt lldb/source/Plugins/Process/Utility/RegisterContext_x86.h lldb/test/Shell/Register/x86-64-fp-read.test lldb/test/Shell/Register/x86-64-fp-write.test lldb/test/Shell/Register/x86-fp-read.test lldb/test/Shell/Register/x86-fp-write.test lldb/unittests/Process/Utility/CMakeLists.txt Removed: lldb/source/Plugins/Process/Utility/RegisterContext_x86.cpp lldb/unittests/Process/Utility/RegisterContextTest.cpp diff --git a/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp b/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp index ea5400c55713..ea2494dabf27 100644 --- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp +++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp @@ -451,16 +451,10 @@ NativeRegisterContextFreeBSD_x86_64::ReadRegister(const RegisterInfo *reg_info, switch (set) { case GPRegSet: case FPRegSet: - case DBRegSet: { -void *data = GetOffsetRegSetData(set, reg_info->byte_offset); -FXSAVE *fpr = reinterpret_cast(m_fpr.data()); -if (data == &fpr->ftag) // ftag - reg_value.SetUInt16( - AbridgedToFullTagWord(fpr->ftag, fpr->fstat, fpr->stmm)); -else - reg_value.SetBytes(data, reg_info->byte_size, endian::InlHostByteOrder()); + case DBRegSet: +reg_value.SetBytes(GetOffsetRegSetData(set, reg_info->byte_offset), + reg_info->byte_size, endian::InlHostByteOrder()); break; - } case YMMRegSet: { llvm::Optional ymm_reg = GetYMMSplitReg(reg); if (!ymm_reg) { @@ -517,15 +511,10 @@ Status NativeRegisterContextFreeBSD_x86_64::WriteRegister( switch (set) { case GPRegSet: case FPRegSet: - case DBRegSet: { -void *data = GetOffsetRegSetData(set, reg_info->byte_offset); -FXSAVE *fpr = reinterpret_cast(m_fpr.data()); -if (data == &fpr->ftag) // ftag - fpr->ftag = FullToAbridgedTagWord(reg_value.GetAsUInt16()); -else - ::memcpy(data, reg_value.GetBytes(), reg_value.GetByteSize()); + case DBRegSet: +::memcpy(GetOffsetRegSetData(set, reg_info->byte_offset), + reg_value.GetBytes(), reg_value.GetByteSize()); break; - } case YMMRegSet: { llvm::Optional ymm_reg = GetYMMSplitReg(reg); if (!ymm_reg) { diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp index 6462441249c0..20cd5e3f62ff 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp @@ -530,13 +530,6 @@ NativeRegisterContextLinux_x86_64::ReadRegister(const RegisterInfo *reg_info, assert((reg_info->byte_offset - m_fctrl_offset_in_userarea) < sizeof(FPR)); uint8_t *src = (uint8_t *)m_xstate.get() + reg_info->byte_offset - m_fctrl_offset_in_userarea; - - if (src == reinterpret_cast(&m_xstate->fxsave.ftag)) { -reg_value.SetUInt16(AbridgedToFullTagWord( -m_xstate->fxsave.ftag, m_xstate->fxsave.fstat, m_xstate->fxsave.stmm)); -return error; - } - switch (reg_info->byte_size) { case 1: reg_value.SetUInt8(*(uint8_t *)src); @@ -646,28 +639,23 @@ Status NativeRegisterContextLinux_x86_64::WriteRegister( sizeof(FPR)); uint8_t *dst = (uint8_t *)m_xstate.get() + reg_info->byte_offset - m_fctrl_offset_in_userarea; - - if (dst == reinterpret_cast(&m_xstate->fxsave.ftag)) -m_xstate->fxsave.ftag = FullToAbridgedTagWord(reg_value.GetAsUInt16()); - else { -switch (reg_info->byte_size) { -case 1: - *(uint8_t *)dst = reg_value.GetAsUInt8(); - break; -case 2: - *(uint16_t *)dst = reg_value.GetAsUInt16(); - break; -case 4: - *(uint32_t *)dst = reg_value.GetAsUInt32(); - break; -case 8: - *(uint64_t *)dst = reg_va
[Lldb-commits] [lldb] [llvm] [DWARF] Fix DWARTTypePrinter unable to print qualified name for DW_TAG_typedef DIE (PR #117239)
metaflow wrote: FYI I have temporary reverted f06c187799d910fd3ac3e9106397e5eecff9f265 to keep things rolling https://github.com/llvm/llvm-project/pull/117239 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] 11ee216 - Revert " [lldb][dwarf] Compute fully qualified names on simplified template names with DWARFTypePrinter (#117071)"
Author: Mikhail Goncharov Date: 2024-11-22T13:49:37+01:00 New Revision: 11ee21671f7d4b0763eebfcb221c9598605e URL: https://github.com/llvm/llvm-project/commit/11ee21671f7d4b0763eebfcb221c9598605e DIFF: https://github.com/llvm/llvm-project/commit/11ee21671f7d4b0763eebfcb221c9598605e.diff LOG: Revert " [lldb][dwarf] Compute fully qualified names on simplified template names with DWARFTypePrinter (#117071)" This reverts commit f06c187799d910fd3ac3e9106397e5eecff9f265. Temporary revert: there is https://github.com/llvm/llvm-project/pull/117239 that is suppose to fix the issue. Reverting to keep things rolling. Added: Modified: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.h lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.h lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.h lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h lldb/unittests/SymbolFile/DWARF/DWARFDIETest.cpp llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h llvm/lib/DebugInfo/DWARF/DWARFDie.cpp Removed: lldb/test/Shell/SymbolFile/DWARF/x86/simplified-template-names.cpp diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index 37c1132c1c9f9a..d9bdeb560e1220 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -45,7 +45,6 @@ #include "clang/AST/Type.h" #include "clang/Basic/Specifiers.h" #include "llvm/ADT/StringExtras.h" -#include "llvm/DebugInfo/DWARF/DWARFTypePrinter.h" #include "llvm/Demangle/Demangle.h" #include @@ -827,11 +826,11 @@ std::string DWARFASTParserClang::GetDIEClassTemplateParams(DWARFDIE die) { if (llvm::StringRef(die.GetName()).contains("<")) return {}; - std::string name; - llvm::raw_string_ostream os(name); - llvm::DWARFTypePrinter type_printer(os); - type_printer.appendAndTerminateTemplateParameters(die); - return name; + TypeSystemClang::TemplateParameterInfos template_param_infos; + if (ParseTemplateParameterInfos(die, template_param_infos)) +return m_ast.PrintTemplateParams(template_param_infos); + + return {}; } void DWARFASTParserClang::MapDeclDIEToDefDIE( @@ -1619,9 +1618,9 @@ void DWARFASTParserClang::GetUniqueTypeNameAndDeclaration( case DW_TAG_structure_type: case DW_TAG_union_type: { if (const char *class_union_struct_name = parent_decl_ctx_die.GetName()) { +qualified_name.insert( +0, GetDIEClassTemplateParams(parent_decl_ctx_die)); qualified_name.insert(0, "::"); -qualified_name.insert(0, - GetDIEClassTemplateParams(parent_decl_ctx_die)); qualified_name.insert(0, class_union_struct_name); } parent_decl_ctx_die = parent_decl_ctx_die.GetParentDeclContextDIE(); @@ -1674,12 +1673,6 @@ DWARFASTParserClang::ParseStructureLikeDIE(const SymbolContext &sc, if (attrs.name) { GetUniqueTypeNameAndDeclaration(die, cu_language, unique_typename, unique_decl); -if (log) { - dwarf->GetObjectFile()->GetModule()->LogMessage( - log, "SymbolFileDWARF({0:p}) - {1:x16}: {2} has unique name: {3} ", - static_cast(this), die.GetID(), DW_TAG_value_to_name(tag), - unique_typename.AsCString()); -} if (UniqueDWARFASTType *unique_ast_entry_type = dwarf->GetUniqueDWARFASTTypeMap().Find( unique_typename, die, unique_decl, byte_size, diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.h index d92de658a49e89..235343d2271223 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.h @@ -24,11 +24,9 @@ class DWARFUnit; class DWARFDebugInfoEntry; class DWARFDeclContext; class SymbolFileDWARF; -class DWARFFormValue; class DWARFBaseDIE { public: - using DWARFFormValue = dwarf::DWARFFormValue; DWARFBaseDIE() = default; DWARFBaseDIE(DWARFUnit *cu, DWARFDebugInfoEntry *die) @@ -119,12 +117,6 @@ class DWARFBaseDIE { enum class Recurse : bool { no, yes }; DWARFAttributes GetAttributes(Recurse recurse = Recurse::yes) const; - // The following methods use LLVM naming convension in order to be are used by - // LLVM libraries. - dw_tag_t getTag() const { return Tag(); } - - const char *getShortName() const { return GetName(); } - protected: DWARFUnit *m_cu = nullptr; DW