mstorsjo created this revision.
mstorsjo added reviewers: labath, amccarth, asmith, aleksandr.urakov.
Herald added a project: LLDB.
InitializeContext is useful for allocating a CONTEXT struct in an unaligned
byte buffer. In this case, we already have a 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 haven't implemented the InitializeContext function.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D70742
Files:
lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
Index: lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
===================================================================
--- lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
+++ lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
@@ -154,15 +154,8 @@
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) {
Index: lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
===================================================================
--- lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
+++ lldb/source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
@@ -154,15 +154,8 @@
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) {
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits