@@ -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