Changeset 318
- Timestamp:
- Feb 16, 2012, 2:21:52 PM (13 years ago)
- Location:
- trunk/openjdk/hotspot/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/openjdk/hotspot/src/os/windows/vm/decoder_windows.cpp
r309 r318 29 29 HMODULE Decoder::_dbghelp_handle = NULL; 30 30 bool Decoder::_can_decode_in_vm = false; 31 pfn_SymGetSymFromAddr 64 Decoder::_pfnSymGetSymFromAddr64= NULL;31 pfn_SymGetSymFromAddrXX Decoder::_pfnSymGetSymFromAddrXX = NULL; 32 32 pfn_UndecorateSymbolName Decoder::_pfnUndecorateSymbolName = NULL; 33 33 … … 46 46 pfn_SymSetOptions _pfnSymSetOptions = (pfn_SymSetOptions)::GetProcAddress(handle, "SymSetOptions"); 47 47 pfn_SymInitialize _pfnSymInitialize = (pfn_SymInitialize)::GetProcAddress(handle, "SymInitialize"); 48 _pfnSymGetSymFromAddr64 = (pfn_SymGetSymFromAddr64)::GetProcAddress(handle, "SymGetSymFromAddr64"); 48 #ifdef __WIN32OS2__ 49 _pfnSymGetSymFromAddrXX = (pfn_SymGetSymFromAddrXX)::GetProcAddress(handle, "SymGetSymFromAddr"); 50 #else 51 _pfnSymGetSymFromAddrXX = (pfn_SymGetSymFromAddrXX)::GetProcAddress(handle, "SymGetSymFromAddr64"); 52 #endif 49 53 _pfnUndecorateSymbolName = (pfn_UndecorateSymbolName)GetProcAddress(handle, "UnDecorateSymbolName"); 50 54 51 if (_pfnSymSetOptions == NULL || _pfnSymInitialize == NULL || _pfnSymGetSymFromAddr 64== NULL) {52 _pfnSymGetSymFromAddr 64= NULL;55 if (_pfnSymSetOptions == NULL || _pfnSymInitialize == NULL || _pfnSymGetSymFromAddrXX == NULL) { 56 _pfnSymGetSymFromAddrXX = NULL; 53 57 _pfnUndecorateSymbolName = NULL; 54 58 ::FreeLibrary(handle); … … 60 64 _pfnSymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS); 61 65 if (!_pfnSymInitialize(GetCurrentProcess(), NULL, TRUE)) { 62 _pfnSymGetSymFromAddr 64= NULL;66 _pfnSymGetSymFromAddrXX = NULL; 63 67 _pfnUndecorateSymbolName = NULL; 64 68 ::FreeLibrary(handle); … … 80 84 void Decoder::uninitialize() { 81 85 assert(_initialized, "Decoder not yet initialized"); 82 _pfnSymGetSymFromAddr 64= NULL;86 _pfnSymGetSymFromAddrXX = NULL; 83 87 _pfnUndecorateSymbolName = NULL; 84 88 if (_dbghelp_handle != NULL) { … … 96 100 Decoder::decoder_status Decoder::decode(address addr, char *buf, int buflen, int *offset) { 97 101 assert(_initialized, "Decoder not yet initialized"); 98 if (_pfnSymGetSymFromAddr 64!= NULL) {99 PIMAGEHLP_SYMBOL 64pSymbol;100 char symbolInfo[MAX_PATH + sizeof(IMAGEHLP_SYMBOL 64)];101 pSymbol = (PIMAGEHLP_SYMBOL 64)symbolInfo;102 if (_pfnSymGetSymFromAddrXX != NULL) { 103 PIMAGEHLP_SYMBOLXX pSymbol; 104 char symbolInfo[MAX_PATH + sizeof(IMAGEHLP_SYMBOLXX)]; 105 pSymbol = (PIMAGEHLP_SYMBOLXX)symbolInfo; 102 106 pSymbol->MaxNameLength = MAX_PATH; 103 pSymbol->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL 64);104 DWORD 64displacement;105 if (_pfnSymGetSymFromAddr 64(::GetCurrentProcess(), (DWORD64)addr, &displacement, pSymbol)) {107 pSymbol->SizeOfStruct = sizeof(IMAGEHLP_SYMBOLXX); 108 DWORDXX displacement; 109 if (_pfnSymGetSymFromAddrXX(::GetCurrentProcess(), (DWORDXX)addr, &displacement, pSymbol)) { 106 110 if (buf != NULL) { 107 111 if (!demangle(pSymbol->Name, buf, buflen)) { -
trunk/openjdk/hotspot/src/share/vm/utilities/decoder.hpp
r317 r318 33 33 #include <imagehlp.h> 34 34 35 #ifdef __WIN32OS2__ 36 #define DWORDXX DWORD 37 #define PDWORDXX PDWORD 38 #define IMAGEHLP_SYMBOLXX IMAGEHLP_SYMBOL 39 #define PIMAGEHLP_SYMBOLXX PIMAGEHLP_SYMBOL 40 #else 41 #define DWORDXX DWORD64 42 #define PDWORDXX PDWORD64 43 #define IMAGEHLP_SYMBOLXX IMAGEHLP_SYMBOL64 44 #define PIMAGEHLP_SYMBOLXX PIMAGEHLP_SYMBOL64 45 #endif 46 35 47 // functions needed for decoding symbols 36 48 typedef DWORD (WINAPI *pfn_SymSetOptions)(DWORD); 37 49 typedef BOOL (WINAPI *pfn_SymInitialize)(HANDLE, PCTSTR, BOOL); 38 typedef BOOL (WINAPI *pfn_SymGetSymFromAddr 64)(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);50 typedef BOOL (WINAPI *pfn_SymGetSymFromAddrXX)(HANDLE, DWORDXX, PDWORDXX, PIMAGEHLP_SYMBOLXX); 39 51 typedef DWORD (WINAPI *pfn_UndecorateSymbolName)(const char*, char*, DWORD, DWORD); 40 52 … … 93 105 static HMODULE _dbghelp_handle; 94 106 static bool _can_decode_in_vm; 95 static pfn_SymGetSymFromAddr 64 _pfnSymGetSymFromAddr64;107 static pfn_SymGetSymFromAddrXX _pfnSymGetSymFromAddrXX; 96 108 static pfn_UndecorateSymbolName _pfnUndecorateSymbolName; 97 109 #else
Note:
See TracChangeset
for help on using the changeset viewer.