Load / unload modules in the target when the OS events occur.

This causes all deferred breakpoints to be correctly resolved as
the modules that they reside in are loaded.

llvm-svn: 223497
This commit is contained in:
Zachary Turner 2014-12-05 18:46:04 +00:00
parent cfd3b1ae6f
commit 301d184784
2 changed files with 17 additions and 3 deletions

View 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

View File

@ -13,7 +13,6 @@
// C Includes
// C++ Includes
#include <map>
#include <memory>
#include <queue>