[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