kastiglione added inline comments.
Herald added subscribers: pmatos, asb.
Herald added a project: All.


================
Comment at: lldb/source/Symbol/ObjectFile.cpp:739
+    // are protected by a mutex in the Symtab object itself.
+    llvm::call_once(*m_symtab_once_up, [&]() {
+       ElapsedTime elapsed(module_sp->GetSymtabParseTime());
----------------
During expression evaluation, I am hitting a deadlock where a reentrant call to 
`ObjectFile::GetSymtab` is happening with he same `once_flag`, causing it to 
block. This is macOS/arm64.

Here's a (simplified) stack:

```
    frame #4: void 
llvm::call_once<lldb_private::ObjectFile::GetSymtab()::$_0>(flag=0x..., 
F=0x...)::$_0&&) at Threading.h:89
    frame #5: lldb_private::ObjectFile::GetSymtab(this=0x...) at 
ObjectFile.cpp:758
    frame #6: SymbolFileSymtab::CalculateAbilities(this=0x...) at 
SymbolFileSymtab.cpp:60
    frame #7: lldb_private::SymbolFile::GetAbilities(this=0x...) at 
SymbolFile.h:105
    frame #8: 
lldb_private::SymbolFile::FindPlugin(objfile_sp=std::shared_ptr<lldb_private::ObjectFile>::element_type
 @ 0x... strong=7 weak=2) at SymbolFile.cpp:72
    frame #9: 
lldb_private::SymbolVendor::AddSymbolFileRepresentation(this=0x..., 
objfile_sp=std::shared_ptr<lldb_private::ObjectFile>::element_type @ 0x... 
strong=7 weak=2) at SymbolVendor.cpp:71
    frame 
#10:`lldb_private::SymbolVendor::FindPlugin(module_sp=std::shared_ptr<lldb_private::Module>::element_type
 @ 0x... strong=12 weak=12, feedback_strm=0x...) at SymbolVendor.cpp:57
    frame #11:`lldb_private::Module::GetSymbolFile(this=0x..., can_create=true, 
feedback_strm=0x...) at Module.cpp:1070
    frame #12:`lldb_private::Module::FindFunctions(this=0x..., 
name="$s17_StringProcessing14AnyRegexOutputVMa", parent_decl_ctx=0x..., 
name_type_mask=eFunctionNameTypeFull, options=0x..., sc_list=0x...) at 
Module.cpp:830
    frame #13:`lldb_private::ModuleList::FindFunctions(this=0x..., 
name="$s17_StringProcessing14AnyRegexOutputVMa", 
name_type_mask=eFunctionNameTypeFull, options=0x..., sc_list=0x...) const at 
ModuleList.cpp:512
    frame #14:`lldb_private::IRExecutionUnit::FindInSymbols(this=0x..., 
names=size=2, sc=0x..., symbol_was_missing_weak=0x...) at 
IRExecutionUnit.cpp:841
    frame #15:`lldb_private::IRExecutionUnit::FindSymbol(this=0x..., 
name="_$s17_StringProcessing14AnyRegexOutputVMa", missing_weak=0x...) at 
IRExecutionUnit.cpp:913
    frame 
#16:`lldb_private::IRExecutionUnit::MemoryManager::GetSymbolAddressAndPresence(this=0x...,
 Name="_$s17_StringProcessing14AnyRegexOutputVMa", missing_weak=0x...) at 
IRExecutionUnit.cpp:1008
    frame 
#17:`lldb_private::IRExecutionUnit::MemoryManager::findSymbol(this=0x..., 
Name="_$s17_StringProcessing14AnyRegexOutputVMa") at IRExecutionUnit.cpp:986
    frame #18:`llvm::LinkingSymbolResolver::findSymbol(std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&) + 128
    frame #19:`llvm::LegacyJITSymbolResolver::lookup(std::set<llvm::StringRef, 
std::less<llvm::StringRef>, std::allocator<llvm::StringRef> > const&, 
llvm::unique_function<void (llvm::Expected<std::map<llvm::StringRef, 
llvm::JITEvaluatedSymbol, std::less<llvm::StringRef>, 
std::allocator<std::pair<llvm::StringRef const, llvm::JITEvaluatedSymbol> > > 
>)>) + 308
    frame #20:`llvm::RuntimeDyldImpl::resolveExternalSymbols() + 708
    frame #21:`llvm::RuntimeDyldImpl::resolveRelocations() + 248
    frame #22:`llvm::MCJIT::finalizeLoadedModules() + 56
    frame #23:`llvm::MCJIT::getGlobalValueAddress(std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&) + 68
    frame #24:`lldb_private::IRExecutionUnit::PopulateSymtab(this=0x..., 
obj_file=0x..., symtab=0x...) at IRExecutionUnit.cpp:1244
    frame #25:`ObjectFileJIT::ParseSymtab(this=0x..., symtab=0x...) at 
ObjectFileJIT.cpp:112
    frame 
#26:`lldb_private::ObjectFile::GetSymtab(this=0x...)::$_0::operator()() const 
at ObjectFile.cpp:764
    frame #27:`decltype(__f=0x...)::$_0>(fp)()) 
std::__invoke<lldb_private::ObjectFile::GetSymtab()::$_0>(lldb_private::ObjectFile::GetSymtab()::$_0&&)
 at type_traits:3918
    frame #28:`void 
std::__call_once_param<std::tuple<lldb_private::ObjectFile::GetSymtab()::$_0&&> 
>::__execute<>(this=0x..., (null)=__tuple_indices<> @ 0x...) at mutex:630
    frame 
#29:`std::__call_once_param<std::tuple<lldb_private::ObjectFile::GetSymtab()::$_0&&>
 >::operator(this=0x...)() at mutex:622
    frame #30:`void 
std::__call_once_proxy<std::tuple<lldb_private::ObjectFile::GetSymtab()::$_0&&> 
>(__vp=0x...) at mutex:658
    frame #31:++.1.dylib`std::__call_once(unsigned long volatile&, void*, void 
(*)(void*)) + 180
    frame #32:`void 
std::call_once<lldb_private::ObjectFile::GetSymtab()::$_0>(__flag=0x..., 
__func=0x...)::$_0&&) at mutex:676
    frame #33:`void 
llvm::call_once<lldb_private::ObjectFile::GetSymtab()::$_0>(flag=0x..., 
F=0x...)::$_0&&) at Threading.h:89
    frame #34:`lldb_private::ObjectFile::GetSymtab(this=0x...) at 
ObjectFile.cpp:758
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114288/new/

https://reviews.llvm.org/D114288

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to