13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Redistribution and use in source and binary forms, with or without 3b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// modification, are permitted provided that the following conditions are 4b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// met: 5b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// 6b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// * Redistributions of source code must retain the above copyright 7b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// notice, this list of conditions and the following disclaimer. 8b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// * Redistributions in binary form must reproduce the above 9b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// copyright notice, this list of conditions and the following 10b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// disclaimer in the documentation and/or other materials provided 11b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// with the distribution. 12b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// * Neither the name of Google Inc. nor the names of its 13b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// contributors may be used to endorse or promote products derived 14b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// from this software without specific prior written permission. 15b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// 16b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 28b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef WIN32_LEAN_AND_MEAN 29b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// WIN32_LEAN_AND_MEAN implies NOCRYPT and NOGDI. 30b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define WIN32_LEAN_AND_MEAN 31b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 32b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef NOMINMAX 33b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define NOMINMAX 34b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 35b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef NOKERNEL 36b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define NOKERNEL 37b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 38b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef NOUSER 39b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define NOUSER 40b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 41b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef NOSERVICE 42b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define NOSERVICE 43b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 44b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef NOSOUND 45b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define NOSOUND 46b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 47b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef NOMCX 48b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define NOMCX 49b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 50b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Require Windows XP or higher (this is required for the RtlCaptureContext 51b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// function to be present). 52b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifndef _WIN32_WINNT 53b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define _WIN32_WINNT 0x501 54b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 55b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 56b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <windows.h> 57b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 58b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifdef V8_WIN32_HEADERS_FULL 593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#include <signal.h> // For raise(). 60b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <time.h> // For LocalOffset() implementation. 61b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <mmsystem.h> // For timeGetTime(). 62b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifdef __MINGW32__ 63b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Require Windows XP or higher when compiling with MinGW. This is for MinGW 64b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// header files to expose getaddrinfo. 65b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef _WIN32_WINNT 66b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define _WIN32_WINNT 0x501 67b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif // __MINGW32__ 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) 69b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <dbghelp.h> // For SymLoadModule64 and al. 7044f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include <errno.h> // For STRUNCATE 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#endif // !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) 72b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <limits.h> // For INT_MAX and al. 73b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <tlhelp32.h> // For Module32First and al. 74b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 75b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// These additional WIN32 includes have to be right here as the #undef's below 76b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// makes it impossible to have them elsewhere. 77b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <winsock2.h> 78b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <ws2tcpip.h> 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#ifndef __MINGW32__ 803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#include <wspiapi.h> 813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#endif // __MINGW32__ 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#include <process.h> // For _beginthreadex(). 83b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include <stdlib.h> 84b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif // V8_WIN32_HEADERS_FULL 85b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 86b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef VOID 87b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef DELETE 88b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef IN 89b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef THIS 90b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef CONST 91b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef NAN 92b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef TRUE 93b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef FALSE 94b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef UNKNOWN 95b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef NONE 96b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef ANY 97b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef IGNORE 98b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef GetObject 99b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef CreateMutex 100b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#undef CreateSemaphore 101