[Lldb-commits] [lldb] [LLDB][NativePDB] Find functions by basename (PR #152295)
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Thu Aug 7 01:12:43 PDT 2025
================
@@ -1677,34 +1766,56 @@ void SymbolFileNativePDB::FindFunctions(
if (name_type_mask & eFunctionNameTypeFull)
name = lookup_info.GetName();
- // For now we only support lookup by method name or full name.
if (!(name_type_mask & eFunctionNameTypeFull ||
+ name_type_mask & eFunctionNameTypeBase ||
name_type_mask & eFunctionNameTypeMethod))
return;
+ CacheFunctionNames();
- using SymbolAndOffset = std::pair<uint32_t, llvm::codeview::CVSymbol>;
+ std::set<uint32_t> resolved_ids; // avoid duplicate lookups
+ auto resolve_from = [&](UniqueCStringMap<uint32_t> &Names) {
+ std::vector<uint32_t> ids;
+ if (!Names.GetValues(name, ids))
+ return;
- std::vector<SymbolAndOffset> matches = m_index->globals().findRecordsByName(
- name.GetStringRef(), m_index->symrecords());
- for (const SymbolAndOffset &match : matches) {
- if (match.second.kind() != S_PROCREF && match.second.kind() != S_LPROCREF)
- continue;
- ProcRefSym proc(match.second.kind());
- cantFail(SymbolDeserializer::deserializeAs<ProcRefSym>(match.second, proc));
+ for (uint32_t id : ids) {
+ if (resolved_ids.find(id) != resolved_ids.end())
+ continue;
----------------
Michael137 wrote:
could do
```suggestion
if (!resolved_ids.insert(id))
continue;
```
Then don't need the insert at the end of the loop. Of course that means we won't retry resolving an ID if it failed the first time. But don't think anything would change in between invocations of this lambda for the ID to suddently become resolved if it failed the first time?
https://github.com/llvm/llvm-project/pull/152295
More information about the lldb-commits
mailing list