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; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits