[Lldb-commits] [lldb] [lldb] Enable locate module callback for main executable (PR #160199)

via lldb-commits lldb-commits at lists.llvm.org
Mon Sep 22 14:54:39 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: None (GeorgeHuyubo)

<details>
<summary>Changes</summary>

Main executables were bypassing the locate module callback that shared 
libraries use, preventing custom symbol file location logic from working 
consistently. 

Fixed by modifying Platform::ResolveExecutable() to call 
CallLocateModuleCallbackIfSet() first, then fallback to the standard 
ModuleList::GetSharedModule() path if needed.

This ensures both main executables and shared libraries get the same 
callback treatment for symbol file resolution.

---
Full diff: https://github.com/llvm/llvm-project/pull/160199.diff


1 Files Affected:

- (modified) lldb/source/Target/Platform.cpp (+41-9) 


``````````diff
diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp
index 8681adaf5ea76..bbbe066cdea9e 100644
--- a/lldb/source/Target/Platform.cpp
+++ b/lldb/source/Target/Platform.cpp
@@ -750,12 +750,30 @@ Platform::ResolveExecutable(const ModuleSpec &module_spec,
 
   if (resolved_module_spec.GetArchitecture().IsValid() ||
       resolved_module_spec.GetUUID().IsValid()) {
-    Status error =
-        ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
-                                    module_search_paths_ptr, nullptr, nullptr);
+    // Call locate module callback first to give it a chance to find/register
+    // symbol file specs for the main executable, similar to how shared
+    // libraries are handled in Platform::GetRemoteSharedModule()
+    FileSpec symbol_file_spec;
+    CallLocateModuleCallbackIfSet(resolved_module_spec, exe_module_sp,
+                                  symbol_file_spec, nullptr);
 
-    if (exe_module_sp && exe_module_sp->GetObjectFile())
-      return error;
+    Status error;
+    if (!exe_module_sp) {
+      // If locate module callback didn't provide a module, fallback to standard
+      // path
+      error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
+                                          module_search_paths_ptr, nullptr,
+                                          nullptr);
+    }
+
+    if (exe_module_sp && exe_module_sp->GetObjectFile()) {
+      // Set the symbol file if locate module callback returned one
+      if (symbol_file_spec) {
+        exe_module_sp->SetSymbolFileFileSpec(symbol_file_spec);
+      }
+      return error; // Return the actual status from GetSharedModule (or success
+                    // from callback)
+    }
     exe_module_sp.reset();
   }
   // No valid architecture was specified or the exact arch wasn't found.
@@ -767,12 +785,26 @@ Platform::ResolveExecutable(const ModuleSpec &module_spec,
   Status error;
   for (const ArchSpec &arch : GetSupportedArchitectures(process_host_arch)) {
     resolved_module_spec.GetArchitecture() = arch;
-    error =
-        ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
-                                    module_search_paths_ptr, nullptr, nullptr);
+
+    // Call locate module callback first, then fallback to standard path
+    FileSpec symbol_file_spec;
+    CallLocateModuleCallbackIfSet(resolved_module_spec, exe_module_sp,
+                                  symbol_file_spec, nullptr);
+
+    if (!exe_module_sp) {
+      error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
+                                          module_search_paths_ptr, nullptr,
+                                          nullptr);
+    }
+
     if (error.Success()) {
-      if (exe_module_sp && exe_module_sp->GetObjectFile())
+      if (exe_module_sp && exe_module_sp->GetObjectFile()) {
+        // Set the symbol file if locate module callback returned one
+        if (symbol_file_spec) {
+          exe_module_sp->SetSymbolFileFileSpec(symbol_file_spec);
+        }
         break;
+      }
       error = Status::FromErrorString("no exe object file");
     }
 

``````````

</details>


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


More information about the lldb-commits mailing list