diff options
author | Martin Storsjö <martin@martin.st> | 2019-10-16 11:41:59 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2019-11-27 10:44:42 +0200 |
commit | 344bdeb797b31bb99158010f255a7219fe77e2ec (patch) | |
tree | 79c581c577c5fcc83d0e06fb305643579eed5077 /lldb/source/Plugins/Process/Windows | |
parent | 3a280422b66a31af694782746ec0b5b7552a82a1 (diff) | |
download | bcm5719-llvm-344bdeb797b31bb99158010f255a7219fe77e2ec.tar.gz bcm5719-llvm-344bdeb797b31bb99158010f255a7219fe77e2ec.zip |
[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
Diffstat (limited to 'lldb/source/Plugins/Process/Windows')
-rw-r--r-- | lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp b/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp index 28e7a590ff9..c3cb45530f2 100644 --- a/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp @@ -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) { |