Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/os/windows/vm/decoder_windows.hpp
32284 views
1
/*
2
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#ifndef OS_WINDOWS_VM_DECODER_WINDOWS_HPP
26
#define OS_WINDOWS_VM_DECIDER_WINDOWS_HPP
27
28
#include <windows.h>
29
#include <imagehlp.h>
30
31
#include "utilities/decoder.hpp"
32
33
// functions needed for decoding symbols
34
typedef DWORD (WINAPI *pfn_SymSetOptions)(DWORD);
35
typedef BOOL (WINAPI *pfn_SymInitialize)(HANDLE, PCTSTR, BOOL);
36
typedef BOOL (WINAPI *pfn_SymGetSymFromAddr64)(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
37
typedef DWORD (WINAPI *pfn_UndecorateSymbolName)(const char*, char*, DWORD, DWORD);
38
typedef BOOL (WINAPI *pfn_SymSetSearchPath)(HANDLE, PCTSTR);
39
typedef BOOL (WINAPI *pfn_SymGetSearchPath)(HANDLE, PTSTR, int);
40
41
#ifdef AMD64
42
typedef BOOL (WINAPI *pfn_StackWalk64)(DWORD MachineType,
43
HANDLE hProcess,
44
HANDLE hThread,
45
LPSTACKFRAME64 StackFrame,
46
PVOID ContextRecord,
47
PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
48
PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
49
PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
50
PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
51
typedef PVOID (WINAPI *pfn_SymFunctionTableAccess64)(HANDLE hProcess, DWORD64 AddrBase);
52
typedef DWORD64 (WINAPI *pfn_SymGetModuleBase64)(HANDLE hProcess, DWORD64 dwAddr);
53
#endif
54
55
class WindowsDecoder : public AbstractDecoder {
56
57
public:
58
WindowsDecoder();
59
~WindowsDecoder() { uninitialize(); };
60
61
bool can_decode_C_frame_in_vm() const;
62
bool demangle(const char* symbol, char *buf, int buflen);
63
bool decode(address addr, char *buf, int buflen, int* offset, const char* modulepath = NULL);
64
bool decode(address addr, char *buf, int buflen, int* offset, const void* base) {
65
ShouldNotReachHere();
66
return false;
67
}
68
69
private:
70
void initialize();
71
void uninitialize();
72
73
private:
74
HMODULE _dbghelp_handle;
75
bool _can_decode_in_vm;
76
pfn_SymGetSymFromAddr64 _pfnSymGetSymFromAddr64;
77
pfn_UndecorateSymbolName _pfnUndecorateSymbolName;
78
#ifdef AMD64
79
pfn_StackWalk64 _pfnStackWalk64;
80
pfn_SymFunctionTableAccess64 _pfnSymFunctionTableAccess64;
81
pfn_SymGetModuleBase64 _pfnSymGetModuleBase64;
82
83
friend class WindowsDbgHelp;
84
#endif
85
};
86
87
#ifdef AMD64
88
// TODO: refactor and move the handling of dbghelp.dll outside of Decoder
89
class WindowsDbgHelp : public Decoder {
90
public:
91
static BOOL StackWalk64(DWORD MachineType,
92
HANDLE hProcess,
93
HANDLE hThread,
94
LPSTACKFRAME64 StackFrame,
95
PVOID ContextRecord,
96
PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
97
PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
98
PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
99
PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
100
static PVOID SymFunctionTableAccess64(HANDLE hProcess, DWORD64 AddrBase);
101
102
static pfn_SymFunctionTableAccess64 pfnSymFunctionTableAccess64();
103
static pfn_SymGetModuleBase64 pfnSymGetModuleBase64();
104
};
105
#endif
106
107
#endif // OS_WINDOWS_VM_DECODER_WINDOWS_HPP
108
109
110