diff options
author | Tamas Berghammer <tberghammer@google.com> | 2015-10-20 15:43:40 +0000 |
---|---|---|
committer | Tamas Berghammer <tberghammer@google.com> | 2015-10-20 15:43:40 +0000 |
commit | da4e8ed69ab887df66627144eecbfb6204f7f2d3 (patch) | |
tree | 3a534ebcfa8031f7cb6da15885ca9968ef03a403 | |
parent | 36307ffa1b7d3a5975435a0e9ed874b10e153bfc (diff) | |
download | bcm5719-llvm-da4e8ed69ab887df66627144eecbfb6204f7f2d3.tar.gz bcm5719-llvm-da4e8ed69ab887df66627144eecbfb6204f7f2d3.zip |
Revert "Make dwarf parsing multi-threaded"
Revert it bacuse it introduces several race condition detected by
the build bots.
This reverts commit 5107a5ebdb7c4571a30a7098b40bf8098b678447.
llvm-svn: 250832
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp | 11 | ||||
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h | 3 | ||||
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp | 80 |
3 files changed, 23 insertions, 71 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp index 775bb6718b8..8085cabed33 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp @@ -83,14 +83,3 @@ NameToDIE::ForEach (std::function <bool(const char *name, const DIERef& die_ref) break; } } - -void -NameToDIE::Append (const NameToDIE& other) -{ - const uint32_t size = other.m_map.GetSize(); - for (uint32_t i = 0; i < size; ++i) - { - m_map.Append(other.m_map.GetCStringAtIndexUnchecked (i), - other.m_map.GetValueAtIndexUnchecked (i)); - } -} diff --git a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h index 7fc66138f51..fde52bdbf19 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h @@ -38,9 +38,6 @@ public: Insert (const lldb_private::ConstString& name, const DIERef& die_ref); void - Append (const NameToDIE& other); - - void Finalize(); size_t diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 2b18b11321c..e9cbd8cde72 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -50,8 +50,6 @@ #include "lldb/Target/Language.h" -#include "lldb/Utility/TaskPool.h" - #include "DWARFASTParser.h" #include "DWARFCompileUnit.h" #include "DWARFDebugAbbrev.h" @@ -2037,72 +2035,40 @@ SymbolFileDWARF::Index () "SymbolFileDWARF::Index (%s)", GetObjectFile()->GetFileSpec().GetFilename().AsCString("<Unknown>")); - - DWARFDebugInfo* debug_info = DebugInfo(); if (debug_info) { + uint32_t cu_idx = 0; const uint32_t num_compile_units = GetNumCompileUnits(); - std::vector<NameToDIE> function_basename_index(num_compile_units); - std::vector<NameToDIE> function_fullname_index(num_compile_units); - std::vector<NameToDIE> function_method_index(num_compile_units); - std::vector<NameToDIE> function_selector_index(num_compile_units); - std::vector<NameToDIE> objc_class_selectors_index(num_compile_units); - std::vector<NameToDIE> global_index(num_compile_units); - std::vector<NameToDIE> type_index(num_compile_units); - std::vector<NameToDIE> namespace_index(num_compile_units); - - auto parser_fn = [this, - debug_info, - &function_basename_index, - &function_fullname_index, - &function_method_index, - &function_selector_index, - &objc_class_selectors_index, - &global_index, - &type_index, - &namespace_index](uint32_t cu_idx) + for (cu_idx = 0; cu_idx < num_compile_units; ++cu_idx) { DWARFCompileUnit* dwarf_cu = debug_info->GetCompileUnitAtIndex(cu_idx); - bool clear_dies = dwarf_cu->ExtractDIEsIfNeeded(false) > 1; - dwarf_cu->Index(function_basename_index[cu_idx], - function_fullname_index[cu_idx], - function_method_index[cu_idx], - function_selector_index[cu_idx], - objc_class_selectors_index[cu_idx], - global_index[cu_idx], - type_index[cu_idx], - namespace_index[cu_idx]); + bool clear_dies = dwarf_cu->ExtractDIEsIfNeeded (false) > 1; + dwarf_cu->Index (m_function_basename_index, + m_function_fullname_index, + m_function_method_index, + m_function_selector_index, + m_objc_class_selectors_index, + m_global_index, + m_type_index, + m_namespace_index); + // Keep memory down by clearing DIEs if this generate function // caused them to be parsed if (clear_dies) - dwarf_cu->ClearDIEs(true); - }; - - std::vector<std::future<void>> results; - for (uint32_t cu_idx = 0; cu_idx < num_compile_units; ++cu_idx) - results.emplace_back(TaskPool::AddTask(parser_fn, cu_idx)); - for (auto& f : results) - f.wait(); - - auto merge_fn = [](NameToDIE& target, const std::vector<NameToDIE>& sources) - { - for (const auto& src : sources) - target.Append(src); - target.Finalize(); - }; - - TaskPool::RunTasks( - [&]() { merge_fn(m_function_basename_index, function_basename_index); }, - [&]() { merge_fn(m_function_fullname_index, function_fullname_index); }, - [&]() { merge_fn(m_function_method_index, function_method_index); }, - [&]() { merge_fn(m_function_selector_index, function_selector_index); }, - [&]() { merge_fn(m_objc_class_selectors_index, objc_class_selectors_index); }, - [&]() { merge_fn(m_global_index, global_index); }, - [&]() { merge_fn(m_type_index, type_index); }, - [&]() { merge_fn(m_namespace_index, namespace_index); }); + dwarf_cu->ClearDIEs (true); + } + + m_function_basename_index.Finalize(); + m_function_fullname_index.Finalize(); + m_function_method_index.Finalize(); + m_function_selector_index.Finalize(); + m_objc_class_selectors_index.Finalize(); + m_global_index.Finalize(); + m_type_index.Finalize(); + m_namespace_index.Finalize(); #if defined (ENABLE_DEBUG_PRINTF) StreamFile s(stdout, false); |