Skip to content

Commit c6534a1

Browse files
author
George Hu
committed
Call locate module callback for main executable
1 parent 7096078 commit c6534a1

File tree

1 file changed

+41
-9
lines changed

1 file changed

+41
-9
lines changed

lldb/source/Target/Platform.cpp

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -750,12 +750,30 @@ Platform::ResolveExecutable(const ModuleSpec &module_spec,
750750

751751
if (resolved_module_spec.GetArchitecture().IsValid() ||
752752
resolved_module_spec.GetUUID().IsValid()) {
753-
Status error =
754-
ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
755-
module_search_paths_ptr, nullptr, nullptr);
753+
// Call locate module callback first to give it a chance to find/register
754+
// symbol file specs for the main executable, similar to how shared
755+
// libraries are handled in Platform::GetRemoteSharedModule()
756+
FileSpec symbol_file_spec;
757+
CallLocateModuleCallbackIfSet(resolved_module_spec, exe_module_sp,
758+
symbol_file_spec, nullptr);
756759

757-
if (exe_module_sp && exe_module_sp->GetObjectFile())
758-
return error;
760+
Status error;
761+
if (!exe_module_sp) {
762+
// If locate module callback didn't provide a module, fallback to standard
763+
// path
764+
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
765+
module_search_paths_ptr, nullptr,
766+
nullptr);
767+
}
768+
769+
if (exe_module_sp && exe_module_sp->GetObjectFile()) {
770+
// Set the symbol file if locate module callback returned one
771+
if (symbol_file_spec) {
772+
exe_module_sp->SetSymbolFileFileSpec(symbol_file_spec);
773+
}
774+
return error; // Return the actual status from GetSharedModule (or success
775+
// from callback)
776+
}
759777
exe_module_sp.reset();
760778
}
761779
// No valid architecture was specified or the exact arch wasn't found.
@@ -767,12 +785,26 @@ Platform::ResolveExecutable(const ModuleSpec &module_spec,
767785
Status error;
768786
for (const ArchSpec &arch : GetSupportedArchitectures(process_host_arch)) {
769787
resolved_module_spec.GetArchitecture() = arch;
770-
error =
771-
ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
772-
module_search_paths_ptr, nullptr, nullptr);
788+
789+
// Call locate module callback first, then fallback to standard path
790+
FileSpec symbol_file_spec;
791+
CallLocateModuleCallbackIfSet(resolved_module_spec, exe_module_sp,
792+
symbol_file_spec, nullptr);
793+
794+
if (!exe_module_sp) {
795+
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
796+
module_search_paths_ptr, nullptr,
797+
nullptr);
798+
}
799+
773800
if (error.Success()) {
774-
if (exe_module_sp && exe_module_sp->GetObjectFile())
801+
if (exe_module_sp && exe_module_sp->GetObjectFile()) {
802+
// Set the symbol file if locate module callback returned one
803+
if (symbol_file_spec) {
804+
exe_module_sp->SetSymbolFileFileSpec(symbol_file_spec);
805+
}
775806
break;
807+
}
776808
error = Status::FromErrorString("no exe object file");
777809
}
778810

0 commit comments

Comments
 (0)