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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits