Index: source/Host/windows/HostThreadWindows.cpp =================================================================== --- source/Host/windows/HostThreadWindows.cpp +++ source/Host/windows/HostThreadWindows.cpp @@ -17,6 +17,14 @@ using namespace lldb; using namespace lldb_private; +namespace +{ +void __stdcall ExitThreadProxy(ULONG_PTR param) +{ + ::ExitThread( param ); +} +} + HostThreadWindows::HostThreadWindows() : HostNativeThreadBase() , m_owns_handle(true) @@ -69,7 +77,7 @@ { Error error; - DWORD result = ::QueueUserAPC(::ExitThread, m_thread, 0); + DWORD result = ::QueueUserAPC(::ExitThreadProxy, m_thread, 0); error.SetError(result, eErrorTypeWin32); return error; } Index: source/Plugins/Process/Windows/RegisterContextWindows_x86.cpp =================================================================== --- source/Plugins/Process/Windows/RegisterContextWindows_x86.cpp +++ source/Plugins/Process/Windows/RegisterContextWindows_x86.cpp @@ -140,6 +140,38 @@ switch (reg_info->kinds[eRegisterKindLLDB]) { +#if defined (_M_IA64) || defined(_M_X64) + case lldb_eax_i386: + reg_value.SetUInt64(m_context_ptr->Rax); + break; + case lldb_ebx_i386: + reg_value.SetUInt64(m_context_ptr->Rbx); + break; + case lldb_ecx_i386: + reg_value.SetUInt64(m_context_ptr->Rcx); + break; + case lldb_edx_i386: + reg_value.SetUInt64(m_context_ptr->Rdx); + break; + case lldb_edi_i386: + reg_value.SetUInt64(m_context_ptr->Rdi); + break; + case lldb_esi_i386: + reg_value.SetUInt64(m_context_ptr->Rsi); + break; + case lldb_ebp_i386: + reg_value.SetUInt64(m_context_ptr->Rbp); + break; + case lldb_esp_i386: + reg_value.SetUInt64(m_context_ptr->Rsp); + break; + case lldb_eip_i386: + reg_value.SetUInt64(m_context_ptr->Rip); + break; + case lldb_eflags_i386: + reg_value.SetUInt32(m_context_ptr->EFlags); + break; +#else case lldb_eax_i386: reg_value.SetUInt32(m_context_ptr->Eax); break; @@ -170,6 +202,7 @@ case lldb_eflags_i386: reg_value.SetUInt32(m_context_ptr->EFlags); break; +#endif } return true; } @@ -185,6 +218,39 @@ switch (reg_info->kinds[eRegisterKindLLDB]) { + +#if defined (_M_IA64) || defined(_M_X64) + case lldb_eax_i386: + m_context_ptr->Rax = reg_value.GetAsUInt64(); + break; + case lldb_ebx_i386: + m_context_ptr->Rbx = reg_value.GetAsUInt64(); + break; + case lldb_ecx_i386: + m_context_ptr->Rcx = reg_value.GetAsUInt64(); + break; + case lldb_edx_i386: + m_context_ptr->Rdx = reg_value.GetAsUInt64(); + break; + case lldb_edi_i386: + m_context_ptr->Rdi = reg_value.GetAsUInt64(); + break; + case lldb_esi_i386: + m_context_ptr->Rsi = reg_value.GetAsUInt64(); + break; + case lldb_ebp_i386: + m_context_ptr->Rbp = reg_value.GetAsUInt64(); + break; + case lldb_esp_i386: + m_context_ptr->Rsp = reg_value.GetAsUInt64(); + break; + case lldb_eip_i386: + m_context_ptr->Rip = reg_value.GetAsUInt64(); + break; + case lldb_eflags_i386: + m_context_ptr->EFlags = reg_value.GetAsUInt32(); + break; +#else case lldb_eax_i386: m_context_ptr->Eax = reg_value.GetAsUInt32(); break; @@ -215,6 +281,7 @@ case lldb_eflags_i386: m_context_ptr->EFlags = reg_value.GetAsUInt32(); break; +#endif } // Physically update the registers in the target process.