forked from OSchip/llvm-project
Remove DWARFDIECollection.
This is a very thin wrapper over a std::vector<DWARFDIE> and does not seem to provide any real value over just using a container directly. Differential Revision: https://reviews.llvm.org/D59165 llvm-svn: 355974
This commit is contained in:
parent
d5364dfa6d
commit
0eaa6d5b01
|
@ -21,7 +21,6 @@ add_lldb_library(lldbPluginSymbolFileDWARF PLUGIN
|
||||||
DWARFDeclContext.cpp
|
DWARFDeclContext.cpp
|
||||||
DWARFDefines.cpp
|
DWARFDefines.cpp
|
||||||
DWARFDIE.cpp
|
DWARFDIE.cpp
|
||||||
DWARFDIECollection.cpp
|
|
||||||
DWARFFormValue.cpp
|
DWARFFormValue.cpp
|
||||||
DWARFIndex.cpp
|
DWARFIndex.cpp
|
||||||
DWARFUnit.cpp
|
DWARFUnit.cpp
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
#include "DWARFASTParserClang.h"
|
#include "DWARFASTParserClang.h"
|
||||||
#include "DWARFDIE.h"
|
#include "DWARFDIE.h"
|
||||||
#include "DWARFDIECollection.h"
|
|
||||||
#include "DWARFDebugInfo.h"
|
#include "DWARFDebugInfo.h"
|
||||||
#include "DWARFDeclContext.h"
|
#include "DWARFDeclContext.h"
|
||||||
#include "DWARFDefines.h"
|
#include "DWARFDefines.h"
|
||||||
|
@ -1393,7 +1392,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc,
|
||||||
DIERef(class_type->GetID(), dwarf));
|
DIERef(class_type->GetID(), dwarf));
|
||||||
}
|
}
|
||||||
if (class_type_die) {
|
if (class_type_die) {
|
||||||
DWARFDIECollection failures;
|
std::vector<DWARFDIE> failures;
|
||||||
|
|
||||||
CopyUniqueClassMethodTypes(decl_ctx_die, class_type_die,
|
CopyUniqueClassMethodTypes(decl_ctx_die, class_type_die,
|
||||||
class_type, failures);
|
class_type, failures);
|
||||||
|
@ -2194,7 +2193,7 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die,
|
||||||
std::vector<int> member_accessibilities;
|
std::vector<int> member_accessibilities;
|
||||||
bool is_a_class = false;
|
bool is_a_class = false;
|
||||||
// Parse members and base classes first
|
// Parse members and base classes first
|
||||||
DWARFDIECollection member_function_dies;
|
std::vector<DWARFDIE> member_function_dies;
|
||||||
|
|
||||||
DelayedPropertyList delayed_properties;
|
DelayedPropertyList delayed_properties;
|
||||||
ParseChildMembers(sc, die, clang_type, class_language, bases,
|
ParseChildMembers(sc, die, clang_type, class_language, bases,
|
||||||
|
@ -2203,12 +2202,8 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die,
|
||||||
layout_info);
|
layout_info);
|
||||||
|
|
||||||
// Now parse any methods if there were any...
|
// Now parse any methods if there were any...
|
||||||
size_t num_functions = member_function_dies.Size();
|
for (const DWARFDIE &die : member_function_dies)
|
||||||
if (num_functions > 0) {
|
dwarf->ResolveType(die);
|
||||||
for (size_t i = 0; i < num_functions; ++i) {
|
|
||||||
dwarf->ResolveType(member_function_dies.GetDIEAtIndex(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (class_language == eLanguageTypeObjC) {
|
if (class_language == eLanguageTypeObjC) {
|
||||||
ConstString class_name(clang_type.GetTypeName());
|
ConstString class_name(clang_type.GetTypeName());
|
||||||
|
@ -2677,7 +2672,7 @@ bool DWARFASTParserClang::ParseChildMembers(
|
||||||
CompilerType &class_clang_type, const LanguageType class_language,
|
CompilerType &class_clang_type, const LanguageType class_language,
|
||||||
std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> &base_classes,
|
std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> &base_classes,
|
||||||
std::vector<int> &member_accessibilities,
|
std::vector<int> &member_accessibilities,
|
||||||
DWARFDIECollection &member_function_dies,
|
std::vector<DWARFDIE> &member_function_dies,
|
||||||
DelayedPropertyList &delayed_properties, AccessType &default_accessibility,
|
DelayedPropertyList &delayed_properties, AccessType &default_accessibility,
|
||||||
bool &is_a_class, ClangASTImporter::LayoutInfo &layout_info) {
|
bool &is_a_class, ClangASTImporter::LayoutInfo &layout_info) {
|
||||||
if (!parent_die)
|
if (!parent_die)
|
||||||
|
@ -3176,7 +3171,7 @@ bool DWARFASTParserClang::ParseChildMembers(
|
||||||
|
|
||||||
case DW_TAG_subprogram:
|
case DW_TAG_subprogram:
|
||||||
// Let the type parsing code handle this one for us.
|
// Let the type parsing code handle this one for us.
|
||||||
member_function_dies.Append(die);
|
member_function_dies.push_back(die);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_TAG_inheritance: {
|
case DW_TAG_inheritance: {
|
||||||
|
@ -3872,7 +3867,7 @@ void DWARFASTParserClang::LinkDeclContextToDIE(clang::DeclContext *decl_ctx,
|
||||||
|
|
||||||
bool DWARFASTParserClang::CopyUniqueClassMethodTypes(
|
bool DWARFASTParserClang::CopyUniqueClassMethodTypes(
|
||||||
const DWARFDIE &src_class_die, const DWARFDIE &dst_class_die,
|
const DWARFDIE &src_class_die, const DWARFDIE &dst_class_die,
|
||||||
lldb_private::Type *class_type, DWARFDIECollection &failures) {
|
lldb_private::Type *class_type, std::vector<DWARFDIE> &failures) {
|
||||||
if (!class_type || !src_class_die || !dst_class_die)
|
if (!class_type || !src_class_die || !dst_class_die)
|
||||||
return false;
|
return false;
|
||||||
if (src_class_die.Tag() != dst_class_die.Tag())
|
if (src_class_die.Tag() != dst_class_die.Tag())
|
||||||
|
@ -4077,7 +4072,7 @@ bool DWARFASTParserClang::CopyUniqueClassMethodTypes(
|
||||||
log->Printf("warning: couldn't find a match for 0x%8.8x",
|
log->Printf("warning: couldn't find a match for 0x%8.8x",
|
||||||
dst_die.GetOffset());
|
dst_die.GetOffset());
|
||||||
|
|
||||||
failures.Append(dst_die);
|
failures.push_back(dst_die);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4142,9 +4137,9 @@ bool DWARFASTParserClang::CopyUniqueClassMethodTypes(
|
||||||
"method '%s'",
|
"method '%s'",
|
||||||
dst_die.GetOffset(), dst_name_artificial.GetCString());
|
dst_die.GetOffset(), dst_name_artificial.GetCString());
|
||||||
|
|
||||||
failures.Append(dst_die);
|
failures.push_back(dst_die);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (failures.Size() != 0);
|
return !failures.empty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,12 @@
|
||||||
#include "lldb/Symbol/ClangASTContext.h"
|
#include "lldb/Symbol/ClangASTContext.h"
|
||||||
#include "lldb/Symbol/ClangASTImporter.h"
|
#include "lldb/Symbol/ClangASTImporter.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace lldb_private {
|
namespace lldb_private {
|
||||||
class CompileUnit;
|
class CompileUnit;
|
||||||
}
|
}
|
||||||
class DWARFDebugInfoEntry;
|
class DWARFDebugInfoEntry;
|
||||||
class DWARFDIECollection;
|
|
||||||
class SymbolFileDWARF;
|
class SymbolFileDWARF;
|
||||||
|
|
||||||
class DWARFASTParserClang : public DWARFASTParser {
|
class DWARFASTParserClang : public DWARFASTParser {
|
||||||
|
@ -85,7 +86,7 @@ protected:
|
||||||
const lldb::LanguageType class_language,
|
const lldb::LanguageType class_language,
|
||||||
std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> &base_classes,
|
std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> &base_classes,
|
||||||
std::vector<int> &member_accessibilities,
|
std::vector<int> &member_accessibilities,
|
||||||
DWARFDIECollection &member_function_dies,
|
std::vector<DWARFDIE> &member_function_dies,
|
||||||
DelayedPropertyList &delayed_properties,
|
DelayedPropertyList &delayed_properties,
|
||||||
lldb::AccessType &default_accessibility, bool &is_a_class,
|
lldb::AccessType &default_accessibility, bool &is_a_class,
|
||||||
lldb_private::ClangASTImporter::LayoutInfo &layout_info);
|
lldb_private::ClangASTImporter::LayoutInfo &layout_info);
|
||||||
|
@ -117,7 +118,7 @@ protected:
|
||||||
bool CopyUniqueClassMethodTypes(const DWARFDIE &src_class_die,
|
bool CopyUniqueClassMethodTypes(const DWARFDIE &src_class_die,
|
||||||
const DWARFDIE &dst_class_die,
|
const DWARFDIE &dst_class_die,
|
||||||
lldb_private::Type *class_type,
|
lldb_private::Type *class_type,
|
||||||
DWARFDIECollection &failures);
|
std::vector<DWARFDIE> &failures);
|
||||||
|
|
||||||
clang::DeclContext *GetCachedClangDeclContextForDIE(const DWARFDIE &die);
|
clang::DeclContext *GetCachedClangDeclContextForDIE(const DWARFDIE &die);
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ class DWARFAttributes;
|
||||||
class DWARFUnit;
|
class DWARFUnit;
|
||||||
class DWARFDebugInfoEntry;
|
class DWARFDebugInfoEntry;
|
||||||
class DWARFDeclContext;
|
class DWARFDeclContext;
|
||||||
class DWARFDIECollection;
|
|
||||||
class SymbolFileDWARF;
|
class SymbolFileDWARF;
|
||||||
|
|
||||||
class DWARFBaseDIE {
|
class DWARFBaseDIE {
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include "DWARFDIE.h"
|
#include "DWARFDIE.h"
|
||||||
|
|
||||||
#include "DWARFASTParser.h"
|
#include "DWARFASTParser.h"
|
||||||
#include "DWARFDIECollection.h"
|
|
||||||
#include "DWARFDebugInfo.h"
|
#include "DWARFDebugInfo.h"
|
||||||
#include "DWARFDebugInfoEntry.h"
|
#include "DWARFDebugInfoEntry.h"
|
||||||
#include "DWARFDeclContext.h"
|
#include "DWARFDeclContext.h"
|
||||||
|
@ -200,15 +199,18 @@ lldb_private::Type *DWARFDIE::ResolveTypeUID(const DIERef &die_ref) const {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DWARFDIE::GetDeclContextDIEs(DWARFDIECollection &decl_context_dies) const {
|
std::vector<DWARFDIE> DWARFDIE::GetDeclContextDIEs() const {
|
||||||
if (IsValid()) {
|
if (!IsValid())
|
||||||
DWARFDIE parent_decl_ctx_die =
|
return {};
|
||||||
m_die->GetParentDeclContextDIE(GetDWARF(), GetCU());
|
|
||||||
if (parent_decl_ctx_die && parent_decl_ctx_die.GetDIE() != GetDIE()) {
|
std::vector<DWARFDIE> result;
|
||||||
decl_context_dies.Append(parent_decl_ctx_die);
|
DWARFDIE parent = GetParentDeclContextDIE();
|
||||||
parent_decl_ctx_die.GetDeclContextDIEs(decl_context_dies);
|
while (parent.IsValid() && parent.GetDIE() != GetDIE()) {
|
||||||
}
|
result.push_back(std::move(parent));
|
||||||
|
parent = parent.GetParentDeclContextDIE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DWARFDIE::GetDWARFDeclContext(DWARFDeclContext &dwarf_decl_ctx) const {
|
void DWARFDIE::GetDWARFDeclContext(DWARFDeclContext &dwarf_decl_ctx) const {
|
||||||
|
|
|
@ -81,7 +81,7 @@ public:
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// DeclContext related functions
|
// DeclContext related functions
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void GetDeclContextDIEs(DWARFDIECollection &decl_context_dies) const;
|
std::vector<DWARFDIE> GetDeclContextDIEs() const;
|
||||||
|
|
||||||
void GetDWARFDeclContext(DWARFDeclContext &dwarf_decl_ctx) const;
|
void GetDWARFDeclContext(DWARFDeclContext &dwarf_decl_ctx) const;
|
||||||
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
//===-- DWARFDIECollection.cpp ----------------------------------*- C++ -*-===//
|
|
||||||
//
|
|
||||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
|
||||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
#include "DWARFDIECollection.h"
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include "lldb/Utility/Stream.h"
|
|
||||||
|
|
||||||
using namespace lldb_private;
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
void DWARFDIECollection::Append(const DWARFDIE &die) { m_dies.push_back(die); }
|
|
||||||
|
|
||||||
DWARFDIE
|
|
||||||
DWARFDIECollection::GetDIEAtIndex(uint32_t idx) const {
|
|
||||||
if (idx < m_dies.size())
|
|
||||||
return m_dies[idx];
|
|
||||||
return DWARFDIE();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t DWARFDIECollection::Size() const { return m_dies.size(); }
|
|
||||||
|
|
||||||
void DWARFDIECollection::Dump(Stream *s, const char *title) const {
|
|
||||||
if (title && title[0] != '\0')
|
|
||||||
s->Printf("%s\n", title);
|
|
||||||
for (const auto &die : m_dies)
|
|
||||||
s->Printf("0x%8.8x\n", die.GetOffset());
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
//===-- DWARFDIECollection.h ------------------------------------*- C++ -*-===//
|
|
||||||
//
|
|
||||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
|
||||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
#ifndef SymbolFileDWARF_DWARFDIECollection_h_
|
|
||||||
#define SymbolFileDWARF_DWARFDIECollection_h_
|
|
||||||
|
|
||||||
#include "DWARFDIE.h"
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
class DWARFDIECollection {
|
|
||||||
public:
|
|
||||||
DWARFDIECollection() : m_dies() {}
|
|
||||||
~DWARFDIECollection() {}
|
|
||||||
|
|
||||||
void Append(const DWARFDIE &die);
|
|
||||||
|
|
||||||
void Dump(lldb_private::Stream *s, const char *title) const;
|
|
||||||
|
|
||||||
DWARFDIE
|
|
||||||
GetDIEAtIndex(uint32_t idx) const;
|
|
||||||
|
|
||||||
size_t Size() const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
typedef std::vector<DWARFDIE> collection;
|
|
||||||
typedef collection::iterator iterator;
|
|
||||||
typedef collection::const_iterator const_iterator;
|
|
||||||
|
|
||||||
collection m_dies; // Ordered list of die offsets
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SymbolFileDWARF_DWARFDIECollection_h_
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "lldb/Utility/Stream.h"
|
#include "lldb/Utility/Stream.h"
|
||||||
|
|
||||||
#include "DWARFUnit.h"
|
#include "DWARFUnit.h"
|
||||||
#include "DWARFDIECollection.h"
|
|
||||||
#include "DWARFDebugAbbrev.h"
|
#include "DWARFDebugAbbrev.h"
|
||||||
#include "DWARFDebugAranges.h"
|
#include "DWARFDebugAranges.h"
|
||||||
#include "DWARFDebugInfo.h"
|
#include "DWARFDebugInfo.h"
|
||||||
|
@ -1381,11 +1380,11 @@ void DWARFDebugInfoEntry::BuildFunctionAddressRangeTable(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DWARFDebugInfoEntry::GetDeclContextDIEs(
|
std::vector<DWARFDIE>
|
||||||
DWARFUnit *cu, DWARFDIECollection &decl_context_dies) const {
|
DWARFDebugInfoEntry::GetDeclContextDIEs(DWARFUnit *cu) const {
|
||||||
|
|
||||||
DWARFDIE die(cu, const_cast<DWARFDebugInfoEntry *>(this));
|
DWARFDIE die(cu, const_cast<DWARFDebugInfoEntry *>(this));
|
||||||
die.GetDeclContextDIEs(decl_context_dies);
|
return die.GetDeclContextDIEs();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DWARFDebugInfoEntry::GetDWARFDeclContext(
|
void DWARFDebugInfoEntry::GetDWARFDeclContext(
|
||||||
|
|
|
@ -230,8 +230,7 @@ public:
|
||||||
return HasChildren() ? this + 1 : NULL;
|
return HasChildren() ? this + 1 : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetDeclContextDIEs(DWARFUnit *cu,
|
std::vector<DWARFDIE> GetDeclContextDIEs(DWARFUnit *cu) const;
|
||||||
DWARFDIECollection &decl_context_dies) const;
|
|
||||||
|
|
||||||
void GetDWARFDeclContext(SymbolFileDWARF *dwarf2Data, DWARFUnit *cu,
|
void GetDWARFDeclContext(SymbolFileDWARF *dwarf2Data, DWARFUnit *cu,
|
||||||
DWARFDeclContext &dwarf_decl_ctx) const;
|
DWARFDeclContext &dwarf_decl_ctx) const;
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include "lldb/Utility/StreamString.h"
|
#include "lldb/Utility/StreamString.h"
|
||||||
#include "lldb/Utility/Timer.h"
|
#include "lldb/Utility/Timer.h"
|
||||||
|
|
||||||
#include "DWARFDIECollection.h"
|
|
||||||
#include "DWARFDebugAranges.h"
|
#include "DWARFDebugAranges.h"
|
||||||
#include "DWARFDebugInfo.h"
|
#include "DWARFDebugInfo.h"
|
||||||
#include "LogChannelDWARF.h"
|
#include "LogChannelDWARF.h"
|
||||||
|
@ -400,24 +399,23 @@ DWARFDIE DWARFUnit::LookupAddress(const dw_addr_t address) {
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DWARFUnit::AppendDIEsWithTag(const dw_tag_t tag,
|
size_t DWARFUnit::AppendDIEsWithTag(const dw_tag_t tag,
|
||||||
DWARFDIECollection &dies,
|
std::vector<DWARFDIE> &dies,
|
||||||
uint32_t depth) const {
|
uint32_t depth) const {
|
||||||
size_t old_size = dies.Size();
|
size_t old_size = dies.size();
|
||||||
{
|
{
|
||||||
llvm::sys::ScopedReader lock(m_die_array_mutex);
|
llvm::sys::ScopedReader lock(m_die_array_mutex);
|
||||||
DWARFDebugInfoEntry::const_iterator pos;
|
DWARFDebugInfoEntry::const_iterator pos;
|
||||||
DWARFDebugInfoEntry::const_iterator end = m_die_array.end();
|
DWARFDebugInfoEntry::const_iterator end = m_die_array.end();
|
||||||
for (pos = m_die_array.begin(); pos != end; ++pos) {
|
for (pos = m_die_array.begin(); pos != end; ++pos) {
|
||||||
if (pos->Tag() == tag)
|
if (pos->Tag() == tag)
|
||||||
dies.Append(DWARFDIE(this, &(*pos)));
|
dies.emplace_back(this, &(*pos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the number of DIEs added to the collection
|
// Return the number of DIEs added to the collection
|
||||||
return dies.Size() - old_size;
|
return dies.size() - old_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
lldb::user_id_t DWARFUnit::GetID() const {
|
lldb::user_id_t DWARFUnit::GetID() const {
|
||||||
dw_offset_t local_id =
|
dw_offset_t local_id =
|
||||||
m_base_obj_offset != DW_INVALID_OFFSET ? m_base_obj_offset : m_offset;
|
m_base_obj_offset != DW_INVALID_OFFSET ? m_base_obj_offset : m_offset;
|
||||||
|
|
|
@ -54,8 +54,7 @@ public:
|
||||||
ScopedExtractDIEs ExtractDIEsScoped();
|
ScopedExtractDIEs ExtractDIEsScoped();
|
||||||
|
|
||||||
DWARFDIE LookupAddress(const dw_addr_t address);
|
DWARFDIE LookupAddress(const dw_addr_t address);
|
||||||
size_t AppendDIEsWithTag(const dw_tag_t tag,
|
size_t AppendDIEsWithTag(const dw_tag_t tag, std::vector<DWARFDIE> &dies,
|
||||||
DWARFDIECollection &matching_dies,
|
|
||||||
uint32_t depth = UINT32_MAX) const;
|
uint32_t depth = UINT32_MAX) const;
|
||||||
bool Verify(lldb_private::Stream *s) const;
|
bool Verify(lldb_private::Stream *s) const;
|
||||||
virtual void Dump(lldb_private::Stream *s) const = 0;
|
virtual void Dump(lldb_private::Stream *s) const = 0;
|
||||||
|
|
|
@ -54,7 +54,6 @@
|
||||||
#include "AppleDWARFIndex.h"
|
#include "AppleDWARFIndex.h"
|
||||||
#include "DWARFASTParser.h"
|
#include "DWARFASTParser.h"
|
||||||
#include "DWARFASTParserClang.h"
|
#include "DWARFASTParserClang.h"
|
||||||
#include "DWARFDIECollection.h"
|
|
||||||
#include "DWARFDebugAbbrev.h"
|
#include "DWARFDebugAbbrev.h"
|
||||||
#include "DWARFDebugAranges.h"
|
#include "DWARFDebugAranges.h"
|
||||||
#include "DWARFDebugInfo.h"
|
#include "DWARFDebugInfo.h"
|
||||||
|
@ -861,22 +860,20 @@ lldb::LanguageType SymbolFileDWARF::ParseLanguage(CompileUnit &comp_unit) {
|
||||||
|
|
||||||
size_t SymbolFileDWARF::ParseFunctions(CompileUnit &comp_unit) {
|
size_t SymbolFileDWARF::ParseFunctions(CompileUnit &comp_unit) {
|
||||||
ASSERT_MODULE_LOCK(this);
|
ASSERT_MODULE_LOCK(this);
|
||||||
size_t functions_added = 0;
|
|
||||||
DWARFUnit *dwarf_cu = GetDWARFCompileUnit(&comp_unit);
|
DWARFUnit *dwarf_cu = GetDWARFCompileUnit(&comp_unit);
|
||||||
if (dwarf_cu) {
|
if (!dwarf_cu)
|
||||||
DWARFDIECollection function_dies;
|
return 0;
|
||||||
const size_t num_functions =
|
|
||||||
dwarf_cu->AppendDIEsWithTag(DW_TAG_subprogram, function_dies);
|
size_t functions_added = 0;
|
||||||
size_t func_idx;
|
std::vector<DWARFDIE> function_dies;
|
||||||
for (func_idx = 0; func_idx < num_functions; ++func_idx) {
|
dwarf_cu->AppendDIEsWithTag(DW_TAG_subprogram, function_dies);
|
||||||
DWARFDIE die = function_dies.GetDIEAtIndex(func_idx);
|
for (const DWARFDIE &die : function_dies) {
|
||||||
if (comp_unit.FindFunctionByUID(die.GetID()).get() == NULL) {
|
if (comp_unit.FindFunctionByUID(die.GetID()))
|
||||||
if (ParseFunction(comp_unit, die))
|
continue;
|
||||||
++functions_added;
|
if (ParseFunction(comp_unit, die))
|
||||||
}
|
++functions_added;
|
||||||
}
|
|
||||||
// FixupTypes();
|
|
||||||
}
|
}
|
||||||
|
// FixupTypes();
|
||||||
return functions_added;
|
return functions_added;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2807,8 +2804,8 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1,
|
||||||
if (die1 == die2)
|
if (die1 == die2)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
DWARFDIECollection decl_ctx_1;
|
std::vector<DWARFDIE> decl_ctx_1;
|
||||||
DWARFDIECollection decl_ctx_2;
|
std::vector<DWARFDIE> decl_ctx_2;
|
||||||
// The declaration DIE stack is a stack of the declaration context DIEs all
|
// The declaration DIE stack is a stack of the declaration context DIEs all
|
||||||
// the way back to the compile unit. If a type "T" is declared inside a class
|
// the way back to the compile unit. If a type "T" is declared inside a class
|
||||||
// "B", and class "B" is declared inside a class "A" and class "A" is in a
|
// "B", and class "B" is declared inside a class "A" and class "A" is in a
|
||||||
|
@ -2824,11 +2821,11 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1,
|
||||||
// back to the compiler unit.
|
// back to the compiler unit.
|
||||||
|
|
||||||
// First lets grab the decl contexts for both DIEs
|
// First lets grab the decl contexts for both DIEs
|
||||||
die1.GetDeclContextDIEs(decl_ctx_1);
|
decl_ctx_1 = die1.GetDeclContextDIEs();
|
||||||
die2.GetDeclContextDIEs(decl_ctx_2);
|
decl_ctx_2 = die2.GetDeclContextDIEs();
|
||||||
// Make sure the context arrays have the same size, otherwise we are done
|
// Make sure the context arrays have the same size, otherwise we are done
|
||||||
const size_t count1 = decl_ctx_1.Size();
|
const size_t count1 = decl_ctx_1.size();
|
||||||
const size_t count2 = decl_ctx_2.Size();
|
const size_t count2 = decl_ctx_2.size();
|
||||||
if (count1 != count2)
|
if (count1 != count2)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -2838,8 +2835,8 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1,
|
||||||
DWARFDIE decl_ctx_die2;
|
DWARFDIE decl_ctx_die2;
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i = 0; i < count1; i++) {
|
for (i = 0; i < count1; i++) {
|
||||||
decl_ctx_die1 = decl_ctx_1.GetDIEAtIndex(i);
|
decl_ctx_die1 = decl_ctx_1[i];
|
||||||
decl_ctx_die2 = decl_ctx_2.GetDIEAtIndex(i);
|
decl_ctx_die2 = decl_ctx_2[i];
|
||||||
if (decl_ctx_die1.Tag() != decl_ctx_die2.Tag())
|
if (decl_ctx_die1.Tag() != decl_ctx_die2.Tag())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2849,7 +2846,7 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1,
|
||||||
// DW_TAG_compile_unit or DW_TAG_partial_unit. If it isn't then
|
// DW_TAG_compile_unit or DW_TAG_partial_unit. If it isn't then
|
||||||
// something went wrong in the DWARFDIE::GetDeclContextDIEs()
|
// something went wrong in the DWARFDIE::GetDeclContextDIEs()
|
||||||
// function.
|
// function.
|
||||||
dw_tag_t cu_tag = decl_ctx_1.GetDIEAtIndex(count1 - 1).Tag();
|
dw_tag_t cu_tag = decl_ctx_1[count1 - 1].Tag();
|
||||||
UNUSED_IF_ASSERT_DISABLED(cu_tag);
|
UNUSED_IF_ASSERT_DISABLED(cu_tag);
|
||||||
assert(cu_tag == DW_TAG_compile_unit || cu_tag == DW_TAG_partial_unit);
|
assert(cu_tag == DW_TAG_compile_unit || cu_tag == DW_TAG_partial_unit);
|
||||||
|
|
||||||
|
@ -2857,8 +2854,8 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1,
|
||||||
// Always skip the compile unit when comparing by only iterating up to "count
|
// Always skip the compile unit when comparing by only iterating up to "count
|
||||||
// - 1". Here we compare the names as we go.
|
// - 1". Here we compare the names as we go.
|
||||||
for (i = 0; i < count1 - 1; i++) {
|
for (i = 0; i < count1 - 1; i++) {
|
||||||
decl_ctx_die1 = decl_ctx_1.GetDIEAtIndex(i);
|
decl_ctx_die1 = decl_ctx_1[i];
|
||||||
decl_ctx_die2 = decl_ctx_2.GetDIEAtIndex(i);
|
decl_ctx_die2 = decl_ctx_2[i];
|
||||||
const char *name1 = decl_ctx_die1.GetName();
|
const char *name1 = decl_ctx_die1.GetName();
|
||||||
const char *name2 = decl_ctx_die2.GetName();
|
const char *name2 = decl_ctx_die2.GetName();
|
||||||
// If the string was from a DW_FORM_strp, then the pointer will often be
|
// If the string was from a DW_FORM_strp, then the pointer will often be
|
||||||
|
|
|
@ -49,7 +49,6 @@ class DWARFDebugInfoEntry;
|
||||||
class DWARFDebugLine;
|
class DWARFDebugLine;
|
||||||
class DWARFDebugRangesBase;
|
class DWARFDebugRangesBase;
|
||||||
class DWARFDeclContext;
|
class DWARFDeclContext;
|
||||||
class DWARFDIECollection;
|
|
||||||
class DWARFFormValue;
|
class DWARFFormValue;
|
||||||
class SymbolFileDWARFDebugMap;
|
class SymbolFileDWARFDebugMap;
|
||||||
class SymbolFileDWARFDwo;
|
class SymbolFileDWARFDwo;
|
||||||
|
|
Loading…
Reference in New Issue