(no commit message)
authorJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 14 Jan 2021 02:35:01 +0000 (03:35 +0100)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 14 Jan 2021 02:35:01 +0000 (03:35 +0100)
18 files changed:
lldb/source/Plugins/SymbolFile/DWARF/AppleDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/AppleDWARFIndex.h
lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
lldb/source/Plugins/SymbolFile/DWARF/DWARFIndex.h
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.h
lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h
lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h

index bd27e89..93b3b9a 100644 (file)
@@ -79,7 +79,7 @@ void AppleDWARFIndex::GetGlobalVariables(
 }
 
 void AppleDWARFIndex::GetGlobalVariables(
-    const DWARFCompileUnit &main_unit,
+    const DWARFUnit &main_unit,
     llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
         callback) {
   if (!m_apple_names_up)
index e20d3a3..12bb8ee 100644 (file)
@@ -41,7 +41,7 @@ public:
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) override;
   void GetGlobalVariables(
-      const DWARFCompileUnit &main_unit,
+      const DWARFUnit &main_unit,
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) override;
   void GetObjCMethods(
index e4b96f7..4726881 100644 (file)
@@ -119,8 +119,10 @@ DWARFDIE DWARFCompileUnit::LookupAddress(const dw_addr_t address) {
 DWARFCompileUnit *
 DWARFCompileUnit::GetDWARFCompileUnit(DWARFUnit *main_unit) {
   // if (GetUnitDIEOnly().Tag() != DW_TAG_partial_unit)
-  main_unit = reinterpret_cast<DWARFCompileUnit *>(this);
-  return DWARFUnit::GetDWARFCompileUnit(main_unit);
+  DWARFCompileUnit *cu = reinterpret_cast<DWARFCompileUnit *>(this);
+  cu = &cu->GetNonSkeletonUnit();
+  return cu;
+//  return DWARFUnit::GetDWARFCompileUnit(main_unit);
 }
 
 CompileUnit *DWARFCompileUnit::GetCompUnit() {
index ca07cd4..b46a382 100644 (file)
@@ -202,7 +202,7 @@ DWARFDebugInfo::GetDIEForDIEOffset(DIERef::Section section,
 //
 // Get the DIE (Debug Information Entry) with the specified offset.
 DWARFDIE
-DWARFDebugInfo::GetDIE(const DIERef &die_ref, DWARFCompileUnit **main_unit_return) {
+DWARFDebugInfo::GetDIE(const DIERef &die_ref, DWARFUnit **main_unit_return) {
   DWARFUnit *cu = GetUnit(die_ref);
   if (cu) {
     DWARFCompileUnit *main_cu = GetMainUnit(die_ref);
index 18b3ec4..8b5c434 100644 (file)
@@ -46,7 +46,7 @@ public:
   bool ContainsTypeUnits();
   DWARFDIE GetDIEForDIEOffset(DIERef::Section section,
                               dw_offset_t die_offset);
-  DWARFDIE GetDIE(const DIERef &die_ref, DWARFCompileUnit **main_unit_return = nullptr);
+  DWARFDIE GetDIE(const DIERef &die_ref, DWARFUnit **main_unit_return = nullptr);
 
   enum {
     eDumpFlag_Verbose = (1 << 0),  // Verbose dumping
index f24eeda..024e041 100644 (file)
@@ -37,7 +37,7 @@ public:
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) = 0;
   virtual void GetGlobalVariables(
-      const DWARFCompileUnit &main_unit,
+      const DWARFUnit &main_unit,
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) = 0;
   virtual void GetObjCMethods(
index 6021d1b..0c7042a 100644 (file)
@@ -964,12 +964,14 @@ DWARFUnit::FindRnglistFromIndex(uint32_t index) {
                                  "missing or invalid range list table");
 }
 
+#if 0
 DWARFCompileUnit *
 DWARFUnit::GetDWARFCompileUnit(DWARFUnit *main_unit) {
   lldbassert(main_unit);
   main_unit = &main_unit->GetNonSkeletonUnit();
   return main_unit;
 }
+#endif
 
 DWARFUnit *DWARFUnit::GetMainDWARFUnit(DWARFUnit *main_unit) {
   main_unit = GetDWARFCompileUnit(main_unit);
index 6f3a021..402f569 100644 (file)
@@ -261,7 +261,8 @@ public:
 
   lldb_private::DWARFDataExtractor GetLocationData() const;
 
-  virtual DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit);
+//  virtual DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit);
+  virtual DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit)=0;
   DWARFUnit *GetMainDWARFUnit(DWARFUnit *main_unit);
 
 protected:
index 4f211ed..1732b40 100644 (file)
@@ -131,7 +131,7 @@ void DebugNamesDWARFIndex::GetGlobalVariables(
 }
 
 void DebugNamesDWARFIndex::GetGlobalVariables(
-    const DWARFCompileUnit &main_unit,
+    const DWARFUnit &main_unit,
     llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
         callback) {
   uint64_t cu_offset = main_unit.GetOffset();
index cfa6f15..5ac29bc 100644 (file)
@@ -34,7 +34,7 @@ public:
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) override;
   void GetGlobalVariables(
-      const DWARFCompileUnit &main_unit,
+      const DWARFUnit &main_unit,
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) override;
   void GetObjCMethods(
index 35e461d..e66ae24 100644 (file)
@@ -348,7 +348,7 @@ void ManualDWARFIndex::GetGlobalVariables(
 }
 
 void ManualDWARFIndex::GetGlobalVariables(
-    const DWARFCompileUnit &main_unit,
+    const DWARFUnit &main_unit,
     llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
         callback) {
   Index();
index af95c9b..c1a7ea4 100644 (file)
@@ -35,7 +35,7 @@ public:
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) override;
   void GetGlobalVariables(
-      const DWARFCompileUnit &main_unit,
+      const DWARFUnit &main_unit,
       llvm::function_ref<bool(DWARFUnit *main_unit, DWARFDIE die)>
           callback) override;
   void GetObjCMethods(
index bb2e046..33c58df 100644 (file)
@@ -45,7 +45,7 @@ bool NameToDIE::Find(const RegularExpression &regex,
 }
 
 void NameToDIE::FindAllEntriesForUnit(
-    const DWARFCompileUnit &unit,
+    const DWARFUnit &unit,
     llvm::function_ref<bool(DIERef ref)> callback) const {
   const uint32_t size = m_map.GetSize();
   for (uint32_t i = 0; i < size; ++i) {
index e3426c3..5aa841c 100644 (file)
@@ -16,7 +16,7 @@
 #include "lldb/Core/dwarf.h"
 #include "lldb/lldb-defines.h"
 
-class DWARFCompileUnit;
+class DWARFUnit;
 
 class NameToDIE {
 public:
@@ -39,7 +39,7 @@ public:
             llvm::function_ref<bool(DIERef ref)> callback) const;
 
   void
-  FindAllEntriesForUnit(const DWARFCompileUnit &unit,
+  FindAllEntriesForUnit(const DWARFUnit &unit,
                         llvm::function_ref<bool(DIERef ref)> callback) const;
 
   void
index 3f2ba3d..eab936b 100644 (file)
@@ -1308,7 +1308,7 @@ user_id_t SymbolFileDWARF::GetUID(DWARFUnit *main_unit, DIERef ref) {
          lldb::user_id_t(ref.section() == DIERef::Section::DebugTypes) << 63;
 
 #ifndef NDEBUG
-  DWARFCompileUnit *main_unit_check;
+  DWARFUnit *main_unit_check;
   DWARFDIE dwarfdie_check2 = GetDIEUnlocked(retval, &main_unit_check);
   lldbassert(dwarfdie_check2 == dwarfdie_check);
 #endif
@@ -1357,7 +1357,7 @@ SymbolFileDWARF::DecodeUID(lldb::user_id_t uid) {
 
 DWARFDIE
 SymbolFileDWARF::GetDIEUnlocked(lldb::user_id_t uid,
-                                DWARFCompileUnit **main_unit_return) {
+                                DWARFUnit **main_unit_return) {
   llvm::Optional<DecodedUID> decoded = DecodeUIDUnlocked(uid);
 
   if (decoded) {
@@ -1607,9 +1607,10 @@ bool SymbolFileDWARF::GetFunction(DWARFUnit *main_unit,
     return false;
 
   // Check if the symbol vendor already knows about this compile unit?
-  if (!main_unit)
+  DWARFCompileUnit *main_cu = llvm::dyn_cast_or_null<DWARFCompileUnit>(main_unit);
+  if (!main_cu)
     return false;
-  sc.comp_unit = main_unit->GetCompUnit();
+  sc.comp_unit = main_cu->GetCompUnit();
 
   sc.function = sc.comp_unit->FindFunctionByUID(die.GetID(main_unit)).get();
   if (sc.function == nullptr)
@@ -1631,7 +1632,7 @@ lldb::ModuleSP SymbolFileDWARF::GetExternalModule(ConstString name) {
 }
 
 DWARFDIE
-SymbolFileDWARF::GetDIE(const DIERef &die_ref, DWARFCompileUnit **main_unit_return) {
+SymbolFileDWARF::GetDIE(const DIERef &die_ref, DWARFUnit **main_unit_return) {
   if (die_ref.dwo_num()) {
     SymbolFileDWARF *dwarf = *die_ref.dwo_num() == 0x3fffffff
                                  ? m_dwp_symfile.get()
@@ -2191,9 +2192,10 @@ void SymbolFileDWARF::FindGlobalVariables(
         if (die.Tag() != DW_TAG_variable)
           return true;
 
-        if (!main_unit)
-          return true;
-        sc.comp_unit = main_unit->GetCompUnit();
+       DWARFCompileUnit *main_cu = llvm::dyn_cast_or_null<DWARFCompileUnit>(main_unit);
+       if (!main_cu)
+         return false;
+       sc.comp_unit = main_cu->GetCompUnit();
 
         if (parent_decl_ctx) {
           if (DWARFASTParser *dwarf_ast = GetDWARFParser(*die.GetMainDWARFUnit(main_unit))) {
@@ -2254,9 +2256,10 @@ void SymbolFileDWARF::FindGlobalVariables(const RegularExpression &regex,
           sc.module_sp = m_objfile_sp->GetModule();
         assert(sc.module_sp);
 
-        if (!main_unit)
-          return true;
-        sc.comp_unit = main_unit->GetCompUnit();
+       DWARFCompileUnit *main_cu = llvm::dyn_cast_or_null<DWARFCompileUnit>(main_unit);
+       if (!main_cu)
+         return false;
+       sc.comp_unit = main_cu->GetCompUnit();
 
         ParseVariables(sc, die, LLDB_INVALID_ADDRESS, false, false, &variables);
 
@@ -2375,7 +2378,7 @@ void SymbolFileDWARF::FindFunctions(ConstString name,
 
   const uint32_t original_size = sc_list.GetSize();
 
-  llvm::DenseSet<std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>>
+  llvm::DenseSet<std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>>
       resolved_dies;
 
   m_index->GetFunctions(
@@ -2415,7 +2418,7 @@ void SymbolFileDWARF::FindFunctions(const RegularExpression &regex,
         regex.GetText().str().c_str());
   }
 
-  llvm::DenseSet<std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>>
+  llvm::DenseSet<std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>>
       resolved_dies;
   m_index->GetFunctions(regex, [&](DWARFUnit *main_unit, DWARFDIE die) {
     if (resolved_dies.insert(std::make_pair(main_unit, die.GetDIE())).second)
@@ -2619,8 +2622,9 @@ TypeSP SymbolFileDWARF::GetTypeForDIE(DWARFUnit *main_unit,
     Type *type_ptr = GetDIEToType().lookup(die.MainCUtoDIEPair(main_unit));
     if (type_ptr == nullptr) {
       SymbolContextScope *scope;
-      if (main_unit)
-        scope = main_unit->GetCompUnit();
+      DWARFCompileUnit *main_cu = llvm::dyn_cast_or_null<DWARFCompileUnit>(main_unit);
+      if (main_cu)
+        scope = main_cu->GetCompUnit();
       else
         scope = GetObjectFile()->GetModule().get();
       assert(scope);
@@ -3153,7 +3157,7 @@ size_t SymbolFileDWARF::ParseVariablesForContext(const SymbolContext &sc) {
 
         m_index->GetGlobalVariables(
             *main_unit,
-            [&](DWARFCompileUnit *main_unit_check, DWARFDIE die) {
+            [&](DWARFUnit *main_unit_check, DWARFDIE die) {
               lldbassert(main_unit_check == main_unit || main_unit_check == nullptr);
               VariableSP var_sp(
                   ParseVariableDIE(sc, die, LLDB_INVALID_ADDRESS));
index e6e2c1a..6545ab6 100644 (file)
@@ -262,7 +262,7 @@ public:
       return m_external_type_modules;
   }
 
-  virtual DWARFDIE GetDIE(const DIERef &die_ref, DWARFCompileUnit **main_unit_return = nullptr);
+  virtual DWARFDIE GetDIE(const DIERef &die_ref, DWARFUnit **main_unit_return = nullptr);
 
   DWARFDIE GetDIE(lldb::user_id_t uid);
 
index a16a44d..6ef9804 100644 (file)
@@ -125,7 +125,7 @@ SymbolFileDWARFDwo::GetTypeSystemForLanguage(LanguageType language) {
 }
 
 DWARFDIE
-SymbolFileDWARFDwo::GetDIE(const DIERef &die_ref, DWARFCompileUnit **main_unit_return) {
+SymbolFileDWARFDwo::GetDIE(const DIERef &die_ref, DWARFUnit **main_unit_return) {
   if (die_ref.dwo_num() == GetDwoNum())
     return DebugInfo().GetDIE(die_ref, main_unit_return);
   return GetBaseSymbolFile().GetDIE(die_ref, main_unit_return);
index 86af247..552b09a 100644 (file)
@@ -40,7 +40,7 @@ public:
   GetTypeSystemForLanguage(lldb::LanguageType language) override;
 
   DWARFDIE
-  GetDIE(const DIERef &die_ref, DWARFCompileUnit **main_unit_return = nullptr) override;
+  GetDIE(const DIERef &die_ref, DWARFUnit **main_unit_return = nullptr) override;
 
   llvm::Optional<uint32_t> GetDwoNum() override { return GetID() >> 32; }