summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTamas Berghammer <tberghammer@google.com>2015-10-20 15:43:40 +0000
committerTamas Berghammer <tberghammer@google.com>2015-10-20 15:43:40 +0000
commitda4e8ed69ab887df66627144eecbfb6204f7f2d3 (patch)
tree3a534ebcfa8031f7cb6da15885ca9968ef03a403
parent36307ffa1b7d3a5975435a0e9ed874b10e153bfc (diff)
downloadbcm5719-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.cpp11
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h3
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp80
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);
OpenPOWER on IntegriCloud