Load / unload modules in the target when the OS events occur.
authorZachary Turner <zturner@google.com>
Fri, 5 Dec 2014 18:46:04 +0000 (18:46 +0000)
committerZachary Turner <zturner@google.com>
Fri, 5 Dec 2014 18:46:04 +0000 (18:46 +0000)
This causes all deferred breakpoints to be correctly resolved as
the modules that they reside in are loaded.

llvm-svn: 223497

lldb/source/Plugins/Process/Windows/ProcessWindows.cpp
lldb/source/Plugins/Process/Windows/ProcessWindows.h

index 22aa3b4..0ab627f 100644 (file)
@@ -16,7 +16,9 @@
 
 // Other libraries and framework includes
 #include "lldb/Core/Module.h"
+#include "lldb/Core/ModuleSpec.h"
 #include "lldb/Core/PluginManager.h"
+#include "lldb/Core/Section.h"
 #include "lldb/Core/State.h"
 #include "lldb/Host/Host.h"
 #include "lldb/Host/HostProcess.h"
@@ -521,13 +523,26 @@ ProcessWindows::OnLoadDll(const ModuleSpec &module_spec, lldb::addr_t module_add
     ModuleSP module = GetTarget().GetSharedModule(module_spec, &error);
     bool load_addr_changed = false;
     module->SetLoadAddress(GetTarget(), module_addr, false, load_addr_changed);
+
+    ModuleList loaded_modules;
+    loaded_modules.Append(module);
+    GetTarget().ModulesDidLoad(loaded_modules);
 }
 
 void
 ProcessWindows::OnUnloadDll(lldb::addr_t module_addr)
 {
-    // TODO: Figure out how to get the ModuleSP loaded at the specified address and remove
-    // it from the target's module list.
+    Address resolved_addr;
+    if (GetTarget().ResolveLoadAddress(module_addr, resolved_addr))
+    {
+        ModuleSP module = resolved_addr.GetModule();
+        if (module)
+        {
+            ModuleList unloaded_modules;
+            unloaded_modules.Append(module);
+            GetTarget().ModulesDidUnload(unloaded_modules, false);
+        }
+    }
 }
 
 void
index 18ffa34..61afcba 100644 (file)
@@ -13,7 +13,6 @@
 // C Includes
 
 // C++ Includes
-#include <map>
 #include <memory>
 #include <queue>