[Lldb-commits] [lldb] r363381 - Have DWARFUnit store a *reference* to SymbolFileDWARF

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 14 06:01:16 PDT 2019


Author: labath
Date: Fri Jun 14 06:01:16 2019
New Revision: 363381

URL: http://llvm.org/viewvc/llvm-project?rev=363381&view=rev
Log:
Have DWARFUnit store a *reference* to SymbolFileDWARF

Previously it was storing a *pointer*, which left open the possibility
of this pointer being null. We never made use of that possibility (it
does not make sense), and most of the code was already assuming that.
However, there were a couple of null-checks scattered around the code.

This patch replaces the reference with a pointer, making the
non-null-ness explicit, and removes the remaining null-checks.

Modified:
    lldb/trunk/source/Expression/DWARFExpression.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFTypeUnit.h
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
    lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h

Modified: lldb/trunk/source/Expression/DWARFExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/DWARFExpression.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Expression/DWARFExpression.cpp (original)
+++ lldb/trunk/source/Expression/DWARFExpression.cpp Fri Jun 14 06:01:16 2019
@@ -47,7 +47,7 @@ ReadAddressFromDebugAddrSection(const DW
   dw_offset_t addr_base = dwarf_cu->GetAddrBase();
   lldb::offset_t offset = addr_base + index * index_size;
   return dwarf_cu->GetSymbolFileDWARF()
-      ->GetDWARFContext()
+      .GetDWARFContext()
       .getOrLoadAddrData()
       .GetMaxU64(&offset, index_size);
 }
@@ -2750,7 +2750,7 @@ bool DWARFExpression::AddressRangeForLoc
     return false;
 
   DWARFExpression::LocationListFormat format =
-      dwarf_cu->GetSymbolFileDWARF()->GetLocationListFormat();
+      dwarf_cu->GetSymbolFileDWARF().GetLocationListFormat();
   switch (format) {
   case NonLocationList:
     return false;

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp Fri Jun 14 06:01:16 2019
@@ -155,8 +155,8 @@ TypeSP DWARFASTParserClang::ParseTypeFro
 
     // Since this this type is defined in one of the Clang modules imported by
     // this symbol file, search all of them.
-    auto *sym_file = die.GetCU()->GetSymbolFileDWARF();
-    for (const auto &name_module : sym_file->getExternalTypeModules()) {
+    auto &sym_file = die.GetCU()->GetSymbolFileDWARF();
+    for (const auto &name_module : sym_file.getExternalTypeModules()) {
       if (!name_module.second)
         continue;
       SymbolVendor *sym_vendor = name_module.second->GetSymbolVendor();

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp Fri Jun 14 06:01:16 2019
@@ -99,7 +99,7 @@ dw_offset_t DWARFBaseDIE::GetOffset() co
 
 SymbolFileDWARF *DWARFBaseDIE::GetDWARF() const {
   if (m_cu)
-    return m_cu->GetSymbolFileDWARF();
+    return &m_cu->GetSymbolFileDWARF();
   else
     return nullptr;
 }

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp Fri Jun 14 06:01:16 2019
@@ -70,10 +70,10 @@ void DWARFCompileUnit::BuildAddressRange
     // We got nothing from the functions, maybe we have a line tables only
     // situation. Check the line tables and build the arange table from this.
     SymbolContext sc;
-    sc.comp_unit = m_dwarf->GetCompUnitForDWARFCompUnit(*this);
+    sc.comp_unit = m_dwarf.GetCompUnitForDWARFCompUnit(*this);
     if (sc.comp_unit) {
       SymbolFileDWARFDebugMap *debug_map_sym_file =
-          m_dwarf->GetDebugMapSymfile();
+          m_dwarf.GetDebugMapSymfile();
       if (debug_map_sym_file == nullptr) {
         if (LineTable *line_table = sc.comp_unit->GetLineTable()) {
           LineTable::FileAddressRanges file_ranges;
@@ -88,7 +88,7 @@ void DWARFCompileUnit::BuildAddressRange
           }
         }
       } else
-        debug_map_sym_file->AddOSOARanges(m_dwarf, debug_aranges);
+        debug_map_sym_file->AddOSOARanges(&m_dwarf, debug_aranges);
     }
   }
 
@@ -96,7 +96,7 @@ void DWARFCompileUnit::BuildAddressRange
     // We got nothing from the functions, maybe we have a line tables only
     // situation. Check the line tables and build the arange table from this.
     SymbolContext sc;
-    sc.comp_unit = m_dwarf->GetCompUnitForDWARFCompUnit(*this);
+    sc.comp_unit = m_dwarf.GetCompUnitForDWARFCompUnit(*this);
     if (sc.comp_unit) {
       if (LineTable *line_table = sc.comp_unit->GetLineTable()) {
         LineTable::FileAddressRanges file_ranges;

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h Fri Jun 14 06:01:16 2019
@@ -21,7 +21,7 @@ public:
   static bool classof(const DWARFUnit *unit) { return !unit->IsTypeUnit(); }
 
 private:
-  DWARFCompileUnit(SymbolFileDWARF *dwarf, lldb::user_id_t uid,
+  DWARFCompileUnit(SymbolFileDWARF &dwarf, lldb::user_id_t uid,
                    const DWARFUnitHeader &header,
                    const DWARFAbbreviationDeclarationSet &abbrevs,
                    DIERef::Section section)

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp Fri Jun 14 06:01:16 2019
@@ -30,21 +30,14 @@ using namespace lldb_private;
 using namespace std;
 
 // Constructor
-DWARFDebugInfo::DWARFDebugInfo(lldb_private::DWARFContext &context)
-    : m_dwarf2Data(nullptr), m_context(context), m_units(), m_cu_aranges_up() {}
-
-// SetDwarfData
-void DWARFDebugInfo::SetDwarfData(SymbolFileDWARF *dwarf2Data) {
-  m_dwarf2Data = dwarf2Data;
-  m_units.clear();
-}
+DWARFDebugInfo::DWARFDebugInfo(SymbolFileDWARF &dwarf,
+                               lldb_private::DWARFContext &context)
+    : m_dwarf(dwarf), m_context(context), m_units(), m_cu_aranges_up() {}
 
 llvm::Expected<DWARFDebugAranges &> DWARFDebugInfo::GetCompileUnitAranges() {
   if (m_cu_aranges_up)
     return *m_cu_aranges_up;
 
-  assert(m_dwarf2Data);
-
   m_cu_aranges_up = llvm::make_unique<DWARFDebugAranges>();
   const DWARFDataExtractor &debug_aranges_data =
       m_context.getOrLoadArangesData();
@@ -81,8 +74,8 @@ void DWARFDebugInfo::ParseUnitsFor(DIERe
                                 : m_context.getOrLoadDebugInfoData();
   lldb::offset_t offset = 0;
   while (data.ValidOffset(offset)) {
-    llvm::Expected<DWARFUnitSP> unit_sp = DWARFUnit::extract(
-        m_dwarf2Data, m_units.size(), data, section, &offset);
+    llvm::Expected<DWARFUnitSP> unit_sp =
+        DWARFUnit::extract(m_dwarf, m_units.size(), data, section, &offset);
 
     if (!unit_sp) {
       // FIXME: Propagate this error up.
@@ -105,8 +98,6 @@ void DWARFDebugInfo::ParseUnitsFor(DIERe
 void DWARFDebugInfo::ParseUnitHeadersIfNeeded() {
   if (!m_units.empty())
     return;
-  if (!m_dwarf2Data)
-    return;
 
   ParseUnitsFor(DIERef::Section::DebugInfo);
   ParseUnitsFor(DIERef::Section::DebugTypes);

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h Fri Jun 14 06:01:16 2019
@@ -37,8 +37,8 @@ public:
                                   const dw_offset_t next_offset,
                                   const uint32_t depth, void *userData);
 
-  explicit DWARFDebugInfo(lldb_private::DWARFContext &context);
-  void SetDwarfData(SymbolFileDWARF *dwarf2Data);
+  explicit DWARFDebugInfo(SymbolFileDWARF &dwarf,
+                          lldb_private::DWARFContext &context);
 
   size_t GetNumUnits();
   DWARFUnit *GetUnitAtIndex(lldb::user_id_t idx);
@@ -65,8 +65,7 @@ public:
 protected:
   typedef std::vector<DWARFUnitSP> UnitColl;
 
-  // Member variables
-  SymbolFileDWARF *m_dwarf2Data;
+  SymbolFileDWARF &m_dwarf;
   lldb_private::DWARFContext &m_context;
   UnitColl m_units;
   std::unique_ptr<DWARFDebugAranges>

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp Fri Jun 14 06:01:16 2019
@@ -52,7 +52,7 @@ bool DWARFDebugInfoEntry::Extract(const
     lldb::offset_t offset = *offset_ptr;
     auto *abbrevDecl = GetAbbreviationDeclarationPtr(cu);
     if (abbrevDecl == nullptr) {
-      cu->GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError(
+      cu->GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError(
           "{0x%8.8x}: invalid abbreviation code %u, please file a bug and "
           "attach the file at the start of this error message",
           m_offset, (unsigned)abbr_idx);
@@ -208,7 +208,7 @@ static DWARFRangeList GetRangesOrReportE
           : unit.FindRnglistFromOffset(value.Unsigned());
   if (expected_ranges)
     return std::move(*expected_ranges);
-  unit.GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError(
+  unit.GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError(
       "{0x%8.8x}: DIE has DW_AT_ranges(0x%" PRIx64 ") attribute, but "
       "range extraction failed (%s), please file a bug "
       "and attach the file at the start of this error message",
@@ -239,8 +239,8 @@ bool DWARFDebugInfoEntry::GetDIENamesAnd
 
   auto abbrevDecl = GetAbbreviationDeclarationPtr(cu);
 
-  SymbolFileDWARF *dwarf2Data = cu->GetSymbolFileDWARF();
-  lldb::ModuleSP module = dwarf2Data->GetObjectFile()->GetModule();
+  SymbolFileDWARF &dwarf = cu->GetSymbolFileDWARF();
+  lldb::ModuleSP module = dwarf.GetObjectFile()->GetModule();
 
   if (abbrevDecl) {
     const DWARFDataExtractor &data = cu->GetData();
@@ -348,8 +348,7 @@ bool DWARFDebugInfoEntry::GetDIENamesAnd
               *frame_base = DWARFExpression(module, data, cu,
                                             block_offset, block_length);
             } else {
-              const DWARFDataExtractor &debug_loc_data =
-                  dwarf2Data->DebugLocData();
+              const DWARFDataExtractor &debug_loc_data = dwarf.DebugLocData();
               const dw_offset_t debug_loc_offset = form_value.Unsigned();
 
               size_t loc_list_length = DWARFExpression::LocationListSize(
@@ -395,7 +394,7 @@ bool DWARFDebugInfoEntry::GetDIENamesAnd
   if (ranges.IsEmpty() || name == nullptr || mangled == nullptr) {
     for (const DIERef &die_ref : die_refs) {
       if (die_ref.die_offset != DW_INVALID_OFFSET) {
-        DWARFDIE die = dwarf2Data->GetDIE(die_ref);
+        DWARFDIE die = dwarf.GetDIE(die_ref);
         if (die)
           die.GetDIE()->GetDIENamesAndRanges(die.GetCU(), name, mangled, ranges,
                                              decl_file, decl_line, decl_column,
@@ -489,7 +488,7 @@ void DWARFDebugInfoEntry::DumpAttribute(
 
   s.PutCString("( ");
 
-  SymbolFileDWARF *dwarf2Data = cu->GetSymbolFileDWARF();
+  SymbolFileDWARF &dwarf = cu->GetSymbolFileDWARF();
 
   // Check to see if we have any special attribute formatters
   switch (attr) {
@@ -520,10 +519,8 @@ void DWARFDebugInfoEntry::DumpAttribute(
       // We have a location list offset as the value that is the offset into
       // the .debug_loc section that describes the value over it's lifetime
       uint64_t debug_loc_offset = form_value.Unsigned();
-      if (dwarf2Data) {
-        DWARFExpression::PrintDWARFLocationList(
-            s, cu, dwarf2Data->DebugLocData(), debug_loc_offset);
-      }
+      DWARFExpression::PrintDWARFLocationList(s, cu, dwarf.DebugLocData(),
+                                              debug_loc_offset);
     }
   } break;
 

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp Fri Jun 14 06:01:16 2019
@@ -205,7 +205,7 @@ static uint64_t ReadAddressFromDebugAddr
   dw_offset_t addr_base = cu->GetAddrBase();
   lldb::offset_t offset = addr_base + index * index_size;
   return cu->GetSymbolFileDWARF()
-      ->GetDWARFContext()
+      .GetDWARFContext()
       .getOrLoadAddrData()
       .GetMaxU64(&offset, index_size);
 }

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp Fri Jun 14 06:01:16 2019
@@ -451,26 +451,20 @@ void DWARFFormValue::Dump(Stream &s) con
 }
 
 const char *DWARFFormValue::AsCString() const {
-  SymbolFileDWARF *symbol_file = m_unit->GetSymbolFileDWARF();
+  SymbolFileDWARF &symbol_file = m_unit->GetSymbolFileDWARF();
 
   if (m_form == DW_FORM_string) {
     return m_value.value.cstr;
   } else if (m_form == DW_FORM_strp) {
-    if (!symbol_file)
-      return nullptr;
-
-    return symbol_file->GetDWARFContext().getOrLoadStrData().PeekCStr(
+    return symbol_file.GetDWARFContext().getOrLoadStrData().PeekCStr(
         m_value.value.uval);
   } else if (m_form == DW_FORM_GNU_str_index) {
-    if (!symbol_file)
-      return nullptr;
-
     uint32_t index_size = 4;
     lldb::offset_t offset = m_value.value.uval * index_size;
     dw_offset_t str_offset =
-        symbol_file->GetDWARFContext().getOrLoadStrOffsetsData().GetMaxU64(
+        symbol_file.GetDWARFContext().getOrLoadStrOffsetsData().GetMaxU64(
             &offset, index_size);
-    return symbol_file->GetDWARFContext().getOrLoadStrData().PeekCStr(
+    return symbol_file.GetDWARFContext().getOrLoadStrData().PeekCStr(
         str_offset);
   }
 
@@ -479,28 +473,24 @@ const char *DWARFFormValue::AsCString()
       m_form == DW_FORM_strx4) {
 
     // The same code as above.
-    if (!symbol_file)
-      return nullptr;
-
     uint32_t indexSize = 4;
     lldb::offset_t offset =
         m_unit->GetStrOffsetsBase() + m_value.value.uval * indexSize;
     dw_offset_t strOffset =
-        symbol_file->GetDWARFContext().getOrLoadStrOffsetsData().GetMaxU64(
+        symbol_file.GetDWARFContext().getOrLoadStrOffsetsData().GetMaxU64(
             &offset, indexSize);
-    return symbol_file->GetDWARFContext().getOrLoadStrData().PeekCStr(
-        strOffset);
+    return symbol_file.GetDWARFContext().getOrLoadStrData().PeekCStr(strOffset);
   }
 
   if (m_form == DW_FORM_line_strp)
-    return symbol_file->GetDWARFContext().getOrLoadLineStrData().PeekCStr(
+    return symbol_file.GetDWARFContext().getOrLoadLineStrData().PeekCStr(
         m_value.value.uval);
 
   return nullptr;
 }
 
 dw_addr_t DWARFFormValue::Address() const {
-  SymbolFileDWARF *symbol_file = m_unit->GetSymbolFileDWARF();
+  SymbolFileDWARF &symbol_file = m_unit->GetSymbolFileDWARF();
 
   if (m_form == DW_FORM_addr)
     return Unsigned();
@@ -510,13 +500,10 @@ dw_addr_t DWARFFormValue::Address() cons
          m_form == DW_FORM_addrx1 || m_form == DW_FORM_addrx2 ||
          m_form == DW_FORM_addrx3 || m_form == DW_FORM_addrx4);
 
-  if (!symbol_file)
-    return 0;
-
   uint32_t index_size = m_unit->GetAddressByteSize();
   dw_offset_t addr_base = m_unit->GetAddrBase();
   lldb::offset_t offset = addr_base + m_value.value.uval * index_size;
-  return symbol_file->GetDWARFContext().getOrLoadAddrData().GetMaxU64(
+  return symbol_file.GetDWARFContext().getOrLoadAddrData().GetMaxU64(
       &offset, index_size);
 }
 
@@ -532,7 +519,7 @@ DWARFDIE DWARFFormValue::Reference() con
                     // unit relative or we will get this wrong
     value += m_unit->GetOffset();
     if (!m_unit->ContainsDIEOffset(value)) {
-      m_unit->GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError(
+      m_unit->GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError(
           "DW_FORM_ref* DIE reference 0x%" PRIx64 " is outside of its CU",
           value);
       return {};
@@ -541,10 +528,10 @@ DWARFDIE DWARFFormValue::Reference() con
 
   case DW_FORM_ref_addr: {
     DWARFUnit *ref_cu =
-        m_unit->GetSymbolFileDWARF()->DebugInfo()->GetUnitContainingDIEOffset(
+        m_unit->GetSymbolFileDWARF().DebugInfo()->GetUnitContainingDIEOffset(
             DIERef::Section::DebugInfo, value);
     if (!ref_cu) {
-      m_unit->GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError(
+      m_unit->GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError(
           "DW_FORM_ref_addr DIE reference 0x%" PRIx64 " has no matching CU",
           value);
       return {};
@@ -554,7 +541,7 @@ DWARFDIE DWARFFormValue::Reference() con
 
   case DW_FORM_ref_sig8: {
     DWARFTypeUnit *tu =
-        m_unit->GetSymbolFileDWARF()->DebugInfo()->GetTypeUnitForHash(value);
+        m_unit->GetSymbolFileDWARF().DebugInfo()->GetTypeUnitForHash(value);
     if (!tu)
       return {};
     return tu->GetDIE(tu->GetTypeOffset());

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFTypeUnit.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFTypeUnit.h?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFTypeUnit.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFTypeUnit.h Fri Jun 14 06:01:16 2019
@@ -25,7 +25,7 @@ public:
   static bool classof(const DWARFUnit *unit) { return unit->IsTypeUnit(); }
 
 private:
-  DWARFTypeUnit(SymbolFileDWARF *dwarf, lldb::user_id_t uid,
+  DWARFTypeUnit(SymbolFileDWARF &dwarf, lldb::user_id_t uid,
                 const DWARFUnitHeader &header,
                 const DWARFAbbreviationDeclarationSet &abbrevs,
                 DIERef::Section section)

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp Fri Jun 14 06:01:16 2019
@@ -29,7 +29,7 @@ using namespace std;
 
 extern int g_verbose;
 
-DWARFUnit::DWARFUnit(SymbolFileDWARF *dwarf, lldb::user_id_t uid,
+DWARFUnit::DWARFUnit(SymbolFileDWARF &dwarf, lldb::user_id_t uid,
                      const DWARFUnitHeader &header,
                      const DWARFAbbreviationDeclarationSet &abbrevs,
                      DIERef::Section section)
@@ -90,7 +90,7 @@ void DWARFUnit::ExtractDIEsIfNeeded() {
 // and no ExtractDIEsIfNeeded() has been executed during this ScopedExtractDIEs
 // lifetime.
 DWARFUnit::ScopedExtractDIEs DWARFUnit::ExtractDIEsScoped() {
-  ScopedExtractDIEs scoped(this);
+  ScopedExtractDIEs scoped(*this);
 
   {
     llvm::sys::ScopedReader lock(m_die_array_mutex);
@@ -109,8 +109,7 @@ DWARFUnit::ScopedExtractDIEs DWARFUnit::
   return scoped;
 }
 
-DWARFUnit::ScopedExtractDIEs::ScopedExtractDIEs(DWARFUnit *cu) : m_cu(cu) {
-  lldbassert(m_cu);
+DWARFUnit::ScopedExtractDIEs::ScopedExtractDIEs(DWARFUnit &cu) : m_cu(&cu) {
   m_cu->m_die_array_scoped_mutex.lock_shared();
 }
 
@@ -266,7 +265,7 @@ static void SetDwoStrOffsetsBase(DWARFUn
   lldb::offset_t baseOffset = 0;
 
   const DWARFDataExtractor &strOffsets =
-      dwo_cu->GetSymbolFileDWARF()->GetDWARFContext().getOrLoadStrOffsetsData();
+      dwo_cu->GetSymbolFileDWARF().GetDWARFContext().getOrLoadStrOffsetsData();
   uint64_t length = strOffsets.GetU32(&baseOffset);
   if (length == 0xffffffff)
     length = strOffsets.GetU64(&baseOffset);
@@ -326,7 +325,7 @@ void DWARFUnit::AddUnitDIE(const DWARFDe
   }
 
   std::unique_ptr<SymbolFileDWARFDwo> dwo_symbol_file =
-      m_dwarf->GetDwoSymbolFileForCompileUnit(*this, cu_die);
+      m_dwarf.GetDwoSymbolFileForCompileUnit(*this, cu_die);
   if (!dwo_symbol_file)
     return;
 
@@ -438,14 +437,11 @@ void DWARFUnit::ClearDIEsRWLocked() {
 }
 
 lldb::ByteOrder DWARFUnit::GetByteOrder() const {
-  return m_dwarf->GetObjectFile()->GetByteOrder();
+  return m_dwarf.GetObjectFile()->GetByteOrder();
 }
 
 TypeSystem *DWARFUnit::GetTypeSystem() {
-  if (m_dwarf)
-    return m_dwarf->GetTypeSystemForLanguage(GetLanguageType());
-  else
-    return nullptr;
+  return m_dwarf.GetTypeSystemForLanguage(GetLanguageType());
 }
 
 void DWARFUnit::SetBaseAddress(dw_addr_t base_addr) { m_base_addr = base_addr; }
@@ -477,7 +473,7 @@ DWARFUnit::GetDIE(dw_offset_t die_offset
           return DWARFDIE(this, &(*pos));
       }
     } else
-      GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError(
+      GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError(
           "GetDIE for DIE 0x%" PRIx32 " is outside of its CU 0x%" PRIx32,
           die_offset, GetOffset());
   }
@@ -520,8 +516,6 @@ bool DWARFUnit::Supports_unnamed_objc_bi
                // info
 }
 
-SymbolFileDWARF *DWARFUnit::GetSymbolFileDWARF() const { return m_dwarf; }
-
 void DWARFUnit::ParseProducerInfo() {
   m_producer_version_major = UINT32_MAX;
   m_producer_version_minor = UINT32_MAX;
@@ -645,7 +639,7 @@ const FileSpec &DWARFUnit::GetAbsolutePa
 }
 
 FileSpec DWARFUnit::GetFile(size_t file_idx) {
-  return m_dwarf->GetFile(*this, file_idx);
+  return m_dwarf.GetFile(*this, file_idx);
 }
 
 // DWARF2/3 suggests the form hostname:pathname for compilation directory.
@@ -796,9 +790,9 @@ DWARFUnitHeader::extract(const DWARFData
 }
 
 llvm::Expected<DWARFUnitSP>
-DWARFUnit::extract(SymbolFileDWARF *dwarf, user_id_t uid,
-                   const DWARFDataExtractor &debug_info, DIERef::Section section,
-                   lldb::offset_t *offset_ptr) {
+DWARFUnit::extract(SymbolFileDWARF &dwarf, user_id_t uid,
+                   const DWARFDataExtractor &debug_info,
+                   DIERef::Section section, lldb::offset_t *offset_ptr) {
   assert(debug_info.ValidOffset(*offset_ptr));
 
   auto expected_header =
@@ -806,13 +800,13 @@ DWARFUnit::extract(SymbolFileDWARF *dwar
   if (!expected_header)
     return expected_header.takeError();
 
-  const DWARFDebugAbbrev *abbr = dwarf->DebugAbbrev();
+  const DWARFDebugAbbrev *abbr = dwarf.DebugAbbrev();
   if (!abbr)
     return llvm::make_error<llvm::object::GenericBinaryError>(
         "No debug_abbrev data");
 
   bool abbr_offset_OK =
-      dwarf->GetDWARFContext().getOrLoadAbbrevData().ValidOffset(
+      dwarf.GetDWARFContext().getOrLoadAbbrevData().ValidOffset(
           expected_header->GetAbbrOffset());
   if (!abbr_offset_OK)
     return llvm::make_error<llvm::object::GenericBinaryError>(
@@ -833,8 +827,8 @@ DWARFUnit::extract(SymbolFileDWARF *dwar
 
 const lldb_private::DWARFDataExtractor &DWARFUnit::GetData() const {
   return m_section == DIERef::Section::DebugTypes
-             ? m_dwarf->GetDWARFContext().getOrLoadDebugTypesData()
-             : m_dwarf->GetDWARFContext().getOrLoadDebugInfoData();
+             ? m_dwarf.GetDWARFContext().getOrLoadDebugTypesData()
+             : m_dwarf.GetDWARFContext().getOrLoadDebugInfoData();
 }
 
 uint32_t DWARFUnit::GetHeaderByteSize() const {
@@ -857,10 +851,10 @@ DWARFUnit::FindRnglistFromOffset(dw_offs
   const DWARFDebugRangesBase *debug_ranges;
   llvm::StringRef section;
   if (GetVersion() <= 4) {
-    debug_ranges = m_dwarf->GetDebugRanges();
+    debug_ranges = m_dwarf.GetDebugRanges();
     section = "debug_ranges";
   } else {
-    debug_ranges = m_dwarf->GetDebugRngLists();
+    debug_ranges = m_dwarf.GetDebugRngLists();
     section = "debug_rnglists";
   }
   if (!debug_ranges)
@@ -874,7 +868,7 @@ DWARFUnit::FindRnglistFromOffset(dw_offs
 
 llvm::Expected<DWARFRangeList>
 DWARFUnit::FindRnglistFromIndex(uint32_t index) const {
-  const DWARFDebugRangesBase *debug_rnglists = m_dwarf->GetDebugRngLists();
+  const DWARFDebugRangesBase *debug_rnglists = m_dwarf.GetDebugRngLists();
   if (!debug_rnglists)
     return llvm::make_error<llvm::object::GenericBinaryError>(
         "No debug_rnglists section");

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h Fri Jun 14 06:01:16 2019
@@ -74,7 +74,7 @@ class DWARFUnit : public lldb_private::U
 
 public:
   static llvm::Expected<DWARFUnitSP>
-  extract(SymbolFileDWARF *dwarf2Data, lldb::user_id_t uid,
+  extract(SymbolFileDWARF &dwarf2Data, lldb::user_id_t uid,
           const lldb_private::DWARFDataExtractor &debug_info,
           DIERef::Section section, lldb::offset_t *offset_ptr);
   virtual ~DWARFUnit();
@@ -86,7 +86,7 @@ public:
     DWARFUnit *m_cu;
   public:
     bool m_clear_dies = false;
-    ScopedExtractDIEs(DWARFUnit *cu);
+    ScopedExtractDIEs(DWARFUnit &cu);
     ~ScopedExtractDIEs();
     DISALLOW_COPY_AND_ASSIGN(ScopedExtractDIEs);
     ScopedExtractDIEs(ScopedExtractDIEs &&rhs);
@@ -180,7 +180,7 @@ public:
 
   bool Supports_unnamed_objc_bitfields();
 
-  SymbolFileDWARF *GetSymbolFileDWARF() const;
+  SymbolFileDWARF &GetSymbolFileDWARF() const { return m_dwarf; }
 
   DWARFProducer GetProducer();
 
@@ -225,12 +225,12 @@ public:
   llvm::Expected<DWARFRangeList> FindRnglistFromIndex(uint32_t index) const;
 
 protected:
-  DWARFUnit(SymbolFileDWARF *dwarf, lldb::user_id_t uid,
+  DWARFUnit(SymbolFileDWARF &dwarf, lldb::user_id_t uid,
             const DWARFUnitHeader &header,
             const DWARFAbbreviationDeclarationSet &abbrevs,
             DIERef::Section section);
 
-  llvm::Error ExtractHeader(SymbolFileDWARF *dwarf,
+  llvm::Error ExtractHeader(SymbolFileDWARF &dwarf,
                             const lldb_private::DWARFDataExtractor &data,
                             lldb::offset_t *offset_ptr);
 
@@ -252,7 +252,7 @@ protected:
     return &m_die_array[0];
   }
 
-  SymbolFileDWARF *m_dwarf = nullptr;
+  SymbolFileDWARF &m_dwarf;
   std::unique_ptr<SymbolFileDWARFDwo> m_dwo_symbol_file;
   DWARFUnitHeader m_header;
   const DWARFAbbreviationDeclarationSet *m_abbrevs = nullptr;

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp Fri Jun 14 06:01:16 2019
@@ -88,7 +88,8 @@ void ManualDWARFIndex::Index() {
 }
 
 void ManualDWARFIndex::IndexUnit(DWARFUnit &unit, IndexSet &set) {
-  assert(!unit.GetSymbolFileDWARF()->GetBaseCompileUnit() &&
+  assert(
+      !unit.GetSymbolFileDWARF().GetBaseCompileUnit() &&
       "DWARFUnit associated with .dwo or .dwp should not be indexed directly");
 
   Log *log = LogChannelDWARF::GetLogIfAll(DWARF_LOG_LOOKUPS);

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Fri Jun 14 06:01:16 2019
@@ -589,10 +589,8 @@ DWARFDebugInfo *SymbolFileDWARF::DebugIn
     static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
     Timer scoped_timer(func_cat, "%s this = %p", LLVM_PRETTY_FUNCTION,
                        static_cast<void *>(this));
-    if (m_context.getOrLoadDebugInfoData().GetByteSize() > 0) {
-      m_info = llvm::make_unique<DWARFDebugInfo>(m_context);
-      m_info->SetDwarfData(this);
-    }
+    if (m_context.getOrLoadDebugInfoData().GetByteSize() > 0)
+      m_info = llvm::make_unique<DWARFDebugInfo>(*this, m_context);
   }
   return m_info.get();
 }
@@ -654,8 +652,8 @@ lldb::CompUnitSP SymbolFileDWARF::ParseC
     // We already parsed this compile unit, had out a shared pointer to it
     cu_sp = comp_unit->shared_from_this();
   } else {
-    if (dwarf_cu.GetSymbolFileDWARF() != this) {
-      return dwarf_cu.GetSymbolFileDWARF()->ParseCompileUnit(dwarf_cu);
+    if (&dwarf_cu.GetSymbolFileDWARF() != this) {
+      return dwarf_cu.GetSymbolFileDWARF().ParseCompileUnit(dwarf_cu);
     } else if (dwarf_cu.GetOffset() == 0 && GetDebugMapSymfile()) {
       // Let the debug map create the compile unit
       cu_sp = m_debug_map_symfile->GetCompileUnit(this);

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp Fri Jun 14 06:01:16 2019
@@ -51,7 +51,7 @@ SymbolFileDWARFDwo::ParseCompileUnit(DWA
   assert(GetCompileUnit() == &dwarf_cu &&
          "SymbolFileDWARFDwo::ParseCompileUnit called with incompatible "
          "compile unit");
-  return GetBaseSymbolFile()->ParseCompileUnit(m_base_dwarf_cu);
+  return GetBaseSymbolFile().ParseCompileUnit(m_base_dwarf_cu);
 }
 
 DWARFUnit *SymbolFileDWARFDwo::GetCompileUnit() {
@@ -68,47 +68,47 @@ SymbolFileDWARFDwo::GetDWARFCompileUnit(
 }
 
 SymbolFileDWARF::DIEToTypePtr &SymbolFileDWARFDwo::GetDIEToType() {
-  return GetBaseSymbolFile()->GetDIEToType();
+  return GetBaseSymbolFile().GetDIEToType();
 }
 
 SymbolFileDWARF::DIEToVariableSP &SymbolFileDWARFDwo::GetDIEToVariable() {
-  return GetBaseSymbolFile()->GetDIEToVariable();
+  return GetBaseSymbolFile().GetDIEToVariable();
 }
 
 SymbolFileDWARF::DIEToClangType &
 SymbolFileDWARFDwo::GetForwardDeclDieToClangType() {
-  return GetBaseSymbolFile()->GetForwardDeclDieToClangType();
+  return GetBaseSymbolFile().GetForwardDeclDieToClangType();
 }
 
 SymbolFileDWARF::ClangTypeToDIE &
 SymbolFileDWARFDwo::GetForwardDeclClangTypeToDie() {
-  return GetBaseSymbolFile()->GetForwardDeclClangTypeToDie();
+  return GetBaseSymbolFile().GetForwardDeclClangTypeToDie();
 }
 
 size_t SymbolFileDWARFDwo::GetObjCMethodDIEOffsets(
     lldb_private::ConstString class_name, DIEArray &method_die_offsets) {
-  return GetBaseSymbolFile()->GetObjCMethodDIEOffsets(
-      class_name, method_die_offsets);
+  return GetBaseSymbolFile().GetObjCMethodDIEOffsets(class_name,
+                                                     method_die_offsets);
 }
 
 UniqueDWARFASTTypeMap &SymbolFileDWARFDwo::GetUniqueDWARFASTTypeMap() {
-  return GetBaseSymbolFile()->GetUniqueDWARFASTTypeMap();
+  return GetBaseSymbolFile().GetUniqueDWARFASTTypeMap();
 }
 
 lldb::TypeSP SymbolFileDWARFDwo::FindDefinitionTypeForDWARFDeclContext(
     const DWARFDeclContext &die_decl_ctx) {
-  return GetBaseSymbolFile()->FindDefinitionTypeForDWARFDeclContext(
+  return GetBaseSymbolFile().FindDefinitionTypeForDWARFDeclContext(
       die_decl_ctx);
 }
 
 lldb::TypeSP SymbolFileDWARFDwo::FindCompleteObjCDefinitionTypeForDIE(
     const DWARFDIE &die, lldb_private::ConstString type_name,
     bool must_be_implementation) {
-  return GetBaseSymbolFile()->FindCompleteObjCDefinitionTypeForDIE(
+  return GetBaseSymbolFile().FindCompleteObjCDefinitionTypeForDIE(
       die, type_name, must_be_implementation);
 }
 
-SymbolFileDWARF *SymbolFileDWARFDwo::GetBaseSymbolFile() {
+SymbolFileDWARF &SymbolFileDWARFDwo::GetBaseSymbolFile() {
   return m_base_dwarf_cu.GetSymbolFileDWARF();
 }
 
@@ -119,7 +119,7 @@ SymbolFileDWARFDwo::GetLocationListForma
 
 TypeSystem *
 SymbolFileDWARFDwo::GetTypeSystemForLanguage(LanguageType language) {
-  return GetBaseSymbolFile()->GetTypeSystemForLanguage(language);
+  return GetBaseSymbolFile().GetTypeSystemForLanguage(language);
 }
 
 DWARFDIE

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h?rev=363381&r1=363380&r2=363381&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h Fri Jun 14 06:01:16 2019
@@ -65,7 +65,7 @@ protected:
       const DWARFDIE &die, lldb_private::ConstString type_name,
       bool must_be_implementation) override;
 
-  SymbolFileDWARF *GetBaseSymbolFile();
+  SymbolFileDWARF &GetBaseSymbolFile();
 
   lldb::ObjectFileSP m_obj_file_sp;
   DWARFCompileUnit &m_base_dwarf_cu;




More information about the lldb-commits mailing list