[LLDB] Avoid using InitializeContext for zero-initializing a CONTEXT. NFC.

InitializeContext is useful for allocating a (potentially variable
size) CONTEXT struct in an unaligned byte buffer. In this case, we
already have a fixed size CONTEXT we want to initialize, and we only
used this as a very roundabout way of zero initializing it.

Instead just memset the CONTEXT we have, and set the ContextFlags field
manually.

This matches how it is done in NativeRegisterContextWindows_*.cpp.

This also makes LLDB run successfully in Wine (for a trivial tested
case at least), as Wine hasn't implemented the InitializeContext
function.

Differential Revision: https://reviews.llvm.org/D70742
This commit is contained in:
Martin Storsjö 2019-10-16 11:41:59 +03:00
parent 3a280422b6
commit 344bdeb797
1 changed files with 2 additions and 9 deletions

View File

@ -154,15 +154,8 @@ bool RegisterContextWindows::CacheAllRegisterValues() {
return true;
TargetThreadWindows &wthread = static_cast<TargetThreadWindows &>(m_thread);
uint8_t buffer[2048];
memset(buffer, 0, sizeof(buffer));
PCONTEXT tmpContext = NULL;
DWORD contextLength = (DWORD)sizeof(buffer);
if (!::InitializeContext(buffer, kWinContextFlags, &tmpContext,
&contextLength)) {
return false;
}
memcpy(&m_context, tmpContext, sizeof(m_context));
memset(&m_context, 0, sizeof(m_context));
m_context.ContextFlags = kWinContextFlags;
if (::SuspendThread(
wthread.GetHostThread().GetNativeThread().GetSystemHandle()) ==
(DWORD)-1) {