From c3210f9f4f9177e54fbca46151a6388cbe77796b Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 10 May 2014 17:58:53 -0700 Subject: [PATCH] Windows: Add two new targets, x86-32-vista and x86-64-vista for bjourne's ctrl-c patch. We still support Windows XP by default for now. Closes --- Nmakefile | 31 +++++++++++++++++++++++++------ vm/os-windows.cpp | 5 +++++ vm/os-windows.hpp | 5 ++++- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/Nmakefile b/Nmakefile index b66e6dcf70..02dbfd4fa9 100755 --- a/Nmakefile +++ b/Nmakefile @@ -6,17 +6,28 @@ BOOTIMAGE_VERSION = latest LINK_FLAGS = /nologo shell32.lib CL_FLAGS = /nologo /O2 /WX /W3 /D_CRT_SECURE_NO_WARNINGS - -!IF DEFINED(DEBUG) -LINK_FLAGS = $(LINK_FLAGS) /DEBUG -CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG -!ENDIF +CL_FLAGS_VISTA = /D_WIN32_WINNT=0x0600 !IF "$(PLATFORM)" == "x86-32" LINK_FLAGS = $(LINK_FLAGS) /safeseh PLAF_DLL_OBJS = vm\os-windows-x86.32.obj vm\safeseh.obj vm\cpu-x86.obj + +!ELSEIF "$(PLATFORM)" == "x86-32-vista" +LINK_FLAGS = $(LINK_FLAGS) /safeseh +CL_FLAGS = $(CL_FLAGS) $(CL_FLAGS_VISTA) +PLAF_DLL_OBJS = vm\os-windows-x86.32.obj vm\safeseh.obj vm\cpu-x86.obj + !ELSEIF "$(PLATFORM)" == "x86-64" PLAF_DLL_OBJS = vm\os-windows-x86.64.obj vm\cpu-x86.obj + +!ELSEIF "$(PLATFORM)" == "x86-64-vista" +CL_FLAGS = $(CL_FLAGS) $(CL_FLAGS_VISTA) +PLAF_DLL_OBJS = vm\os-windows-x86.64.obj vm\cpu-x86.obj +!ENDIF + +!IF DEFINED(DEBUG) +LINK_FLAGS = $(LINK_FLAGS) /DEBUG +CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG !ENDIF ML_FLAGS = /nologo /safeseh @@ -103,6 +114,8 @@ default: @echo Where platform is one of: @echo x86-32 @echo x86-64 + @echo x86-32-vista + @echo x86-64-vista @exit 1 x86-32: @@ -111,6 +124,12 @@ x86-32: x86-64: nmake /nologo PLATFORM=x86-64 /f Nmakefile all +x86-32-vista: + nmake /nologo PLATFORM=x86-32-vista /f Nmakefile all + +x86-64-vista: + nmake /nologo PLATFORM=x86-64-vista /f Nmakefile all + clean: del vm\*.obj if exist factor.lib del factor.lib @@ -120,6 +139,6 @@ clean: if exist factor.dll del factor.dll if exist factor.dll.lib del factor.dll.lib -.PHONY: all default x86-32 x86-64 clean +.PHONY: all default x86-32 x86-64 x86-32-vista x86-64-vista clean .SUFFIXES: .rs diff --git a/vm/os-windows.cpp b/vm/os-windows.cpp index 64e425b13a..f83f67f91d 100644 --- a/vm/os-windows.cpp +++ b/vm/os-windows.cpp @@ -254,6 +254,8 @@ VM_C_API LONG exception_handler(PEXCEPTION_RECORD e, void* frame, PCONTEXT c, cancellation requests to unblock the thread. */ VOID CALLBACK dummy_cb (ULONG_PTR dwParam) { } +// CancelSynchronousIo is not in Windows XP +#if _WIN32_WINNT >= 0x0600 static void wake_up_thread(HANDLE thread) { if (!CancelSynchronousIo(thread)) { DWORD err = GetLastError(); @@ -268,6 +270,9 @@ static void wake_up_thread(HANDLE thread) { } } } +#else +static void wake_up_thread(HANDLE thread) {} +#endif static BOOL WINAPI ctrl_handler(DWORD dwCtrlType) { switch (dwCtrlType) { diff --git a/vm/os-windows.hpp b/vm/os-windows.hpp index a83ea2ff8d..2dab596c4d 100644 --- a/vm/os-windows.hpp +++ b/vm/os-windows.hpp @@ -5,8 +5,11 @@ #include #endif +#if _WIN32_WINNT != 0x0600 #undef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 // For AddVectoredExceptionHandler +#define _WIN32_WINNT 0x0501 // For AddVectoredExceptionHandler, WinXP support +//#define _WIN32_WINNT 0x0600 // For CancelSynchronousIo +#endif #ifndef UNICODE #define UNICODE -- 2.34.1