[llvm] [llvm-profgen] Loading binary functions from .symtab when DWARF info is incomplete (PR #163654)

Lei Wang via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 24 10:35:06 PST 2025


================
@@ -1034,6 +1140,48 @@ void ProfiledBinary::computeInlinedContextSizeForFunc(
   }
 }
 
+void ProfiledBinary::loadSymbolsFromPseudoProbe() {
+  if (!UsePseudoProbes)
+    return;
+
+  const AddressProbesMap &Address2ProbesMap = getAddress2ProbesMap();
+  for (auto &[Addr, Range] : StartAddrToFuncRangeMap) {
+    auto Func = Range.Func;
+    if (!Range.IsFuncEntry || Func->NameStatus != DwarfNameStatus::Mismatch)
+      continue;
+#ifndef NDEBUG
+    if (PseudoProbeNames.count(Func))
+      continue;
+#endif
+    const auto &Probe = Address2ProbesMap.find(Addr).begin();
+    if (Probe != Address2ProbesMap.end()) {
+      const MCDecodedPseudoProbeInlineTree *InlineTreeNode =
+          Probe->get().getInlineTreeNode();
+      while (!InlineTreeNode->isTopLevelFunc())
+        InlineTreeNode = static_cast<MCDecodedPseudoProbeInlineTree *>(
+            InlineTreeNode->Parent);
+
+      auto TopLevelProbes = InlineTreeNode->getProbes();
+      auto TopProbe = TopLevelProbes.begin();
+      assert(TopProbe != TopLevelProbes.end() &&
+             TopProbe->getAddress() >= Addr &&
+             "Top level pseudo probe does not match function range");
+
+      const auto *ProbeDesc = getFuncDescForGUID(InlineTreeNode->Guid);
+      auto Ret = PseudoProbeNames.emplace(Func, ProbeDesc->FuncName);
+      assert((Ret.second || Ret.first->second == ProbeDesc->FuncName) &&
+             "Mismatched pseudo probe names");
+    }
+  }
+}
+
+StringRef ProfiledBinary::findPseudoProbeName(const BinaryFunction *Func) {
+  auto ProbeName = PseudoProbeNames.find(Func);
+  if (ProbeName == PseudoProbeNames.end())
+    return StringRef();
+  return ProbeName->second;
+}
----------------
wlei-llvm wrote:

Ah, that makes sense, thanks for the clarification! 

https://github.com/llvm/llvm-project/pull/163654


More information about the llvm-commits mailing list