annotate src/os/windows/vm/os_windows.hpp @ 17716:cdb71841f4bc

6498581: ThreadInterruptTest3 produces wrong output on Windows Summary: There is race condition between os::interrupt and os::is_interrupted on Windows. In JVM_Sleep(Thread.sleep), check if thread gets interrupted, it may see interrupted but not really interrupted so cause spurious waking up (early return from sleep). Fix by checking if interrupt event really gets set thus prevent false return. For intrinsic of _isInterrupted, on Windows, go fastpath only on bit not set. Reviewed-by: acorn, kvn Contributed-by: david.holmes@oracle.com, yumin.qi@oracle.com
author minqi
date Wed, 26 Feb 2014 15:20:41 -0800
parents 5e3b6f79d280
children b0133e4187d3 6c9332549827
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
11092
59b052799158 8015884: runThese crashed with SIGSEGV, hs_err has an error instead of stacktrace
dcubed
parents: 6842
diff changeset
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 470
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 470
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 470
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #ifndef OS_WINDOWS_VM_OS_WINDOWS_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #define OS_WINDOWS_VM_OS_WINDOWS_HPP
0
a61af66fc99e Initial load
duke
parents:
diff changeset
27 // Win32_OS defines the interface to windows operating systems
a61af66fc99e Initial load
duke
parents:
diff changeset
28
a61af66fc99e Initial load
duke
parents:
diff changeset
29 class win32 {
6080
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents: 3885
diff changeset
30 friend class os;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
31
a61af66fc99e Initial load
duke
parents:
diff changeset
32 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
33 static int _vm_page_size;
a61af66fc99e Initial load
duke
parents:
diff changeset
34 static int _vm_allocation_granularity;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 static int _processor_type;
a61af66fc99e Initial load
duke
parents:
diff changeset
36 static int _processor_level;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 static julong _physical_memory;
a61af66fc99e Initial load
duke
parents:
diff changeset
38 static size_t _default_stack_size;
a61af66fc99e Initial load
duke
parents:
diff changeset
39 static bool _is_nt;
389
ee21eaa8ffe1 6660681: Incrementally reserve pages on win server 2003 for better large page affinity
jmasa
parents: 0
diff changeset
40 static bool _is_windows_2003;
2204
63d374c54045 7014918: Improve core/minidump handling in Hotspot
ctornqvi
parents: 1972
diff changeset
41 static bool _is_windows_server;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
42
6080
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents: 3885
diff changeset
43 static void print_windows_version(outputStream* st);
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents: 3885
diff changeset
44
0
a61af66fc99e Initial load
duke
parents:
diff changeset
45 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
46 // Windows-specific interface:
a61af66fc99e Initial load
duke
parents:
diff changeset
47 static void initialize_system_info();
a61af66fc99e Initial load
duke
parents:
diff changeset
48 static void setmode_streams();
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50 // Processor info as provided by NT
a61af66fc99e Initial load
duke
parents:
diff changeset
51 static int processor_type() { return _processor_type; }
a61af66fc99e Initial load
duke
parents:
diff changeset
52 // Processor level may not be accurate on non-NT systems
a61af66fc99e Initial load
duke
parents:
diff changeset
53 static int processor_level() {
a61af66fc99e Initial load
duke
parents:
diff changeset
54 assert(is_nt(), "use vm_version instead");
a61af66fc99e Initial load
duke
parents:
diff changeset
55 return _processor_level;
a61af66fc99e Initial load
duke
parents:
diff changeset
56 }
a61af66fc99e Initial load
duke
parents:
diff changeset
57 static julong available_memory();
a61af66fc99e Initial load
duke
parents:
diff changeset
58 static julong physical_memory() { return _physical_memory; }
a61af66fc99e Initial load
duke
parents:
diff changeset
59
3833
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
60 // load dll from Windows system directory or Windows directory
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
61 static HINSTANCE load_Windows_dll(const char* name, char *ebuf, int ebuflen);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
62
0
a61af66fc99e Initial load
duke
parents:
diff changeset
63 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // Generic interface:
a61af66fc99e Initial load
duke
parents:
diff changeset
65
a61af66fc99e Initial load
duke
parents:
diff changeset
66 // Trace number of created threads
a61af66fc99e Initial load
duke
parents:
diff changeset
67 static intx _os_thread_limit;
a61af66fc99e Initial load
duke
parents:
diff changeset
68 static volatile intx _os_thread_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
69
a61af66fc99e Initial load
duke
parents:
diff changeset
70 // Tells whether the platform is NT or Windown95
a61af66fc99e Initial load
duke
parents:
diff changeset
71 static bool is_nt() { return _is_nt; }
a61af66fc99e Initial load
duke
parents:
diff changeset
72
2204
63d374c54045 7014918: Improve core/minidump handling in Hotspot
ctornqvi
parents: 1972
diff changeset
73 // Tells whether this is a server version of Windows
63d374c54045 7014918: Improve core/minidump handling in Hotspot
ctornqvi
parents: 1972
diff changeset
74 static bool is_windows_server() { return _is_windows_server; }
63d374c54045 7014918: Improve core/minidump handling in Hotspot
ctornqvi
parents: 1972
diff changeset
75
389
ee21eaa8ffe1 6660681: Incrementally reserve pages on win server 2003 for better large page affinity
jmasa
parents: 0
diff changeset
76 // Tells whether the platform is Windows 2003
ee21eaa8ffe1 6660681: Incrementally reserve pages on win server 2003 for better large page affinity
jmasa
parents: 0
diff changeset
77 static bool is_windows_2003() { return _is_windows_2003; }
ee21eaa8ffe1 6660681: Incrementally reserve pages on win server 2003 for better large page affinity
jmasa
parents: 0
diff changeset
78
0
a61af66fc99e Initial load
duke
parents:
diff changeset
79 // Returns the byte size of a virtual memory page
a61af66fc99e Initial load
duke
parents:
diff changeset
80 static int vm_page_size() { return _vm_page_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
81
a61af66fc99e Initial load
duke
parents:
diff changeset
82 // Returns the size in bytes of memory blocks which can be allocated.
a61af66fc99e Initial load
duke
parents:
diff changeset
83 static int vm_allocation_granularity() { return _vm_allocation_granularity; }
a61af66fc99e Initial load
duke
parents:
diff changeset
84
a61af66fc99e Initial load
duke
parents:
diff changeset
85 // Read the headers for the executable that started the current process into
a61af66fc99e Initial load
duke
parents:
diff changeset
86 // the structure passed in (see winnt.h).
a61af66fc99e Initial load
duke
parents:
diff changeset
87 static void read_executable_headers(PIMAGE_NT_HEADERS);
a61af66fc99e Initial load
duke
parents:
diff changeset
88
a61af66fc99e Initial load
duke
parents:
diff changeset
89 // Default stack size for the current process.
a61af66fc99e Initial load
duke
parents:
diff changeset
90 static size_t default_stack_size() { return _default_stack_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
91
a61af66fc99e Initial load
duke
parents:
diff changeset
92 #ifndef _WIN64
a61af66fc99e Initial load
duke
parents:
diff changeset
93 // A wrapper to install a structured exception handler for fast JNI accesors.
a61af66fc99e Initial load
duke
parents:
diff changeset
94 static address fast_jni_accessor_wrapper(BasicType);
a61af66fc99e Initial load
duke
parents:
diff changeset
95 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
96
11092
59b052799158 8015884: runThese crashed with SIGSEGV, hs_err has an error instead of stacktrace
dcubed
parents: 6842
diff changeset
97 #ifndef PRODUCT
59b052799158 8015884: runThese crashed with SIGSEGV, hs_err has an error instead of stacktrace
dcubed
parents: 6842
diff changeset
98 static void call_test_func_with_wrapper(void (*funcPtr)(void));
59b052799158 8015884: runThese crashed with SIGSEGV, hs_err has an error instead of stacktrace
dcubed
parents: 6842
diff changeset
99 #endif
59b052799158 8015884: runThese crashed with SIGSEGV, hs_err has an error instead of stacktrace
dcubed
parents: 6842
diff changeset
100
0
a61af66fc99e Initial load
duke
parents:
diff changeset
101 // filter function to ignore faults on serializations page
a61af66fc99e Initial load
duke
parents:
diff changeset
102 static LONG WINAPI serialize_fault_filter(struct _EXCEPTION_POINTERS* e);
a61af66fc99e Initial load
duke
parents:
diff changeset
103 };
a61af66fc99e Initial load
duke
parents:
diff changeset
104
11151
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
105 /*
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
106 * Crash protection for the watcher thread. Wrap the callback
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
107 * with a __try { call() }
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
108 * To be able to use this - don't take locks, don't rely on destructors,
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
109 * don't make OS library calls, don't allocate memory, don't print,
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
110 * don't call code that could leave the heap / memory in an inconsistent state,
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
111 * or anything else where we are not in control if we suddenly jump out.
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
112 */
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
113 class WatcherThreadCrashProtection : public StackObj {
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
114 public:
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
115 WatcherThreadCrashProtection();
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
116 bool call(os::CrashProtectionCallback& cb);
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
117 };
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 11092
diff changeset
118
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6080
diff changeset
119 class PlatformEvent : public CHeapObj<mtInternal> {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
120 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
121 double CachePad [4] ; // increase odds that _Event is sole occupant of cache line
a61af66fc99e Initial load
duke
parents:
diff changeset
122 volatile int _Event ;
a61af66fc99e Initial load
duke
parents:
diff changeset
123 HANDLE _ParkHandle ;
a61af66fc99e Initial load
duke
parents:
diff changeset
124
a61af66fc99e Initial load
duke
parents:
diff changeset
125 public: // TODO-FIXME: make dtor private
a61af66fc99e Initial load
duke
parents:
diff changeset
126 ~PlatformEvent() { guarantee (0, "invariant") ; }
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
129 PlatformEvent() {
a61af66fc99e Initial load
duke
parents:
diff changeset
130 _Event = 0 ;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 _ParkHandle = CreateEvent (NULL, false, false, NULL) ;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 guarantee (_ParkHandle != NULL, "invariant") ;
a61af66fc99e Initial load
duke
parents:
diff changeset
133 }
a61af66fc99e Initial load
duke
parents:
diff changeset
134
a61af66fc99e Initial load
duke
parents:
diff changeset
135 // Exercise caution using reset() and fired() - they may require MEMBARs
a61af66fc99e Initial load
duke
parents:
diff changeset
136 void reset() { _Event = 0 ; }
a61af66fc99e Initial load
duke
parents:
diff changeset
137 int fired() { return _Event; }
a61af66fc99e Initial load
duke
parents:
diff changeset
138 void park () ;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 void unpark () ;
a61af66fc99e Initial load
duke
parents:
diff changeset
140 int park (jlong millis) ;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 } ;
a61af66fc99e Initial load
duke
parents:
diff changeset
142
a61af66fc99e Initial load
duke
parents:
diff changeset
143
a61af66fc99e Initial load
duke
parents:
diff changeset
144
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6080
diff changeset
145 class PlatformParker : public CHeapObj<mtInternal> {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
146 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
147 HANDLE _ParkEvent ;
a61af66fc99e Initial load
duke
parents:
diff changeset
148
a61af66fc99e Initial load
duke
parents:
diff changeset
149 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
150 ~PlatformParker () { guarantee (0, "invariant") ; }
a61af66fc99e Initial load
duke
parents:
diff changeset
151 PlatformParker () {
a61af66fc99e Initial load
duke
parents:
diff changeset
152 _ParkEvent = CreateEvent (NULL, true, false, NULL) ;
a61af66fc99e Initial load
duke
parents:
diff changeset
153 guarantee (_ParkEvent != NULL, "invariant") ;
a61af66fc99e Initial load
duke
parents:
diff changeset
154 }
a61af66fc99e Initial load
duke
parents:
diff changeset
155
a61af66fc99e Initial load
duke
parents:
diff changeset
156 } ;
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
157
3833
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
158 // JDK7 requires VS2010
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
159 #if _MSC_VER < 1600
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
160 #define JDK6_OR_EARLIER 1
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
161 #endif
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
162
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
163
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
164
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
165 class WinSock2Dll: AllStatic {
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
166 public:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
167 static BOOL WSAStartup(WORD, LPWSADATA);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
168 static struct hostent* gethostbyname(const char *name);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
169 static BOOL WinSock2Available();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
170 #ifdef JDK6_OR_EARLIER
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
171 private:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
172 static int (PASCAL FAR* _WSAStartup)(WORD, LPWSADATA);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
173 static struct hostent *(PASCAL FAR *_gethostbyname)(...);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
174 static BOOL initialized;
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
175
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
176 static void initialize();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
177 #endif
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
178 };
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
179
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
180 class Kernel32Dll: AllStatic {
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
181 public:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
182 static BOOL SwitchToThread();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
183 static SIZE_T GetLargePageMinimum();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
184
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
185 static BOOL SwitchToThreadAvailable();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
186 static BOOL GetLargePageMinimumAvailable();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
187
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
188 // Help tools
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
189 static BOOL HelpToolsAvailable();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
190 static HANDLE CreateToolhelp32Snapshot(DWORD,DWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
191 static BOOL Module32First(HANDLE,LPMODULEENTRY32);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
192 static BOOL Module32Next(HANDLE,LPMODULEENTRY32);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
193
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
194 static BOOL GetNativeSystemInfoAvailable();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
195 static void GetNativeSystemInfo(LPSYSTEM_INFO);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
196
3885
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
197 // NUMA calls
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
198 static BOOL NumaCallsAvailable();
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
199 static LPVOID VirtualAllocExNuma(HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD);
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
200 static BOOL GetNumaHighestNodeNumber(PULONG);
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
201 static BOOL GetNumaNodeProcessorMask(UCHAR, PULONGLONG);
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
202
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6080
diff changeset
203 // Stack walking
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6080
diff changeset
204 static USHORT RtlCaptureStackBackTrace(ULONG, ULONG, PVOID*, PULONG);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6080
diff changeset
205
3833
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
206 private:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
207 // GetLargePageMinimum available on Windows Vista/Windows Server 2003
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
208 // and later
3885
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
209 // NUMA calls available Windows Vista/WS2008 and later
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
210
3833
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
211 static SIZE_T (WINAPI *_GetLargePageMinimum)(void);
3885
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
212 static LPVOID (WINAPI *_VirtualAllocExNuma) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD);
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
213 static BOOL (WINAPI *_GetNumaHighestNodeNumber) (PULONG);
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
214 static BOOL (WINAPI *_GetNumaNodeProcessorMask) (UCHAR, PULONGLONG);
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6080
diff changeset
215 static USHORT (WINAPI *_RtlCaptureStackBackTrace)(ULONG, ULONG, PVOID*, PULONG);
3833
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
216 static BOOL initialized;
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
217
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
218 static void initialize();
3885
3cd0157e1d4d 7082969: NUMA interleaving
iveresov
parents: 3833
diff changeset
219 static void initializeCommon();
3833
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
220
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
221 #ifdef JDK6_OR_EARLIER
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
222 private:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
223 static BOOL (WINAPI *_SwitchToThread)(void);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
224 static HANDLE (WINAPI* _CreateToolhelp32Snapshot)(DWORD,DWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
225 static BOOL (WINAPI* _Module32First)(HANDLE,LPMODULEENTRY32);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
226 static BOOL (WINAPI* _Module32Next)(HANDLE,LPMODULEENTRY32);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
227 static void (WINAPI *_GetNativeSystemInfo)(LPSYSTEM_INFO);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
228 #endif
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
229
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
230 };
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
231
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
232 class Advapi32Dll: AllStatic {
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
233 public:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
234 static BOOL AdjustTokenPrivileges(HANDLE, BOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
235 static BOOL OpenProcessToken(HANDLE, DWORD, PHANDLE);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
236 static BOOL LookupPrivilegeValue(LPCTSTR, LPCTSTR, PLUID);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
237
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
238 static BOOL AdvapiAvailable();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
239
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
240 #ifdef JDK6_OR_EARLIER
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
241 private:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
242 static BOOL (WINAPI *_AdjustTokenPrivileges)(HANDLE, BOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
243 static BOOL (WINAPI *_OpenProcessToken)(HANDLE, DWORD, PHANDLE);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
244 static BOOL (WINAPI *_LookupPrivilegeValue)(LPCTSTR, LPCTSTR, PLUID);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
245 static BOOL initialized;
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
246
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
247 static void initialize();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
248 #endif
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
249 };
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
250
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
251 class PSApiDll: AllStatic {
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
252 public:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
253 static BOOL EnumProcessModules(HANDLE, HMODULE *, DWORD, LPDWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
254 static DWORD GetModuleFileNameEx(HANDLE, HMODULE, LPTSTR, DWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
255 static BOOL GetModuleInformation(HANDLE, HMODULE, LPMODULEINFO, DWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
256
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
257 static BOOL PSApiAvailable();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
258
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
259 #ifdef JDK6_OR_EARLIER
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
260 private:
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
261 static BOOL (WINAPI *_EnumProcessModules)(HANDLE, HMODULE *, DWORD, LPDWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
262 static BOOL (WINAPI *_GetModuleFileNameEx)(HANDLE, HMODULE, LPTSTR, DWORD);;
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
263 static BOOL (WINAPI *_GetModuleInformation)(HANDLE, HMODULE, LPMODULEINFO, DWORD);
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
264 static BOOL initialized;
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
265
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
266 static void initialize();
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
267 #endif
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
268 };
b1cbb0907b36 7016797: Hotspot: securely/restrictive load dlls and new API for loading system dlls
zgu
parents: 2204
diff changeset
269
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
270 #endif // OS_WINDOWS_VM_OS_WINDOWS_HPP