Manually call ModulesDidLoad when the executable is loaded.

This is a temporary workaround to get deferred breakpoint
resolution working until Bug 21720 is addressed.  Even with this
workaround, it will only resolve deferred breakpoints in the
executable module, and not in a shared library.

llvm-svn: 223273
This commit is contained in:
Zachary Turner 2014-12-03 22:04:31 +00:00
parent c6a6653ebb
commit b3ff719b04
1 changed files with 11 additions and 0 deletions

View File

@ -418,6 +418,11 @@ ProcessWindows::CanDebug(Target &target, bool plugin_specified_by_name)
void
ProcessWindows::OnExitProcess(uint32_t exit_code)
{
ModuleSP executable_module = GetTarget().GetExecutableModule();
ModuleList unloaded_modules;
unloaded_modules.Append(executable_module);
GetTarget().ModulesDidUnload(unloaded_modules, true);
SetProcessExitStatus(nullptr, GetID(), true, 0, exit_code);
SetPrivateState(eStateExited);
}
@ -431,6 +436,12 @@ ProcessWindows::OnDebuggerConnected(lldb::addr_t image_base)
bool load_addr_changed;
module->SetLoadAddress(GetTarget(), image_base, false, load_addr_changed);
// Notify the target that the executable module has loaded. This will cause any pending
// breakpoints to be resolved to explicit brekapoint sites.
ModuleList loaded_modules;
loaded_modules.Append(module);
GetTarget().ModulesDidLoad(loaded_modules);
DebuggerThreadSP debugger = m_session_data->m_debugger;
const HostThreadWindows &wmain_thread = debugger->GetMainThread().GetNativeThread();
m_session_data->m_new_threads[wmain_thread.GetThreadId()] = debugger->GetMainThread();