@@ -13,6 +13,8 @@ Copyright (c) 1997-2000 John Robbins -- All rights reserved.
1313#include < psapi.h>
1414#pragma comment(lib, "psapi.lib")
1515
16+ #include " Common/Platform.hpp"
17+
1618/* //////////////////////////////////////////////////////////////////////
1719File Scope Defines
1820//////////////////////////////////////////////////////////////////////*/
@@ -77,7 +79,16 @@ LPCTSTR __stdcall GetFirstStackTraceString(DWORD dwOpts, EXCEPTION_POINTERS* pEx
7779 // Initialize the STACKFRAME structure.
7880 ZeroMemory (&g_stFrame, sizeof (STACKFRAME));
7981
80- #ifdef _X86_
82+ #if defined(XR_X64)
83+ g_stFrame.AddrPC .Offset = pExPtrs->ContextRecord ->Rip ;
84+ g_stFrame.AddrPC .Mode = AddrModeFlat;
85+ g_stFrame.AddrReturn .Offset = 0 ;
86+ g_stFrame.AddrReturn .Mode = AddrModeFlat;
87+ g_stFrame.AddrStack .Offset = pExPtrs->ContextRecord ->Rsp ;
88+ g_stFrame.AddrStack .Mode = AddrModeFlat;
89+ g_stFrame.AddrFrame .Offset = pExPtrs->ContextRecord ->Rbp ;
90+ g_stFrame.AddrFrame .Mode = AddrModeFlat;
91+ #elif defined(XR_X86)
8192 g_stFrame.AddrPC .Offset = pExPtrs->ContextRecord ->Eip ;
8293 g_stFrame.AddrPC .Mode = AddrModeFlat;
8394 g_stFrame.AddrStack .Offset = pExPtrs->ContextRecord ->Esp ;
@@ -106,8 +117,11 @@ LPCTSTR __stdcall GetNextStackTraceString(DWORD dwOpts, EXCEPTION_POINTERS* pExP
106117 return InternalGetStackTraceString (dwOpts, pExPtrs);
107118}
108119
109- BOOL __stdcall ReadCurrentProcessMemory (
110- HANDLE, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead)
120+ #ifndef XR_X64
121+ BOOL __stdcall ReadCurrentProcessMemory (HANDLE, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead)
122+ #else
123+ BOOL __stdcall ReadCurrentProcessMemory (HANDLE, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, SIZE_T* lpNumberOfBytesRead)
124+ #endif
111125{
112126 return ReadProcessMemory (GetCurrentProcess (), lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead);
113127}
@@ -199,7 +213,7 @@ LPCTSTR __stdcall InternalGetStackTraceString(DWORD dwOpts, EXCEPTION_POINTERS*
199213 }
200214
201215 // ASSERT(iCurr < (BUFF_SIZE - MAX_PATH));
202- DWORD dwDisp;
216+ DWORD_PTR dwDisp;
203217 // Output the symbol name?
204218 if ((dwOpts & GSTSO_SYMBOL) == GSTSO_SYMBOL)
205219 {
@@ -251,7 +265,7 @@ LPCTSTR __stdcall InternalGetStackTraceString(DWORD dwOpts, EXCEPTION_POINTERS*
251265 ZeroMemory (&g_stLine, sizeof (IMAGEHLP_LINE));
252266 g_stLine.SizeOfStruct = sizeof (IMAGEHLP_LINE);
253267
254- if (SymGetLineFromAddr (hProcess, g_stFrame.AddrPC .Offset , &dwDisp, &g_stLine) == TRUE )
268+ if (SymGetLineFromAddr (hProcess, g_stFrame.AddrPC .Offset , (PDWORD) &dwDisp, &g_stLine) == TRUE )
255269 {
256270 iCurr += wsprintf (g_szBuff + iCurr, _T (" , " ));
257271
0 commit comments