Mercurial > hg > graal-compiler
comparison src/os/windows/vm/decoder_windows.hpp @ 12199:38f750491293
8022335: Native stack walk while generating hs_err does not work on Windows x64
Summary: Use WinDbg API StackWalk64()
Reviewed-by: zgu, dholmes
author | iklam |
---|---|
date | Fri, 06 Sep 2013 08:42:42 -0700 |
parents | dd7248d3e151 |
children | de6a9e811145 |
comparison
equal
deleted
inserted
replaced
12198:baa7927dfbd2 | 12199:38f750491293 |
---|---|
36 typedef BOOL (WINAPI *pfn_SymGetSymFromAddr64)(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64); | 36 typedef BOOL (WINAPI *pfn_SymGetSymFromAddr64)(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64); |
37 typedef DWORD (WINAPI *pfn_UndecorateSymbolName)(const char*, char*, DWORD, DWORD); | 37 typedef DWORD (WINAPI *pfn_UndecorateSymbolName)(const char*, char*, DWORD, DWORD); |
38 typedef BOOL (WINAPI *pfn_SymSetSearchPath)(HANDLE, PCTSTR); | 38 typedef BOOL (WINAPI *pfn_SymSetSearchPath)(HANDLE, PCTSTR); |
39 typedef BOOL (WINAPI *pfn_SymGetSearchPath)(HANDLE, PTSTR, int); | 39 typedef BOOL (WINAPI *pfn_SymGetSearchPath)(HANDLE, PTSTR, int); |
40 | 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 | |
41 class WindowsDecoder : public AbstractDecoder { | 55 class WindowsDecoder : public AbstractDecoder { |
42 | 56 |
43 public: | 57 public: |
44 WindowsDecoder(); | 58 WindowsDecoder(); |
45 ~WindowsDecoder() { uninitialize(); }; | 59 ~WindowsDecoder() { uninitialize(); }; |
59 private: | 73 private: |
60 HMODULE _dbghelp_handle; | 74 HMODULE _dbghelp_handle; |
61 bool _can_decode_in_vm; | 75 bool _can_decode_in_vm; |
62 pfn_SymGetSymFromAddr64 _pfnSymGetSymFromAddr64; | 76 pfn_SymGetSymFromAddr64 _pfnSymGetSymFromAddr64; |
63 pfn_UndecorateSymbolName _pfnUndecorateSymbolName; | 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 | |
64 }; | 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 | |
65 | 106 |
66 #endif // OS_WINDOWS_VM_DECODER_WINDOWS_HPP | 107 #endif // OS_WINDOWS_VM_DECODER_WINDOWS_HPP |
67 | 108 |