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 lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits