[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