Author: tberghammer Date: Tue Oct 20 10:43:40 2015 New Revision: 250832 URL: http://llvm.org/viewvc/llvm-project?rev=250832&view=rev Log: Revert "Make dwarf parsing multi-threaded"
Revert it bacuse it introduces several race condition detected by the build bots. This reverts commit 5107a5ebdb7c4571a30a7098b40bf8098b678447. Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp?rev=250832&r1=250831&r2=250832&view=diff ============================================================================== --- lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp (original) +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp Tue Oct 20 10:43:40 2015 @@ -83,14 +83,3 @@ NameToDIE::ForEach (std::function <bool( 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)); - } -} Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h?rev=250832&r1=250831&r2=250832&view=diff ============================================================================== --- lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h (original) +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h Tue Oct 20 10:43:40 2015 @@ -38,9 +38,6 @@ public: Insert (const lldb_private::ConstString& name, const DIERef& die_ref); void - Append (const NameToDIE& other); - - void Finalize(); size_t Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp?rev=250832&r1=250831&r2=250832&view=diff ============================================================================== --- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original) +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Tue Oct 20 10:43:40 2015 @@ -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); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits