diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2019-05-21 17:38:56 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2019-05-21 17:38:56 +0000 |
commit | b7a19321442a5c78ea463fe9a9c671d2522788ee (patch) | |
tree | 370d6d074436bd2273665dcd60c2b9f1f5a88864 /lldb | |
parent | b43dfaa6c0ff5661cde472c54e711c4afebe8b27 (diff) | |
download | bcm5719-llvm-b7a19321442a5c78ea463fe9a9c671d2522788ee.tar.gz bcm5719-llvm-b7a19321442a5c78ea463fe9a9c671d2522788ee.zip |
Remove `SymbolFileDWARF *` when there is already `DWARFUnit *`
In D61502#1503247 @clayborg suggested that SymbolFileDWARF *dwarf2Data is
really redundant in all the calls with also having DWARFUnit *cu. So remove it.
One `SymbolFileDWARF *` nullptr check
(DWARFDebugInfoEntry::GetDIENamesAndRanges) could be removed, other two nullptr
checks (DWARFDebugInfoEntry::GetName and DWARFDebugInfoEntry::AppendTypeName)
need to stay in place (now for `DWARFUnit *`).
Differential Revision: https://reviews.llvm.org/D62011
llvm-svn: 361277
Diffstat (limited to 'lldb')
8 files changed, 186 insertions, 249 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp index 205d66ff7a3..dc85b97886e 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp @@ -41,8 +41,7 @@ const char *DWARFBaseDIE::GetTagAsCString() const { const char *DWARFBaseDIE::GetAttributeValueAsString(const dw_attr_t attr, const char *fail_value) const { if (IsValid()) - return m_die->GetAttributeValueAsString(GetDWARF(), GetCU(), attr, - fail_value); + return m_die->GetAttributeValueAsString(GetCU(), attr, fail_value); else return fail_value; } @@ -50,8 +49,7 @@ const char *DWARFBaseDIE::GetAttributeValueAsString(const dw_attr_t attr, uint64_t DWARFBaseDIE::GetAttributeValueAsUnsigned(const dw_attr_t attr, uint64_t fail_value) const { if (IsValid()) - return m_die->GetAttributeValueAsUnsigned(GetDWARF(), GetCU(), attr, - fail_value); + return m_die->GetAttributeValueAsUnsigned(GetCU(), attr, fail_value); else return fail_value; } @@ -59,8 +57,7 @@ uint64_t DWARFBaseDIE::GetAttributeValueAsUnsigned(const dw_attr_t attr, uint64_t DWARFBaseDIE::GetAttributeValueAsAddress(const dw_attr_t attr, uint64_t fail_value) const { if (IsValid()) - return m_die->GetAttributeValueAsAddress(GetDWARF(), GetCU(), attr, - fail_value); + return m_die->GetAttributeValueAsAddress(GetCU(), attr, fail_value); else return fail_value; } @@ -73,7 +70,7 @@ lldb::user_id_t DWARFBaseDIE::GetID() const { const char *DWARFBaseDIE::GetName() const { if (IsValid()) - return m_die->GetName(GetDWARF(), m_cu); + return m_die->GetName(m_cu); else return nullptr; } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp index 5c529c1b8f5..36a1b400f7b 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp @@ -113,7 +113,7 @@ DWARFDIE::GetSibling() const { DWARFDIE DWARFDIE::GetReferencedDIE(const dw_attr_t attr) const { if (IsValid()) - return m_die->GetAttributeValueAsReference(GetDWARF(), GetCU(), attr); + return m_die->GetAttributeValueAsReference(GetCU(), attr); else return {}; } @@ -130,10 +130,9 @@ DWARFDIE DWARFDIE::GetAttributeValueAsReferenceDIE(const dw_attr_t attr) const { if (IsValid()) { DWARFUnit *cu = GetCU(); - SymbolFileDWARF *dwarf = cu->GetSymbolFileDWARF(); const bool check_specification_or_abstract_origin = true; DWARFFormValue form_value; - if (m_die->GetAttributeValue(dwarf, cu, attr, form_value, nullptr, + if (m_die->GetAttributeValue(cu, attr, form_value, nullptr, check_specification_or_abstract_origin)) return form_value.Reference(); } @@ -147,7 +146,7 @@ DWARFDIE::LookupDeepestBlock(lldb::addr_t file_addr) const { DWARFUnit *cu = GetCU(); DWARFDebugInfoEntry *function_die = nullptr; DWARFDebugInfoEntry *block_die = nullptr; - if (m_die->LookupAddress(file_addr, dwarf, cu, &function_die, &block_die)) { + if (m_die->LookupAddress(file_addr, cu, &function_die, &block_die)) { if (block_die && block_die != function_die) { if (cu->ContainsDIEOffset(block_die->GetOffset())) return DWARFDIE(cu, block_die); @@ -164,21 +163,21 @@ DWARFDIE::LookupDeepestBlock(lldb::addr_t file_addr) const { const char *DWARFDIE::GetMangledName() const { if (IsValid()) - return m_die->GetMangledName(GetDWARF(), m_cu); + return m_die->GetMangledName(m_cu); else return nullptr; } const char *DWARFDIE::GetPubname() const { if (IsValid()) - return m_die->GetPubname(GetDWARF(), m_cu); + return m_die->GetPubname(m_cu); else return nullptr; } const char *DWARFDIE::GetQualifiedName(std::string &storage) const { if (IsValid()) - return m_die->GetQualifiedName(GetDWARF(), m_cu, storage); + return m_die->GetQualifiedName(m_cu, storage); else return nullptr; } @@ -215,7 +214,7 @@ std::vector<DWARFDIE> DWARFDIE::GetDeclContextDIEs() const { void DWARFDIE::GetDWARFDeclContext(DWARFDeclContext &dwarf_decl_ctx) const { if (IsValid()) { dwarf_decl_ctx.SetLanguage(GetLanguage()); - m_die->GetDWARFDeclContext(GetDWARF(), GetCU(), dwarf_decl_ctx); + m_die->GetDWARFDeclContext(GetCU(), dwarf_decl_ctx); } else { dwarf_decl_ctx.Clear(); } @@ -273,7 +272,7 @@ void DWARFDIE::GetDeclContext(std::vector<CompilerContext> &context) const { DWARFDIE DWARFDIE::GetParentDeclContextDIE() const { if (IsValid()) - return m_die->GetParentDeclContextDIE(GetDWARF(), m_cu); + return m_die->GetParentDeclContextDIE(m_cu); else return DWARFDIE(); } @@ -331,8 +330,8 @@ bool DWARFDIE::GetDIENamesAndRanges( lldb_private::DWARFExpression *frame_base) const { if (IsValid()) { return m_die->GetDIENamesAndRanges( - GetDWARF(), GetCU(), name, mangled, ranges, decl_file, decl_line, - decl_column, call_file, call_line, call_column, frame_base); + GetCU(), name, mangled, ranges, decl_file, decl_line, decl_column, + call_file, call_line, call_column, frame_base); } else return false; } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp index 775b6b3ae5d..893bf6abbab 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp @@ -65,7 +65,7 @@ llvm::Expected<DWARFDebugAranges &> DWARFDebugInfo::GetCompileUnitAranges() { dw_offset_t offset = cu->GetOffset(); if (cus_with_data.find(offset) == cus_with_data.end()) - cu->BuildAddressRangeTable(m_dwarf2Data, m_cu_aranges_up.get()); + cu->BuildAddressRangeTable(m_cu_aranges_up.get()); } const bool minimize = true; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp index a78aba8bb78..610b28127e4 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp @@ -373,19 +373,15 @@ static dw_offset_t GetRangesOffset(const DWARFDebugRangesBase *debug_ranges, // Gets the valid address ranges for a given DIE by looking for a // DW_AT_low_pc/DW_AT_high_pc pair, DW_AT_entry_pc, or DW_AT_ranges attributes. bool DWARFDebugInfoEntry::GetDIENamesAndRanges( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, const char *&name, - const char *&mangled, DWARFRangeList &ranges, int &decl_file, - int &decl_line, int &decl_column, int &call_file, int &call_line, - int &call_column, DWARFExpression *frame_base) const { - if (dwarf2Data == nullptr) - return false; - + const DWARFUnit *cu, const char *&name, const char *&mangled, + DWARFRangeList &ranges, int &decl_file, int &decl_line, int &decl_column, + int &call_file, int &call_line, int &call_column, + DWARFExpression *frame_base) const { SymbolFileDWARFDwo *dwo_symbol_file = cu->GetDwoSymbolFile(); if (dwo_symbol_file) return GetDIENamesAndRanges( - dwo_symbol_file, dwo_symbol_file->GetCompileUnit(), name, mangled, - ranges, decl_file, decl_line, decl_column, call_file, call_line, - call_column, frame_base); + dwo_symbol_file->GetCompileUnit(), name, mangled, ranges, decl_file, + decl_line, decl_column, call_file, call_line, call_column, frame_base); dw_addr_t lo_pc = LLDB_INVALID_ADDRESS; dw_addr_t hi_pc = LLDB_INVALID_ADDRESS; @@ -394,8 +390,9 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( lldb::offset_t offset; const DWARFAbbreviationDeclaration *abbrevDecl = - GetAbbreviationDeclarationPtr(dwarf2Data, cu, offset); + GetAbbreviationDeclarationPtr(cu, offset); + SymbolFileDWARF *dwarf2Data = cu->GetSymbolFileDWARF(); lldb::ModuleSP module = dwarf2Data->GetObjectFile()->GetModule(); if (abbrevDecl) { @@ -559,9 +556,9 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( if (die_ref.die_offset != DW_INVALID_OFFSET) { DWARFDIE die = dwarf2Data->GetDIE(die_ref); if (die) - die.GetDIE()->GetDIENamesAndRanges( - die.GetDWARF(), die.GetCU(), name, mangled, ranges, decl_file, - decl_line, decl_column, call_file, call_line, call_column); + die.GetDIE()->GetDIENamesAndRanges(die.GetCU(), name, mangled, ranges, + decl_file, decl_line, decl_column, + call_file, call_line, call_column); } } } @@ -572,8 +569,7 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( // // Dumps a debug information entry and all of it's attributes to the specified // stream. -void DWARFDebugInfoEntry::Dump(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, Stream &s, +void DWARFDebugInfoEntry::Dump(const DWARFUnit *cu, Stream &s, uint32_t recurse_depth) const { const DWARFDataExtractor &debug_info_data = cu->GetData(); lldb::offset_t offset = m_offset; @@ -600,8 +596,7 @@ void DWARFDebugInfoEntry::Dump(SymbolFileDWARF *dwarf2Data, dw_attr_t attr; abbrevDecl->GetAttrAndFormValueByIndex(i, attr, form_value); - DumpAttribute(dwarf2Data, cu, debug_info_data, &offset, s, attr, - form_value); + DumpAttribute(cu, debug_info_data, &offset, s, attr, form_value); } const DWARFDebugInfoEntry *child = GetFirstChild(); @@ -609,7 +604,7 @@ void DWARFDebugInfoEntry::Dump(SymbolFileDWARF *dwarf2Data, s.IndentMore(); while (child) { - child->Dump(dwarf2Data, cu, s, recurse_depth - 1); + child->Dump(cu, s, recurse_depth - 1); child = child->GetSibling(); } s.IndentLess(); @@ -630,9 +625,9 @@ void DWARFDebugInfoEntry::Dump(SymbolFileDWARF *dwarf2Data, // display of attributes is done (disassemble location lists, show enumeration // values for attributes, etc). void DWARFDebugInfoEntry::DumpAttribute( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const DWARFDataExtractor &debug_info_data, lldb::offset_t *offset_ptr, - Stream &s, dw_attr_t attr, DWARFFormValue &form_value) { + const DWARFUnit *cu, const DWARFDataExtractor &debug_info_data, + lldb::offset_t *offset_ptr, Stream &s, dw_attr_t attr, + DWARFFormValue &form_value) { bool show_form = s.GetFlags().Test(DWARFDebugInfo::eDumpFlag_ShowForm); s.Printf(" "); @@ -655,6 +650,8 @@ void DWARFDebugInfoEntry::DumpAttribute( s.PutCString("( "); + SymbolFileDWARF *dwarf2Data = cu->GetSymbolFileDWARF(); + // Check to see if we have any special attribute formatters switch (attr) { case DW_AT_stmt_list: @@ -696,19 +693,17 @@ void DWARFDebugInfoEntry::DumpAttribute( DWARFDIE abstract_die = form_value.Reference(); form_value.Dump(s); // *ostrm_ptr << HEX32 << abstract_die.GetOffset() << " ( "; - GetName(dwarf2Data, abstract_die.GetCU(), abstract_die.GetOffset(), s); + GetName(abstract_die.GetCU(), abstract_die.GetOffset(), s); } break; case DW_AT_type: { DWARFDIE type_die = form_value.Reference(); s.PutCString(" ( "); - AppendTypeName(dwarf2Data, type_die.GetCU(), type_die.GetOffset(), s); + AppendTypeName(type_die.GetCU(), type_die.GetOffset(), s); s.PutCString(" )"); } break; case DW_AT_ranges: { - if (!dwarf2Data) - break; lldb::offset_t ranges_offset = GetRangesOffset(dwarf2Data->DebugRanges(), form_value); dw_addr_t base_addr = cu ? cu->GetBaseAddress() : 0; @@ -735,7 +730,7 @@ size_t DWARFDebugInfoEntry::GetAttributes( lldb::offset_t offset = 0; if (cu) { dwarf2Data = cu->GetSymbolFileDWARF(); - abbrevDecl = GetAbbreviationDeclarationPtr(dwarf2Data, cu, offset); + abbrevDecl = GetAbbreviationDeclarationPtr(cu, offset); } if (abbrevDecl) { @@ -797,20 +792,19 @@ size_t DWARFDebugInfoEntry::GetAttributes( // since an offset of zero is invalid for an attribute (it would be a compile // unit header). dw_offset_t DWARFDebugInfoEntry::GetAttributeValue( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, DWARFFormValue &form_value, + const DWARFUnit *cu, const dw_attr_t attr, DWARFFormValue &form_value, dw_offset_t *end_attr_offset_ptr, bool check_specification_or_abstract_origin) const { SymbolFileDWARFDwo *dwo_symbol_file = cu->GetDwoSymbolFile(); if (dwo_symbol_file && m_tag != DW_TAG_compile_unit && m_tag != DW_TAG_partial_unit) - return GetAttributeValue(dwo_symbol_file, dwo_symbol_file->GetCompileUnit(), - attr, form_value, end_attr_offset_ptr, + return GetAttributeValue(dwo_symbol_file->GetCompileUnit(), attr, + form_value, end_attr_offset_ptr, check_specification_or_abstract_origin); lldb::offset_t offset; const DWARFAbbreviationDeclaration *abbrevDecl = - GetAbbreviationDeclarationPtr(dwarf2Data, cu, offset); + GetAbbreviationDeclarationPtr(cu, offset); if (abbrevDecl) { uint32_t attr_idx = abbrevDecl->FindAttributeIndex(attr); @@ -835,23 +829,21 @@ dw_offset_t DWARFDebugInfoEntry::GetAttributeValue( } if (check_specification_or_abstract_origin) { - if (GetAttributeValue(dwarf2Data, cu, DW_AT_specification, form_value)) { + if (GetAttributeValue(cu, DW_AT_specification, form_value)) { DWARFDIE die = form_value.Reference(); if (die) { dw_offset_t die_offset = die.GetDIE()->GetAttributeValue( - die.GetDWARF(), die.GetCU(), attr, form_value, end_attr_offset_ptr, - false); + die.GetCU(), attr, form_value, end_attr_offset_ptr, false); if (die_offset) return die_offset; } } - if (GetAttributeValue(dwarf2Data, cu, DW_AT_abstract_origin, form_value)) { + if (GetAttributeValue(cu, DW_AT_abstract_origin, form_value)) { DWARFDIE die = form_value.Reference(); if (die) { dw_offset_t die_offset = die.GetDIE()->GetAttributeValue( - die.GetDWARF(), die.GetCU(), attr, form_value, end_attr_offset_ptr, - false); + die.GetCU(), attr, form_value, end_attr_offset_ptr, false); if (die_offset) return die_offset; } @@ -870,7 +862,7 @@ dw_offset_t DWARFDebugInfoEntry::GetAttributeValue( return 0; return dwo_cu_die.GetDIE()->GetAttributeValue( - dwo_symbol_file, dwo_cu, attr, form_value, end_attr_offset_ptr, + dwo_cu, attr, form_value, end_attr_offset_ptr, check_specification_or_abstract_origin); } @@ -881,11 +873,10 @@ dw_offset_t DWARFDebugInfoEntry::GetAttributeValue( // be available as long as the SymbolFileDWARF is still around and it's content // doesn't change. const char *DWARFDebugInfoEntry::GetAttributeValueAsString( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, const char *fail_value, + const DWARFUnit *cu, const dw_attr_t attr, const char *fail_value, bool check_specification_or_abstract_origin) const { DWARFFormValue form_value; - if (GetAttributeValue(dwarf2Data, cu, attr, form_value, nullptr, + if (GetAttributeValue(cu, attr, form_value, nullptr, check_specification_or_abstract_origin)) return form_value.AsCString(); return fail_value; @@ -895,11 +886,10 @@ const char *DWARFDebugInfoEntry::GetAttributeValueAsString( // // Get the value of an attribute as unsigned and return it. uint64_t DWARFDebugInfoEntry::GetAttributeValueAsUnsigned( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, uint64_t fail_value, + const DWARFUnit *cu, const dw_attr_t attr, uint64_t fail_value, bool check_specification_or_abstract_origin) const { DWARFFormValue form_value; - if (GetAttributeValue(dwarf2Data, cu, attr, form_value, nullptr, + if (GetAttributeValue(cu, attr, form_value, nullptr, check_specification_or_abstract_origin)) return form_value.Unsigned(); return fail_value; @@ -910,21 +900,20 @@ uint64_t DWARFDebugInfoEntry::GetAttributeValueAsUnsigned( // Get the value of an attribute as reference and fix up and compile unit // relative offsets as needed. DWARFDIE DWARFDebugInfoEntry::GetAttributeValueAsReference( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, const dw_attr_t attr, + const DWARFUnit *cu, const dw_attr_t attr, bool check_specification_or_abstract_origin) const { DWARFFormValue form_value; - if (GetAttributeValue(dwarf2Data, cu, attr, form_value, nullptr, + if (GetAttributeValue(cu, attr, form_value, nullptr, check_specification_or_abstract_origin)) return form_value.Reference(); return {}; } uint64_t DWARFDebugInfoEntry::GetAttributeValueAsAddress( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, uint64_t fail_value, + const DWARFUnit *cu, const dw_attr_t attr, uint64_t fail_value, bool check_specification_or_abstract_origin) const { DWARFFormValue form_value; - if (GetAttributeValue(dwarf2Data, cu, attr, form_value, nullptr, + if (GetAttributeValue(cu, attr, form_value, nullptr, check_specification_or_abstract_origin)) return form_value.Address(); return fail_value; @@ -937,10 +926,10 @@ uint64_t DWARFDebugInfoEntry::GetAttributeValueAsAddress( // // Returns the hi_pc or fail_value. dw_addr_t DWARFDebugInfoEntry::GetAttributeHighPC( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, dw_addr_t lo_pc, - uint64_t fail_value, bool check_specification_or_abstract_origin) const { + const DWARFUnit *cu, dw_addr_t lo_pc, uint64_t fail_value, + bool check_specification_or_abstract_origin) const { DWARFFormValue form_value; - if (GetAttributeValue(dwarf2Data, cu, DW_AT_high_pc, form_value, nullptr, + if (GetAttributeValue(cu, DW_AT_high_pc, form_value, nullptr, check_specification_or_abstract_origin)) { dw_form_t form = form_value.Form(); if (form == DW_FORM_addr || form == DW_FORM_addrx || @@ -960,13 +949,12 @@ dw_addr_t DWARFDebugInfoEntry::GetAttributeHighPC( // // Returns true or sets lo_pc and hi_pc to fail_value. bool DWARFDebugInfoEntry::GetAttributeAddressRange( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, dw_addr_t &lo_pc, - dw_addr_t &hi_pc, uint64_t fail_value, - bool check_specification_or_abstract_origin) const { - lo_pc = GetAttributeValueAsAddress(dwarf2Data, cu, DW_AT_low_pc, fail_value, + const DWARFUnit *cu, dw_addr_t &lo_pc, dw_addr_t &hi_pc, + uint64_t fail_value, bool check_specification_or_abstract_origin) const { + lo_pc = GetAttributeValueAsAddress(cu, DW_AT_low_pc, fail_value, check_specification_or_abstract_origin); if (lo_pc != fail_value) { - hi_pc = GetAttributeHighPC(dwarf2Data, cu, lo_pc, fail_value, + hi_pc = GetAttributeHighPC(cu, lo_pc, fail_value, check_specification_or_abstract_origin); if (hi_pc != fail_value) return true; @@ -977,21 +965,21 @@ bool DWARFDebugInfoEntry::GetAttributeAddressRange( } size_t DWARFDebugInfoEntry::GetAttributeAddressRanges( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - DWARFRangeList &ranges, bool check_hi_lo_pc, + const DWARFUnit *cu, DWARFRangeList &ranges, bool check_hi_lo_pc, bool check_specification_or_abstract_origin) const { ranges.Clear(); + SymbolFileDWARF *dwarf2Data = cu->GetSymbolFileDWARF(); + DWARFFormValue form_value; - if (GetAttributeValue(dwarf2Data, cu, DW_AT_ranges, form_value)) { + if (GetAttributeValue(cu, DW_AT_ranges, form_value)) { if (DWARFDebugRangesBase *debug_ranges = dwarf2Data->DebugRanges()) debug_ranges->FindRanges(cu, GetRangesOffset(debug_ranges, form_value), ranges); } else if (check_hi_lo_pc) { dw_addr_t lo_pc = LLDB_INVALID_ADDRESS; dw_addr_t hi_pc = LLDB_INVALID_ADDRESS; - if (GetAttributeAddressRange(dwarf2Data, cu, lo_pc, hi_pc, - LLDB_INVALID_ADDRESS, + if (GetAttributeAddressRange(cu, lo_pc, hi_pc, LLDB_INVALID_ADDRESS, check_specification_or_abstract_origin)) { if (lo_pc < hi_pc) ranges.Append(DWARFRangeList::Entry(lo_pc, hi_pc - lo_pc)); @@ -1004,9 +992,8 @@ size_t DWARFDebugInfoEntry::GetAttributeAddressRanges( // // Get value of the DW_AT_name attribute and return it if one exists, else // return NULL. -const char *DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu) const { - return GetAttributeValueAsString(dwarf2Data, cu, DW_AT_name, nullptr, true); +const char *DWARFDebugInfoEntry::GetName(const DWARFUnit *cu) const { + return GetAttributeValueAsString(cu, DW_AT_name, nullptr, true); } // GetMangledName @@ -1014,25 +1001,22 @@ const char *DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, // Get value of the DW_AT_MIPS_linkage_name attribute and return it if one // exists, else return the value of the DW_AT_name attribute const char * -DWARFDebugInfoEntry::GetMangledName(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, +DWARFDebugInfoEntry::GetMangledName(const DWARFUnit *cu, bool substitute_name_allowed) const { const char *name = nullptr; - name = GetAttributeValueAsString(dwarf2Data, cu, DW_AT_MIPS_linkage_name, - nullptr, true); + name = GetAttributeValueAsString(cu, DW_AT_MIPS_linkage_name, nullptr, true); if (name) return name; - name = GetAttributeValueAsString(dwarf2Data, cu, DW_AT_linkage_name, nullptr, - true); + name = GetAttributeValueAsString(cu, DW_AT_linkage_name, nullptr, true); if (name) return name; if (!substitute_name_allowed) return nullptr; - name = GetAttributeValueAsString(dwarf2Data, cu, DW_AT_name, nullptr, true); + name = GetAttributeValueAsString(cu, DW_AT_name, nullptr, true); return name; } @@ -1040,23 +1024,20 @@ DWARFDebugInfoEntry::GetMangledName(SymbolFileDWARF *dwarf2Data, // // Get value the name for a DIE as it should appear for a .debug_pubnames or // .debug_pubtypes section. -const char *DWARFDebugInfoEntry::GetPubname(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu) const { +const char *DWARFDebugInfoEntry::GetPubname(const DWARFUnit *cu) const { const char *name = nullptr; - if (!dwarf2Data) + if (!cu) return name; - name = GetAttributeValueAsString(dwarf2Data, cu, DW_AT_MIPS_linkage_name, - nullptr, true); + name = GetAttributeValueAsString(cu, DW_AT_MIPS_linkage_name, nullptr, true); if (name) return name; - name = GetAttributeValueAsString(dwarf2Data, cu, DW_AT_linkage_name, nullptr, - true); + name = GetAttributeValueAsString(cu, DW_AT_linkage_name, nullptr, true); if (name) return name; - name = GetAttributeValueAsString(dwarf2Data, cu, DW_AT_name, nullptr, true); + name = GetAttributeValueAsString(cu, DW_AT_name, nullptr, true); return name; } @@ -1066,10 +1047,9 @@ const char *DWARFDebugInfoEntry::GetPubname(SymbolFileDWARF *dwarf2Data, // exists at offset "die_offset" and place that value into the supplied stream // object. If the DIE is a NULL object "NULL" is placed into the stream, and if // no DW_AT_name attribute exists for the DIE then nothing is printed. -bool DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, +bool DWARFDebugInfoEntry::GetName(const DWARFUnit *cu, const dw_offset_t die_offset, Stream &s) { - if (dwarf2Data == NULL) { + if (cu == NULL) { s.PutCString("NULL"); return false; } @@ -1081,8 +1061,8 @@ bool DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, s.PutCString("NULL"); return true; } else { - const char *name = die.GetAttributeValueAsString( - dwarf2Data, cu, DW_AT_name, nullptr, true); + const char *name = + die.GetAttributeValueAsString(cu, DW_AT_name, nullptr, true); if (name) { s.PutCString(name); return true; @@ -1097,11 +1077,10 @@ bool DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, // Follows the type name definition down through all needed tags to end up with // a fully qualified type name and dump the results to the supplied stream. // This is used to show the name of types given a type identifier. -bool DWARFDebugInfoEntry::AppendTypeName(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, +bool DWARFDebugInfoEntry::AppendTypeName(const DWARFUnit *cu, const dw_offset_t die_offset, Stream &s) { - if (dwarf2Data == NULL) { + if (cu == NULL) { s.PutCString("NULL"); return false; } @@ -1113,13 +1092,13 @@ bool DWARFDebugInfoEntry::AppendTypeName(SymbolFileDWARF *dwarf2Data, s.PutCString("NULL"); return true; } else { - const char *name = die.GetPubname(dwarf2Data, cu); + const char *name = die.GetPubname(cu); if (name) s.PutCString(name); else { bool result = true; const DWARFAbbreviationDeclaration *abbrevDecl = - die.GetAbbreviationDeclarationPtr(dwarf2Data, cu, offset); + die.GetAbbreviationDeclarationPtr(cu, offset); if (abbrevDecl == NULL) return false; @@ -1194,10 +1173,9 @@ bool DWARFDebugInfoEntry::AppendTypeName(SymbolFileDWARF *dwarf2Data, // Follow the DW_AT_type if possible DWARFFormValue form_value; - if (die.GetAttributeValue(dwarf2Data, cu, DW_AT_type, form_value)) { + if (die.GetAttributeValue(cu, DW_AT_type, form_value)) { DWARFDIE next_die = form_value.Reference(); - result = AppendTypeName(dwarf2Data, next_die.GetCU(), - next_die.GetOffset(), s); + result = AppendTypeName(next_die.GetCU(), next_die.GetOffset(), s); } switch (abbrevDecl->Tag()) { @@ -1225,14 +1203,12 @@ bool DWARFDebugInfoEntry::AppendTypeName(SymbolFileDWARF *dwarf2Data, // BuildAddressRangeTable void DWARFDebugInfoEntry::BuildAddressRangeTable( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - DWARFDebugAranges *debug_aranges) const { + const DWARFUnit *cu, DWARFDebugAranges *debug_aranges) const { if (m_tag) { if (m_tag == DW_TAG_subprogram) { dw_addr_t lo_pc = LLDB_INVALID_ADDRESS; dw_addr_t hi_pc = LLDB_INVALID_ADDRESS; - if (GetAttributeAddressRange(dwarf2Data, cu, lo_pc, hi_pc, - LLDB_INVALID_ADDRESS)) { + if (GetAttributeAddressRange(cu, lo_pc, hi_pc, LLDB_INVALID_ADDRESS)) { /// printf("BuildAddressRangeTable() 0x%8.8x: %30s: [0x%8.8x - /// 0x%8.8x)\n", m_offset, DW_TAG_value_to_name(tag), lo_pc, hi_pc); debug_aranges->AppendRange(cu->GetOffset(), lo_pc, hi_pc); @@ -1241,7 +1217,7 @@ void DWARFDebugInfoEntry::BuildAddressRangeTable( const DWARFDebugInfoEntry *child = GetFirstChild(); while (child) { - child->BuildAddressRangeTable(dwarf2Data, cu, debug_aranges); + child->BuildAddressRangeTable(cu, debug_aranges); child = child->GetSibling(); } } @@ -1254,14 +1230,12 @@ void DWARFDebugInfoEntry::BuildAddressRangeTable( // of the compile unit offset (which is the way the standard .debug_aranges // section does it). void DWARFDebugInfoEntry::BuildFunctionAddressRangeTable( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - DWARFDebugAranges *debug_aranges) const { + const DWARFUnit *cu, DWARFDebugAranges *debug_aranges) const { if (m_tag) { if (m_tag == DW_TAG_subprogram) { dw_addr_t lo_pc = LLDB_INVALID_ADDRESS; dw_addr_t hi_pc = LLDB_INVALID_ADDRESS; - if (GetAttributeAddressRange(dwarf2Data, cu, lo_pc, hi_pc, - LLDB_INVALID_ADDRESS)) { + if (GetAttributeAddressRange(cu, lo_pc, hi_pc, LLDB_INVALID_ADDRESS)) { // printf("BuildAddressRangeTable() 0x%8.8x: [0x%16.16" PRIx64 " - // 0x%16.16" PRIx64 ")\n", m_offset, lo_pc, hi_pc); // DEBUG ONLY debug_aranges->AppendRange(GetOffset(), lo_pc, hi_pc); @@ -1270,7 +1244,7 @@ void DWARFDebugInfoEntry::BuildFunctionAddressRangeTable( const DWARFDebugInfoEntry *child = GetFirstChild(); while (child) { - child->BuildFunctionAddressRangeTable(dwarf2Data, cu, debug_aranges); + child->BuildFunctionAddressRangeTable(cu, debug_aranges); child = child->GetSibling(); } } @@ -1284,43 +1258,38 @@ DWARFDebugInfoEntry::GetDeclContextDIEs(DWARFUnit *cu) const { } void DWARFDebugInfoEntry::GetDWARFDeclContext( - SymbolFileDWARF *dwarf2Data, DWARFUnit *cu, - DWARFDeclContext &dwarf_decl_ctx) const { + DWARFUnit *cu, DWARFDeclContext &dwarf_decl_ctx) const { const dw_tag_t tag = Tag(); if (tag != DW_TAG_compile_unit && tag != DW_TAG_partial_unit) { - dwarf_decl_ctx.AppendDeclContext(tag, GetName(dwarf2Data, cu)); - DWARFDIE parent_decl_ctx_die = GetParentDeclContextDIE(dwarf2Data, cu); + dwarf_decl_ctx.AppendDeclContext(tag, GetName(cu)); + DWARFDIE parent_decl_ctx_die = GetParentDeclContextDIE(cu); if (parent_decl_ctx_die && parent_decl_ctx_die.GetDIE() != this) { if (parent_decl_ctx_die.Tag() != DW_TAG_compile_unit && parent_decl_ctx_die.Tag() != DW_TAG_partial_unit) parent_decl_ctx_die.GetDIE()->GetDWARFDeclContext( - parent_decl_ctx_die.GetDWARF(), parent_decl_ctx_die.GetCU(), - dwarf_decl_ctx); + parent_decl_ctx_die.GetCU(), dwarf_decl_ctx); } } } bool DWARFDebugInfoEntry::MatchesDWARFDeclContext( - SymbolFileDWARF *dwarf2Data, DWARFUnit *cu, - const DWARFDeclContext &dwarf_decl_ctx) const { + DWARFUnit *cu, const DWARFDeclContext &dwarf_decl_ctx) const { DWARFDeclContext this_dwarf_decl_ctx; - GetDWARFDeclContext(dwarf2Data, cu, this_dwarf_decl_ctx); + GetDWARFDeclContext(cu, this_dwarf_decl_ctx); return this_dwarf_decl_ctx == dwarf_decl_ctx; } DWARFDIE -DWARFDebugInfoEntry::GetParentDeclContextDIE(SymbolFileDWARF *dwarf2Data, - DWARFUnit *cu) const { +DWARFDebugInfoEntry::GetParentDeclContextDIE(DWARFUnit *cu) const { DWARFAttributes attributes; GetAttributes(cu, DWARFFormValue::FixedFormSizes(), attributes); - return GetParentDeclContextDIE(dwarf2Data, cu, attributes); + return GetParentDeclContextDIE(cu, attributes); } DWARFDIE DWARFDebugInfoEntry::GetParentDeclContextDIE( - SymbolFileDWARF *dwarf2Data, DWARFUnit *cu, - const DWARFAttributes &attributes) const { + DWARFUnit *cu, const DWARFAttributes &attributes) const { DWARFDIE die(cu, const_cast<DWARFDebugInfoEntry *>(this)); while (die) { @@ -1361,22 +1330,22 @@ DWARFDebugInfoEntry::GetParentDeclContextDIE( return DWARFDIE(); } -const char *DWARFDebugInfoEntry::GetQualifiedName(SymbolFileDWARF *dwarf2Data, - DWARFUnit *cu, +const char *DWARFDebugInfoEntry::GetQualifiedName(DWARFUnit *cu, std::string &storage) const { DWARFAttributes attributes; GetAttributes(cu, DWARFFormValue::FixedFormSizes(), attributes); - return GetQualifiedName(dwarf2Data, cu, attributes, storage); + return GetQualifiedName(cu, attributes, storage); } -const char *DWARFDebugInfoEntry::GetQualifiedName( - SymbolFileDWARF *dwarf2Data, DWARFUnit *cu, - const DWARFAttributes &attributes, std::string &storage) const { +const char * +DWARFDebugInfoEntry::GetQualifiedName(DWARFUnit *cu, + const DWARFAttributes &attributes, + std::string &storage) const { - const char *name = GetName(dwarf2Data, cu); + const char *name = GetName(cu); if (name) { - DWARFDIE parent_decl_ctx_die = GetParentDeclContextDIE(dwarf2Data, cu); + DWARFDIE parent_decl_ctx_die = GetParentDeclContextDIE(cu); storage.clear(); // TODO: change this to get the correct decl context parent.... while (parent_decl_ctx_die) { @@ -1423,7 +1392,6 @@ const char *DWARFDebugInfoEntry::GetQualifiedName( // LookupAddress bool DWARFDebugInfoEntry::LookupAddress(const dw_addr_t address, - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, DWARFDebugInfoEntry **function_die, DWARFDebugInfoEntry **block_die) { @@ -1567,11 +1535,10 @@ bool DWARFDebugInfoEntry::LookupAddress(const dw_addr_t address, } if (match_addr_range) { - dw_addr_t lo_pc = GetAttributeValueAsAddress(dwarf2Data, cu, DW_AT_low_pc, - LLDB_INVALID_ADDRESS); + dw_addr_t lo_pc = + GetAttributeValueAsAddress(cu, DW_AT_low_pc, LLDB_INVALID_ADDRESS); if (lo_pc != LLDB_INVALID_ADDRESS) { - dw_addr_t hi_pc = - GetAttributeHighPC(dwarf2Data, cu, lo_pc, LLDB_INVALID_ADDRESS); + dw_addr_t hi_pc = GetAttributeHighPC(cu, lo_pc, LLDB_INVALID_ADDRESS); if (hi_pc != LLDB_INVALID_ADDRESS) { // printf("\n0x%8.8x: %30s: address = 0x%8.8x [0x%8.8x - 0x%8.8x) ", // m_offset, DW_TAG_value_to_name(tag), address, lo_pc, hi_pc); @@ -1613,8 +1580,9 @@ bool DWARFDebugInfoEntry::LookupAddress(const dw_addr_t address, } } else { DWARFFormValue form_value; - if (GetAttributeValue(dwarf2Data, cu, DW_AT_ranges, form_value)) { + if (GetAttributeValue(cu, DW_AT_ranges, form_value)) { DWARFRangeList ranges; + SymbolFileDWARF *dwarf2Data = cu->GetSymbolFileDWARF(); DWARFDebugRangesBase *debug_ranges = dwarf2Data->DebugRanges(); debug_ranges->FindRanges( cu, GetRangesOffset(debug_ranges, form_value), ranges); @@ -1657,8 +1625,7 @@ bool DWARFDebugInfoEntry::LookupAddress(const dw_addr_t address, // printf("checking children\n"); DWARFDebugInfoEntry *child = GetFirstChild(); while (child) { - if (child->LookupAddress(address, dwarf2Data, cu, function_die, - block_die)) + if (child->LookupAddress(address, cu, function_die, block_die)) return true; child = child->GetSibling(); } @@ -1669,9 +1636,8 @@ bool DWARFDebugInfoEntry::LookupAddress(const dw_addr_t address, const DWARFAbbreviationDeclaration * DWARFDebugInfoEntry::GetAbbreviationDeclarationPtr( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - lldb::offset_t &offset) const { - if (dwarf2Data) { + const DWARFUnit *cu, lldb::offset_t &offset) const { + if (cu) { offset = GetOffset(); const DWARFAbbreviationDeclarationSet *abbrev_set = cu->GetAbbreviations(); @@ -1687,6 +1653,8 @@ DWARFDebugInfoEntry::GetAbbreviationDeclarationPtr( if (abbrev_decl->Code() == abbrev_code) return abbrev_decl; + SymbolFileDWARF *dwarf2Data = cu->GetSymbolFileDWARF(); + dwarf2Data->GetObjectFile()->GetModule()->ReportErrorIfModifyDetected( "0x%8.8x: the DWARF debug information has been modified (abbrev " "code was %u, and is now %u)", diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h index b0815e00b63..c0a8fa6ea8f 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h @@ -61,12 +61,10 @@ public: bool operator==(const DWARFDebugInfoEntry &rhs) const; bool operator!=(const DWARFDebugInfoEntry &rhs) const; - void BuildAddressRangeTable(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, + void BuildAddressRangeTable(const DWARFUnit *cu, DWARFDebugAranges *debug_aranges) const; - void BuildFunctionAddressRangeTable(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, + void BuildFunctionAddressRangeTable(const DWARFUnit *cu, DWARFDebugAranges *debug_aranges) const; bool FastExtract(const lldb_private::DWARFDataExtractor &debug_info_data, @@ -76,8 +74,7 @@ public: bool Extract(const DWARFUnit *cu, lldb::offset_t *offset_ptr); - bool LookupAddress(const dw_addr_t address, SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, + bool LookupAddress(const dw_addr_t address, const DWARFUnit *cu, DWARFDebugInfoEntry **function_die, DWARFDebugInfoEntry **block_die); @@ -88,95 +85,79 @@ public: const; // "curr_depth" for internal use only, don't set this yourself!!! dw_offset_t - GetAttributeValue(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, DWARFFormValue &formValue, + GetAttributeValue(const DWARFUnit *cu, const dw_attr_t attr, + DWARFFormValue &formValue, dw_offset_t *end_attr_offset_ptr = nullptr, bool check_specification_or_abstract_origin = false) const; const char *GetAttributeValueAsString( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, const char *fail_value, + const DWARFUnit *cu, const dw_attr_t attr, const char *fail_value, bool check_specification_or_abstract_origin = false) const; uint64_t GetAttributeValueAsUnsigned( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, uint64_t fail_value, + const DWARFUnit *cu, const dw_attr_t attr, uint64_t fail_value, bool check_specification_or_abstract_origin = false) const; DWARFDIE GetAttributeValueAsReference( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, const dw_attr_t attr, + const DWARFUnit *cu, const dw_attr_t attr, bool check_specification_or_abstract_origin = false) const; uint64_t GetAttributeValueAsAddress( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_attr_t attr, uint64_t fail_value, + const DWARFUnit *cu, const dw_attr_t attr, uint64_t fail_value, bool check_specification_or_abstract_origin = false) const; dw_addr_t - GetAttributeHighPC(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - dw_addr_t lo_pc, uint64_t fail_value, + GetAttributeHighPC(const DWARFUnit *cu, dw_addr_t lo_pc, uint64_t fail_value, bool check_specification_or_abstract_origin = false) const; bool GetAttributeAddressRange( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, dw_addr_t &lo_pc, - dw_addr_t &hi_pc, uint64_t fail_value, + const DWARFUnit *cu, dw_addr_t &lo_pc, dw_addr_t &hi_pc, + uint64_t fail_value, bool check_specification_or_abstract_origin = false) const; size_t GetAttributeAddressRanges( - SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - DWARFRangeList &ranges, bool check_hi_lo_pc, + const DWARFUnit *cu, DWARFRangeList &ranges, bool check_hi_lo_pc, bool check_specification_or_abstract_origin = false) const; - const char *GetName(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu) const; + const char *GetName(const DWARFUnit *cu) const; - const char *GetMangledName(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, + const char *GetMangledName(const DWARFUnit *cu, bool substitute_name_allowed = true) const; - const char *GetPubname(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu) const; + const char *GetPubname(const DWARFUnit *cu) const; - static bool GetName(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const dw_offset_t die_offset, lldb_private::Stream &s); + static bool GetName(const DWARFUnit *cu, const dw_offset_t die_offset, + lldb_private::Stream &s); - static bool AppendTypeName(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, - const dw_offset_t die_offset, + static bool AppendTypeName(const DWARFUnit *cu, const dw_offset_t die_offset, lldb_private::Stream &s); - const char *GetQualifiedName(SymbolFileDWARF *dwarf2Data, - DWARFUnit *cu, - std::string &storage) const; + const char *GetQualifiedName(DWARFUnit *cu, std::string &storage) const; - const char *GetQualifiedName(SymbolFileDWARF *dwarf2Data, - DWARFUnit *cu, - const DWARFAttributes &attributes, + const char *GetQualifiedName(DWARFUnit *cu, const DWARFAttributes &attributes, std::string &storage) const; static bool OffsetLessThan(const DWARFDebugInfoEntry &a, const DWARFDebugInfoEntry &b); - void Dump(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - lldb_private::Stream &s, uint32_t recurse_depth) const; + void Dump(const DWARFUnit *cu, lldb_private::Stream &s, + uint32_t recurse_depth) const; static void - DumpAttribute(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, + DumpAttribute(const DWARFUnit *cu, const lldb_private::DWARFDataExtractor &debug_info_data, lldb::offset_t *offset_ptr, lldb_private::Stream &s, dw_attr_t attr, DWARFFormValue &form_value); bool - GetDIENamesAndRanges(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, - const char *&name, const char *&mangled, - DWARFRangeList &rangeList, int &decl_file, - int &decl_line, int &decl_column, int &call_file, - int &call_line, int &call_column, + GetDIENamesAndRanges(const DWARFUnit *cu, const char *&name, + const char *&mangled, DWARFRangeList &rangeList, + int &decl_file, int &decl_line, int &decl_column, + int &call_file, int &call_line, int &call_column, lldb_private::DWARFExpression *frame_base = NULL) const; const DWARFAbbreviationDeclaration * - GetAbbreviationDeclarationPtr(SymbolFileDWARF *dwarf2Data, - const DWARFUnit *cu, + GetAbbreviationDeclarationPtr(const DWARFUnit *cu, lldb::offset_t &offset) const; dw_tag_t Tag() const { return m_tag; } @@ -217,17 +198,14 @@ public: std::vector<DWARFDIE> GetDeclContextDIEs(DWARFUnit *cu) const; - void GetDWARFDeclContext(SymbolFileDWARF *dwarf2Data, DWARFUnit *cu, + void GetDWARFDeclContext(DWARFUnit *cu, DWARFDeclContext &dwarf_decl_ctx) const; - bool MatchesDWARFDeclContext(SymbolFileDWARF *dwarf2Data, - DWARFUnit *cu, + bool MatchesDWARFDeclContext(DWARFUnit *cu, const DWARFDeclContext &dwarf_decl_ctx) const; - DWARFDIE GetParentDeclContextDIE(SymbolFileDWARF *dwarf2Data, - DWARFUnit *cu) const; - DWARFDIE GetParentDeclContextDIE(SymbolFileDWARF *dwarf2Data, - DWARFUnit *cu, + DWARFDIE GetParentDeclContextDIE(DWARFUnit *cu) const; + DWARFDIE GetParentDeclContextDIE(DWARFUnit *cu, const DWARFAttributes &attributes) const; void SetParent(DWARFDebugInfoEntry *parent) { diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp index e40b3cbd42c..48e2bae68bb 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp @@ -279,23 +279,22 @@ static void SetDwoStrOffsetsBase(DWARFUnit *dwo_cu) { // m_die_array_mutex must be already held as read/write. void DWARFUnit::AddUnitDIE(const DWARFDebugInfoEntry &cu_die) { dw_addr_t addr_base = cu_die.GetAttributeValueAsUnsigned( - m_dwarf, this, DW_AT_addr_base, LLDB_INVALID_ADDRESS); + this, DW_AT_addr_base, LLDB_INVALID_ADDRESS); if (addr_base != LLDB_INVALID_ADDRESS) SetAddrBase(addr_base); dw_addr_t ranges_base = cu_die.GetAttributeValueAsUnsigned( - m_dwarf, this, DW_AT_rnglists_base, LLDB_INVALID_ADDRESS); + this, DW_AT_rnglists_base, LLDB_INVALID_ADDRESS); if (ranges_base != LLDB_INVALID_ADDRESS) SetRangesBase(ranges_base); - SetStrOffsetsBase(cu_die.GetAttributeValueAsUnsigned( - m_dwarf, this, DW_AT_str_offsets_base, 0)); + SetStrOffsetsBase( + cu_die.GetAttributeValueAsUnsigned(this, DW_AT_str_offsets_base, 0)); - uint64_t base_addr = cu_die.GetAttributeValueAsAddress( - m_dwarf, this, DW_AT_low_pc, LLDB_INVALID_ADDRESS); + uint64_t base_addr = cu_die.GetAttributeValueAsAddress(this, DW_AT_low_pc, + LLDB_INVALID_ADDRESS); if (base_addr == LLDB_INVALID_ADDRESS) - base_addr = cu_die.GetAttributeValueAsAddress( - m_dwarf, this, DW_AT_entry_pc, 0); + base_addr = cu_die.GetAttributeValueAsAddress(this, DW_AT_entry_pc, 0); SetBaseAddress(base_addr); std::unique_ptr<SymbolFileDWARFDwo> dwo_symbol_file = @@ -312,7 +311,7 @@ void DWARFUnit::AddUnitDIE(const DWARFDebugInfoEntry &cu_die) { return; // Can't fetch the compile unit DIE from the dwo file. uint64_t main_dwo_id = - cu_die.GetAttributeValueAsUnsigned(m_dwarf, this, DW_AT_GNU_dwo_id, 0); + cu_die.GetAttributeValueAsUnsigned(this, DW_AT_GNU_dwo_id, 0); uint64_t sub_dwo_id = dwo_cu_die.GetAttributeValueAsUnsigned(DW_AT_GNU_dwo_id, 0); if (main_dwo_id != sub_dwo_id) @@ -328,13 +327,13 @@ void DWARFUnit::AddUnitDIE(const DWARFDebugInfoEntry &cu_die) { // DW_AT_* attributes standardized in DWARF v5 are also applicable to the main // unit in contrast. if (addr_base == LLDB_INVALID_ADDRESS) - addr_base = cu_die.GetAttributeValueAsUnsigned(m_dwarf, this, - DW_AT_GNU_addr_base, 0); + addr_base = + cu_die.GetAttributeValueAsUnsigned(this, DW_AT_GNU_addr_base, 0); dwo_cu->SetAddrBase(addr_base); if (ranges_base == LLDB_INVALID_ADDRESS) - ranges_base = cu_die.GetAttributeValueAsUnsigned(m_dwarf, this, - DW_AT_GNU_ranges_base, 0); + ranges_base = + cu_die.GetAttributeValueAsUnsigned(this, DW_AT_GNU_ranges_base, 0); dwo_cu->SetRangesBase(ranges_base); dwo_cu->SetBaseObjOffset(GetOffset()); @@ -406,8 +405,7 @@ void DWARFUnit::ClearDIEsRWLocked() { m_dwo_symbol_file->GetCompileUnit()->ClearDIEsRWLocked(); } -void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, - DWARFDebugAranges *debug_aranges) { +void DWARFUnit::BuildAddressRangeTable(DWARFDebugAranges *debug_aranges) { // This function is usually called if there in no .debug_aranges section in // order to produce a compile unit level set of address ranges that is // accurate. @@ -421,7 +419,7 @@ void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, if (die) { DWARFRangeList ranges; const size_t num_ranges = - die->GetAttributeAddressRanges(dwarf, this, ranges, false); + die->GetAttributeAddressRanges(this, ranges, false); if (num_ranges > 0) { // This compile unit has DW_AT_ranges, assume this is correct if it is // present since clang no longer makes .debug_aranges by default and it @@ -445,13 +443,13 @@ void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, die = DIEPtr(); if (die) - die->BuildAddressRangeTable(dwarf, this, debug_aranges); + die->BuildAddressRangeTable(this, debug_aranges); if (debug_aranges->GetNumRanges() == num_debug_aranges) { // 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 = dwarf->GetCompUnitForDWARFCompUnit(this); + sc.comp_unit = m_dwarf->GetCompUnitForDWARFCompUnit(this); if (sc.comp_unit) { SymbolFileDWARFDebugMap *debug_map_sym_file = m_dwarf->GetDebugMapSymfile(); @@ -471,7 +469,7 @@ void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, } } } else - debug_map_sym_file->AddOSOARanges(dwarf, debug_aranges); + debug_map_sym_file->AddOSOARanges(m_dwarf, debug_aranges); } } @@ -479,7 +477,7 @@ void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, // 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 = dwarf->GetCompUnitForDWARFCompUnit(this); + sc.comp_unit = m_dwarf->GetCompUnitForDWARFCompUnit(this); if (sc.comp_unit) { LineTable *line_table = sc.comp_unit->GetLineTable(); @@ -597,7 +595,7 @@ void DWARFUnit::ParseProducerInfo() { if (die) { const char *producer_cstr = - die->GetAttributeValueAsString(m_dwarf, this, DW_AT_producer, NULL); + die->GetAttributeValueAsString(this, DW_AT_producer, NULL); if (producer_cstr) { RegularExpression llvm_gcc_regex( llvm::StringRef("^4\\.[012]\\.[01] \\(Based on Apple " @@ -674,7 +672,7 @@ LanguageType DWARFUnit::GetLanguageType() { const DWARFDebugInfoEntry *die = GetUnitDIEPtrOnly(); if (die) m_language_type = LanguageTypeFromDWARF( - die->GetAttributeValueAsUnsigned(m_dwarf, this, DW_AT_language, 0)); + die->GetAttributeValueAsUnsigned(this, DW_AT_language, 0)); return m_language_type; } @@ -683,8 +681,8 @@ bool DWARFUnit::GetIsOptimized() { const DWARFDebugInfoEntry *die = GetUnitDIEPtrOnly(); if (die) { m_is_optimized = eLazyBoolNo; - if (die->GetAttributeValueAsUnsigned(m_dwarf, this, DW_AT_APPLE_optimized, - 0) == 1) { + if (die->GetAttributeValueAsUnsigned(this, DW_AT_APPLE_optimized, 0) == + 1) { m_is_optimized = eLazyBoolYes; } } @@ -748,7 +746,7 @@ void DWARFUnit::ComputeCompDirAndGuessPathStyle() { return; llvm::StringRef comp_dir = removeHostnameFromPathname( - die->GetAttributeValueAsString(m_dwarf, this, DW_AT_comp_dir, NULL)); + die->GetAttributeValueAsString(this, DW_AT_comp_dir, NULL)); if (!comp_dir.empty()) { FileSpec::Style comp_dir_style = FileSpec::GuessPathStyle(comp_dir).getValueOr(FileSpec::Style::native); @@ -756,8 +754,7 @@ void DWARFUnit::ComputeCompDirAndGuessPathStyle() { } else { // Try to detect the style based on the DW_AT_name attribute, but just store // the detected style in the m_comp_dir field. - const char *name = - die->GetAttributeValueAsString(m_dwarf, this, DW_AT_name, NULL); + const char *name = die->GetAttributeValueAsString(this, DW_AT_name, NULL); m_comp_dir = FileSpec( "", FileSpec::GuessPathStyle(name).getValueOr(FileSpec::Style::native)); } @@ -774,14 +771,13 @@ const DWARFDebugAranges &DWARFUnit::GetFunctionAranges() { m_func_aranges_up.reset(new DWARFDebugAranges()); const DWARFDebugInfoEntry *die = DIEPtr(); if (die) - die->BuildFunctionAddressRangeTable(m_dwarf, this, - m_func_aranges_up.get()); + die->BuildFunctionAddressRangeTable(this, m_func_aranges_up.get()); if (m_dwo_symbol_file) { DWARFUnit *dwo_cu = m_dwo_symbol_file->GetCompileUnit(); const DWARFDebugInfoEntry *dwo_die = dwo_cu->DIEPtr(); if (dwo_die) - dwo_die->BuildFunctionAddressRangeTable(m_dwo_symbol_file.get(), dwo_cu, + dwo_die->BuildFunctionAddressRangeTable(dwo_cu, m_func_aranges_up.get()); } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h index 944b146d898..9ba041ada85 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h @@ -143,8 +143,7 @@ public: void SetRangesBase(dw_addr_t ranges_base); void SetBaseObjOffset(dw_offset_t base_obj_offset); void SetStrOffsetsBase(dw_offset_t str_offsets_base); - void BuildAddressRangeTable(SymbolFileDWARF *dwarf, - DWARFDebugAranges *debug_aranges); + void BuildAddressRangeTable(DWARFDebugAranges *debug_aranges); lldb::ByteOrder GetByteOrder() const; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 66ad3ade5ff..c713e24232a 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -1485,15 +1485,15 @@ SymbolFileDWARF::GetDwoSymbolFileForCompileUnit( if (GetDebugMapSymfile()) return nullptr; - const char *dwo_name = cu_die.GetAttributeValueAsString( - this, &dwarf_cu, DW_AT_GNU_dwo_name, nullptr); + const char *dwo_name = + cu_die.GetAttributeValueAsString(&dwarf_cu, DW_AT_GNU_dwo_name, nullptr); if (!dwo_name) return nullptr; SymbolFileDWARFDwp *dwp_symfile = GetDwpSymbolFile(); if (dwp_symfile) { - uint64_t dwo_id = cu_die.GetAttributeValueAsUnsigned(this, &dwarf_cu, - DW_AT_GNU_dwo_id, 0); + uint64_t dwo_id = + cu_die.GetAttributeValueAsUnsigned(&dwarf_cu, DW_AT_GNU_dwo_id, 0); std::unique_ptr<SymbolFileDWARFDwo> dwo_symfile = dwp_symfile->GetSymbolFileForDwoId(&dwarf_cu, dwo_id); if (dwo_symfile) @@ -1503,8 +1503,8 @@ SymbolFileDWARF::GetDwoSymbolFileForCompileUnit( FileSpec dwo_file(dwo_name); FileSystem::Instance().Resolve(dwo_file); if (dwo_file.IsRelative()) { - const char *comp_dir = cu_die.GetAttributeValueAsString( - this, &dwarf_cu, DW_AT_comp_dir, nullptr); + const char *comp_dir = + cu_die.GetAttributeValueAsString(&dwarf_cu, DW_AT_comp_dir, nullptr); if (!comp_dir) return nullptr; |