Only compile RegisterContextWindows_x86.cpp for x86 host architecture.
authorZachary Turner <zturner@google.com>
Thu, 18 Dec 2014 18:21:33 +0000 (18:21 +0000)
committerZachary Turner <zturner@google.com>
Thu, 18 Dec 2014 18:21:33 +0000 (18:21 +0000)
This fixes compilation failures in the 64-bit build of LLDB on Windows.

Patch by Aidan Dodds

Differential Revision: http://reviews.llvm.org/D6704

llvm-svn: 224528

lldb/source/Host/windows/HostThreadWindows.cpp
lldb/source/Plugins/Process/Windows/CMakeLists.txt
lldb/source/Plugins/Process/Windows/TargetThreadWindows.cpp
lldb/source/Plugins/Process/Windows/x86/RegisterContextWindows_x86.cpp [moved from lldb/source/Plugins/Process/Windows/RegisterContextWindows_x86.cpp with 100% similarity]
lldb/source/Plugins/Process/Windows/x86/RegisterContextWindows_x86.h [moved from lldb/source/Plugins/Process/Windows/RegisterContextWindows_x86.h with 100% similarity]

index 2597fa2..d59064f 100644 (file)
 using namespace lldb;
 using namespace lldb_private;
 
+namespace
+{
+void __stdcall ExitThreadProxy(ULONG_PTR dwExitCode)
+{
+    ::ExitThread(dwExitCode);
+}
+}
+
 HostThreadWindows::HostThreadWindows()
     : HostNativeThreadBase()
     , m_owns_handle(true)
@@ -69,7 +77,7 @@ HostThreadWindows::Cancel()
 {
     Error error;
 
-    DWORD result = ::QueueUserAPC(::ExitThread, m_thread, 0);
+    DWORD result = ::QueueUserAPC(::ExitThreadProxy, m_thread, 0);
     error.SetError(result, eErrorTypeWin32);
     return error;
 }
index e0110e3..dce4560 100644 (file)
@@ -1,14 +1,27 @@
 set(LLVM_NO_RTTI 1)
 
+macro(add_process_windows_subdirectory group)
+  list(APPEND PROC_WINDOWS_SOURCES ${ARGN})
+  source_group(${group} FILES ${ARGN})
+endmacro()
+
 include_directories(.)
 include_directories(../Utility)
 
-add_lldb_library(lldbPluginProcessWindows
+add_process_windows_subdirectory(common
   DebuggerThread.cpp
   DynamicLoaderWindows.cpp
   LocalDebugDelegate.cpp
   ProcessWindows.cpp
-  RegisterContextWindows_x86.cpp
   TargetThreadWindows.cpp
   )
 
+if (CMAKE_SIZEOF_VOID_P EQUAL 4)
+  add_process_windows_subdirectory(x86
+  x86/RegisterContextWindows_x86.cpp
+  )
+endif()
+
+add_lldb_library(lldbPluginProcessWindows
+  ${PROC_WINDOWS_SOURCES}
+  )
index 1c33f21..2f5ddc9 100644 (file)
 
 #include "TargetThreadWindows.h"
 #include "ProcessWindows.h"
-#include "RegisterContextWindows_x86.h"
 #include "UnwindLLDB.h"
 
+#if !defined(_WIN64)
+#include "x86/RegisterContextWindows_x86.h"
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 
@@ -72,10 +75,19 @@ TargetThreadWindows::CreateRegisterContextForFrameIndex(uint32_t idx)
         switch (arch.GetMachine())
         {
             case llvm::Triple::x86:
+#if defined(_WIN64)
+                // FIXME: This is a Wow64 process, create a RegisterContextWindows_Wow64
+#else
                 m_reg_context_sp.reset(new RegisterContextWindows_x86(*this, idx));
+#endif
                 break;
+            case llvm::Triple::x86_64:
+#if defined(_WIN64)
+                // FIXME: This is a 64-bit process, create a RegisterContextWindows_x86_64
+#else
+                // LLDB is 32-bit, but the target process is 64-bit.  We probably can't debug this.
+#endif
             default:
-                // FIXME: Support x64 by creating a RegisterContextWindows_x86_64
                 break;
         }
     }