diff options
| author | Jason Molenda <jmolenda@apple.com> | 2015-07-31 05:47:00 +0000 |
|---|---|---|
| committer | Jason Molenda <jmolenda@apple.com> | 2015-07-31 05:47:00 +0000 |
| commit | c7099585726f9baddcc6a952b192f219a53d8723 (patch) | |
| tree | c3235d17e78f907608ce17ee9b12dc00dc63ef21 /lldb/source/Plugins/SymbolFile | |
| parent | e7107ec03bff019427dbbbdd8ea2403d6492f439 (diff) | |
| download | bcm5719-llvm-c7099585726f9baddcc6a952b192f219a53d8723.tar.gz bcm5719-llvm-c7099585726f9baddcc6a952b192f219a53d8723.zip | |
Move the computation of whether a DWARF compile unit
is optimized into DWARFCompileUnit, where it should have
been. Next I'll need to call this from another section
of code for DWARF-in-.o-file behavior correctness.
llvm-svn: 243736
Diffstat (limited to 'lldb/source/Plugins/SymbolFile')
3 files changed, 32 insertions, 6 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp index 60933108c97..98d4c1d673d 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp @@ -52,7 +52,8 @@ DWARFCompileUnit::DWARFCompileUnit(SymbolFileDWARF* dwarf2Data) : m_producer_version_minor (0), m_producer_version_update (0), m_language_type (eLanguageTypeUnknown), - m_is_dwarf64 (false) + m_is_dwarf64 (false), + m_is_optimized (eLazyBoolCalculate) { } @@ -71,6 +72,7 @@ DWARFCompileUnit::Clear() m_producer = eProducerInvalid; m_language_type = eLanguageTypeUnknown; m_is_dwarf64 = false; + m_is_optimized = eLazyBoolCalculate; } bool @@ -1108,3 +1110,27 @@ DWARFCompileUnit::IsDWARF64() const return m_is_dwarf64; } +bool +DWARFCompileUnit::GetIsOptimized () +{ + if (m_is_optimized == eLazyBoolCalculate) + { + const DWARFDebugInfoEntry *die = GetCompileUnitDIEOnly(); + if (die) + { + m_is_optimized = eLazyBoolNo; + if (die->GetAttributeValueAsUnsigned (m_dwarf2Data, this, DW_AT_APPLE_optimized, 0) == 1) + { + m_is_optimized = eLazyBoolYes; + } + } + } + if (m_is_optimized == eLazyBoolYes) + { + return true; + } + else + { + return false; + } +} diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h index 93c8df822dc..9fcc55020b6 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h @@ -196,6 +196,9 @@ public: bool IsDWARF64() const; + bool + GetIsOptimized (); + protected: SymbolFileDWARF* m_dwarf2Data; const DWARFAbbreviationDeclarationSet *m_abbrevs; @@ -213,6 +216,7 @@ protected: uint32_t m_producer_version_update; lldb::LanguageType m_language_type; bool m_is_dwarf64; + lldb_private::LazyBool m_is_optimized; void ParseProducerInfo (); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 297f9bac1a8..3f2e1d811c7 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -1100,11 +1100,7 @@ SymbolFileDWARF::ParseCompileUnit (DWARFCompileUnit* dwarf_cu, uint32_t cu_idx) LanguageType cu_language = DWARFCompileUnit::LanguageTypeFromDWARF(cu_die->GetAttributeValueAsUnsigned(this, dwarf_cu, DW_AT_language, 0)); - bool is_optimized = false; - if (cu_die->GetAttributeValueAsUnsigned(this, dwarf_cu, DW_AT_APPLE_optimized, 0) == 1) - { - is_optimized = true; - } + bool is_optimized = dwarf_cu->GetIsOptimized (); cu_sp.reset(new CompileUnit (module_sp, dwarf_cu, cu_file_spec, |

