(svn r20598) -Codechange: [Win32] Replace the external x64 asm with a built-in Windows function.
This commit is contained in:
@@ -10,6 +10,12 @@
|
||||
/** @file crashlog_win.cpp Implementation of a crashlogger for Windows */
|
||||
|
||||
#include "../../stdafx.h"
|
||||
#if defined(_MSC_VER) && defined(_M_AMD64)
|
||||
/* Redefine WinNT version to get RtlCaptureContext prototype. */
|
||||
#undef _WIN32_WINNT
|
||||
#undef NTDDI_VERSION
|
||||
#define _WIN32_WINNT _WIN32_WINNT_WINXP
|
||||
#endif /* defined(_MSC_VER) && defined(_M_AMD64) */
|
||||
#include "../../crashlog.h"
|
||||
#include "win32.h"
|
||||
#include "../../core/alloc_func.hpp"
|
||||
@@ -408,10 +414,6 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
|
||||
#ifdef _M_AMD64
|
||||
extern "C" void *_get_safe_esp();
|
||||
#endif
|
||||
|
||||
static void CDECL CustomAbort(int signal)
|
||||
{
|
||||
RaiseException(0xE1212012, 0, 0, NULL);
|
||||
@@ -421,7 +423,14 @@ static void CDECL CustomAbort(int signal)
|
||||
{
|
||||
#if defined(_MSC_VER)
|
||||
#ifdef _M_AMD64
|
||||
_safe_esp = _get_safe_esp();
|
||||
CONTEXT ctx;
|
||||
RtlCaptureContext(&ctx);
|
||||
|
||||
/* The stack pointer for AMD64 must always be 16-byte aligned inside a
|
||||
* function. As we are simulating a function call with the safe ESP value,
|
||||
* we need to subtract 8 for the imaginary return address otherwise stack
|
||||
* alignment would be wrong in the called function. */
|
||||
_safe_esp = (void *)(ctx.Rsp - 8);
|
||||
#else
|
||||
_asm {
|
||||
mov _safe_esp, esp
|
||||
|
Reference in New Issue
Block a user