Index: source/Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h =================================================================== --- source/Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h +++ source/Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h @@ -29,7 +29,8 @@ static DynamicLoader *CreateInstance(Process *process, bool force); - void OnLoadModule(const ModuleSpec &module_spec, lldb::addr_t module_addr); + void OnLoadModule(lldb::ModuleSP module_sp, const ModuleSpec module_spec, + lldb::addr_t module_addr); void OnUnloadModule(lldb::addr_t module_addr); void DidAttach() override; Index: source/Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.cpp =================================================================== --- source/Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.cpp +++ source/Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.cpp @@ -62,19 +62,26 @@ return nullptr; } -void DynamicLoaderWindowsDYLD::OnLoadModule(const ModuleSpec &module_spec, +void DynamicLoaderWindowsDYLD::OnLoadModule(lldb::ModuleSP module_sp, + const ModuleSpec module_spec, lldb::addr_t module_addr) { - // Confusingly, there is no Target::AddSharedModule. Instead, calling - // GetSharedModule() with a new module will add it to the module list and - // return a corresponding ModuleSP. - Status error; - ModuleSP module_sp = - m_process->GetTarget().GetSharedModule(module_spec, &error); - if (error.Fail()) - return; + + // Resolve the module unless we already have one. + if (!module_sp) { + // Confusingly, there is no Target::AddSharedModule. Instead, calling + // GetSharedModule() with a new module will add it to the module list and + // return a corresponding ModuleSP. + Status error; + module_sp = m_process->GetTarget().GetSharedModule(module_spec, &error); + if (error.Fail()) + return; + } m_loaded_modules[module_sp] = module_addr; UpdateLoadedSectionsCommon(module_sp, module_addr, false); + ModuleList module_list; + module_list.Append(module_sp); + m_process->GetTarget().ModulesDidLoad(module_list); } void DynamicLoaderWindowsDYLD::OnUnloadModule(lldb::addr_t module_addr) { @@ -86,6 +93,9 @@ if (module_sp) { m_loaded_modules.erase(module_sp); UnloadSectionsCommon(module_sp); + ModuleList module_list; + module_list.Append(module_sp); + m_process->GetTarget().ModulesDidUnload(module_list, false); } } Index: source/Plugins/Process/Windows/Common/ProcessWindows.cpp =================================================================== --- source/Plugins/Process/Windows/Common/ProcessWindows.cpp +++ source/Plugins/Process/Windows/Common/ProcessWindows.cpp @@ -924,9 +924,7 @@ } if (auto dyld = GetDynamicLoader()) - dyld->OnLoadModule( - ModuleSpec(module->GetFileSpec(), module->GetArchitecture()), - image_base); + dyld->OnLoadModule(module, ModuleSpec(), image_base); // Add the main executable module to the list of pending module loads. We // can't call GetTarget().ModulesDidLoad() here because we still haven't @@ -1033,7 +1031,7 @@ void ProcessWindows::OnLoadDll(const ModuleSpec &module_spec, lldb::addr_t module_addr) { if (auto dyld = GetDynamicLoader()) - dyld->OnLoadModule(module_spec, module_addr); + dyld->OnLoadModule(nullptr, module_spec, module_addr); } void ProcessWindows::OnUnloadDll(lldb::addr_t module_addr) {