[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