[Lldb-commits] [lldb] [lldb][Windows] Synchronize on LOAD_DLL_DEBUG_EVENT in lldb-server (PR #203334)

Adrian Prantl via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 12 07:32:49 PDT 2026


================
@@ -704,13 +712,59 @@ void NativeProcessWindows::OnExitThread(lldb::tid_t thread_id,
 
 void NativeProcessWindows::OnLoadDll(const ModuleSpec &module_spec,
                                      lldb::addr_t module_addr) {
-  m_loaded_modules.clear();
+  Log *log = GetLog(WindowsLog::Process);
+
+  if (module_spec.GetFileSpec()) {
+    FileSpec resolved = module_spec.GetFileSpec();
+    FileSystem::Instance().Resolve(resolved);
+    m_loaded_modules[resolved] = module_addr;
+  }
   m_pending_library_events = true;
+
+  if (!m_initial_stop_seen || !m_client_supports_libraries_read)
+    return;
+
+  if (!m_threads.empty()) {
+    auto first = static_cast<NativeThreadWindows *>(m_threads[0].get());
+    SetCurrentThreadID(first->GetID());
+    if (first->DoStop().Fail())
+      LLDB_LOG(log, "failed to suspend thread {0} on LOAD_DLL", first->GetID());
+    ThreadStopInfo info;
+    info.reason = lldb::eStopReasonNone;
+    info.signo = 0;
+    first->SetStopReason(info, "");
+  }
+  SetState(eStateStopped, true);
+
+  m_session_data->m_debugger->WaitForResumeAfterDllEvent();
 }
 
 void NativeProcessWindows::OnUnloadDll(lldb::addr_t module_addr) {
-  m_loaded_modules.clear();
+  Log *log = GetLog(WindowsLog::Process);
+  for (auto it = m_loaded_modules.begin(); it != m_loaded_modules.end();) {
----------------
adrian-prantl wrote:

std::erase_if (or the more convenient llvm STLExtras helper)?

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


More information about the lldb-commits mailing list