vsk created this revision.
vsk added reviewers: jasonmolenda, friss, jingham.
Herald added a subscriber: aprantl.
Herald added a project: LLDB.

DWARF-parsing methods in SymbolFileDWARF which update module state
should take the module lock. Have ParseCallEdgesInFunction do this.

This could explain some as-of-yet unreproducible crashes which occur in
Function::GetTailCallingEdges(), in which the `m_call_edges` vector is
both non-empty and contains a nullptr, which shouldn't be possible. (If
this vector is non-empty, it _must_ contain a non-null unique_ptr.)

This may address rdar://55622443, rdar://65119458.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D83359

Files:
  lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp


Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -3844,6 +3844,7 @@
 
 std::vector<std::unique_ptr<lldb_private::CallEdge>>
 SymbolFileDWARF::ParseCallEdgesInFunction(UserID func_id) {
+  std::lock_guard<std::recursive_mutex> guard(GetModuleMutex());
   DWARFDIE func_die = GetDIE(func_id.GetID());
   if (func_die.IsValid())
     return CollectCallEdges(GetObjectFile()->GetModule(), func_die);


Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -3844,6 +3844,7 @@
 
 std::vector<std::unique_ptr<lldb_private::CallEdge>>
 SymbolFileDWARF::ParseCallEdgesInFunction(UserID func_id) {
+  std::lock_guard<std::recursive_mutex> guard(GetModuleMutex());
   DWARFDIE func_die = GetDIE(func_id.GetID());
   if (func_die.IsValid())
     return CollectCallEdges(GetObjectFile()->GetModule(), func_die);
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to