diff options
| author | Pavel Labath <labath@google.com> | 2016-03-31 13:30:04 +0000 |
|---|---|---|
| committer | Pavel Labath <labath@google.com> | 2016-03-31 13:30:04 +0000 |
| commit | 63168e08bdd71641d75cb03300730a852c6540a4 (patch) | |
| tree | 8ec72cbcded65d3e15e8fb0b9105f6df925325d7 | |
| parent | 2e9f69d933308b781ba333989e4045ca10216b0d (diff) | |
| download | bcm5719-llvm-63168e08bdd71641d75cb03300730a852c6540a4.tar.gz bcm5719-llvm-63168e08bdd71641d75cb03300730a852c6540a4.zip | |
Fix DWO breakage in r264909
Summary:
In case of Dwo, DIERef stores a compile unit offset in the main object file, and not in the dwo.
The implementation of SymbolFileDWARFDwo::GetDIE inherited from SymbolFileDWARF tried to lookup
the compilation unit in the DWO based on the main object file offset (and failed). I change the
implementation to verify the DIERef indeed references compile unit belonging to this dwo and then
lookup the die based on the die offset alone.
Includes a couple of fixes for mismatched struct/class tags.
Reviewers: tberghammer, clayborg
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D18646
llvm-svn: 265011
4 files changed, 13 insertions, 3 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h index 529284e4d5e..c0314e200ce 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -68,7 +68,7 @@ public: friend class SymbolFileDWARFDebugMap; friend class SymbolFileDWARFDwo; friend class DebugMapModule; - friend class DIERef; + friend struct DIERef; friend class DWARFCompileUnit; friend class DWARFDIE; friend class DWARFASTParserClang; @@ -326,7 +326,7 @@ public: lldb::ModuleSP GetDWOModule (lldb_private::ConstString name); - DWARFDIE + virtual DWARFDIE GetDIE(const DIERef &die_ref); virtual std::unique_ptr<SymbolFileDWARFDwo> diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h index a9929ef3936..0a58cfbbb9d 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h @@ -108,7 +108,7 @@ protected: }; friend class DebugMapModule; - friend class DIERef; + friend struct DIERef; friend class DWARFASTParserClang; friend class DWARFCompileUnit; friend class SymbolFileDWARF; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp index 326c397c83d..ca7f6a8f366 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp @@ -129,3 +129,10 @@ SymbolFileDWARFDwo::GetTypeSystemForLanguage(LanguageType language) { return GetBaseSymbolFile()->GetTypeSystemForLanguage(language); } + +DWARFDIE +SymbolFileDWARFDwo::GetDIE(const DIERef &die_ref) +{ + assert(m_base_dwarf_cu->GetOffset() == die_ref.cu_offset); + return DebugInfo()->GetDIEForDIEOffset(die_ref.die_offset); +} diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h index 81cbd583492..9391a282494 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h @@ -38,6 +38,9 @@ public: lldb_private::TypeSystem* GetTypeSystemForLanguage(lldb::LanguageType language) override; + DWARFDIE + GetDIE(const DIERef &die_ref) override; + std::unique_ptr<SymbolFileDWARFDwo> GetDwoSymbolFileForCompileUnit(DWARFCompileUnit &dwarf_cu, const DWARFDebugInfoEntry &cu_die) override { |

