annotate src/os/windows/vm/decoder_windows.hpp @ 20295:3f2894c5052e

8048112: G1 Full GC needs to support the case when the very first region is not available Summary: Refactor preparation for compaction during Full GC so that it lazily initializes the first compaction point. This also avoids problems later when the first region may not be committed. Also reviewed by K. Barrett. Reviewed-by: brutisso
author tschatzl
date Mon, 21 Jul 2014 10:00:31 +0200
parents 55fb97c4c58d
children 4ca6dc0799b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
1 /*
17467
55fb97c4c58d 8029233: Update copyright year to match last edit in jdk8 hotspot repository for 2013
mikael
parents: 12199
diff changeset
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
4 *
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
7 * published by the Free Software Foundation.
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
8 *
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
13 * accompanied this code).
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
14 *
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
18 *
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
21 * questions.
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
22 *
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
23 */
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
24
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
25 #ifndef OS_WINDOWS_VM_DECODER_WINDOWS_HPP
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
26 #define OS_WINDOWS_VM_DECIDER_WINDOWS_HPP
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
27
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
28 #include <windows.h>
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
29 #include <imagehlp.h>
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
30
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
31 #include "utilities/decoder.hpp"
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
32
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
33 // functions needed for decoding symbols
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
34 typedef DWORD (WINAPI *pfn_SymSetOptions)(DWORD);
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
35 typedef BOOL (WINAPI *pfn_SymInitialize)(HANDLE, PCTSTR, BOOL);
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
36 typedef BOOL (WINAPI *pfn_SymGetSymFromAddr64)(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
37 typedef DWORD (WINAPI *pfn_UndecorateSymbolName)(const char*, char*, DWORD, DWORD);
7580
dd7248d3e151 7152671: RFE: Windows decoder should add some std dirs to the symbol search path
zgu
parents: 6842
diff changeset
38 typedef BOOL (WINAPI *pfn_SymSetSearchPath)(HANDLE, PCTSTR);
dd7248d3e151 7152671: RFE: Windows decoder should add some std dirs to the symbol search path
zgu
parents: 6842
diff changeset
39 typedef BOOL (WINAPI *pfn_SymGetSearchPath)(HANDLE, PTSTR, int);
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
40
12199
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
41 #ifdef AMD64
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
42 typedef BOOL (WINAPI *pfn_StackWalk64)(DWORD MachineType,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
43 HANDLE hProcess,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
44 HANDLE hThread,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
45 LPSTACKFRAME64 StackFrame,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
46 PVOID ContextRecord,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
47 PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
48 PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
49 PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
50 PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
51 typedef PVOID (WINAPI *pfn_SymFunctionTableAccess64)(HANDLE hProcess, DWORD64 AddrBase);
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
52 typedef DWORD64 (WINAPI *pfn_SymGetModuleBase64)(HANDLE hProcess, DWORD64 dwAddr);
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
53 #endif
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
54
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
55 class WindowsDecoder : public AbstractDecoder {
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
56
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
57 public:
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
58 WindowsDecoder();
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
59 ~WindowsDecoder() { uninitialize(); };
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
60
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
61 bool can_decode_C_frame_in_vm() const;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
62 bool demangle(const char* symbol, char *buf, int buflen);
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
63 bool decode(address addr, char *buf, int buflen, int* offset, const char* modulepath = NULL);
6258
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 4917
diff changeset
64 bool decode(address addr, char *buf, int buflen, int* offset, const void* base) {
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 4917
diff changeset
65 ShouldNotReachHere();
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 4917
diff changeset
66 return false;
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 4917
diff changeset
67 }
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
68
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
69 private:
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
70 void initialize();
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
71 void uninitialize();
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
72
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
73 private:
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
74 HMODULE _dbghelp_handle;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
75 bool _can_decode_in_vm;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
76 pfn_SymGetSymFromAddr64 _pfnSymGetSymFromAddr64;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
77 pfn_UndecorateSymbolName _pfnUndecorateSymbolName;
12199
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
78 #ifdef AMD64
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
79 pfn_StackWalk64 _pfnStackWalk64;
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
80 pfn_SymFunctionTableAccess64 _pfnSymFunctionTableAccess64;
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
81 pfn_SymGetModuleBase64 _pfnSymGetModuleBase64;
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
82
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
83 friend class WindowsDbgHelp;
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
84 #endif
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
85 };
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
86
12199
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
87 #ifdef AMD64
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
88 // TODO: refactor and move the handling of dbghelp.dll outside of Decoder
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
89 class WindowsDbgHelp : public Decoder {
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
90 public:
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
91 static BOOL StackWalk64(DWORD MachineType,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
92 HANDLE hProcess,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
93 HANDLE hThread,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
94 LPSTACKFRAME64 StackFrame,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
95 PVOID ContextRecord,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
96 PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
97 PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
98 PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
99 PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
100 static PVOID SymFunctionTableAccess64(HANDLE hProcess, DWORD64 AddrBase);
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
101
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
102 static pfn_SymFunctionTableAccess64 pfnSymFunctionTableAccess64();
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
103 static pfn_SymGetModuleBase64 pfnSymGetModuleBase64();
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
104 };
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
105 #endif
38f750491293 8022335: Native stack walk while generating hs_err does not work on Windows x64
iklam
parents: 7580
diff changeset
106
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
107 #endif // OS_WINDOWS_VM_DECODER_WINDOWS_HPP
d7e3846464d0 7071311: Decoder enhancement
zgu
parents:
diff changeset
108