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