[llvm] [GSYM] Add support for querying merged functions in llvm-gsymutil (PR #120991)

Greg Clayton via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 6 10:35:14 PST 2025


================
@@ -342,6 +342,41 @@ llvm::Expected<LookupResult> GsymReader::lookup(uint64_t Addr) const {
     return ExpectedData.takeError();
 }
 
+llvm::Expected<std::vector<LookupResult>>
+GsymReader::lookupAll(uint64_t Addr) const {
+  std::vector<LookupResult> Results;
+
+  // First perform a lookup to get the primary function info result
+  auto MainResult = lookup(Addr);
+  if (!MainResult)
+    return MainResult.takeError();
+
+  // Add the main result as the first entry
+  Results.push_back(std::move(*MainResult));
+
+  // Now process any merged functions data that was found during the lookup
+  if (MainResult->MergedFunctionsData) {
+    // Get data extractors for each merged function
+    auto ExpectedMergedFuncExtractors =
+        MergedFunctionsInfo::getFuncsDataExtractors(
+            *MainResult->MergedFunctionsData);
+    if (!ExpectedMergedFuncExtractors)
+      return ExpectedMergedFuncExtractors.takeError();
+
+    // Process each merged function data
+    for (DataExtractor &MergedData : *ExpectedMergedFuncExtractors) {
+      if (auto FI = FunctionInfo::lookup(MergedData, *this,
+                                         MainResult->FuncRange.start(), Addr)) {
+        Results.push_back(std::move(*FI));
+      } else {
+        return FI.takeError();
+      }
+    }
----------------
clayborg wrote:

Change as needed per above comments.

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


More information about the llvm-commits mailing list