Commit 19bb93ec authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

msvcr110: Add __crtCapturePreviousContext implementation.

parent a2a258f4
...@@ -905,7 +905,7 @@ ...@@ -905,7 +905,7 @@
@ cdecl -arch=i386 __control87_2(long long ptr ptr) @ cdecl -arch=i386 __control87_2(long long ptr ptr)
@ cdecl __create_locale(long str) MSVCRT__create_locale @ cdecl __create_locale(long str) MSVCRT__create_locale
@ cdecl -arch=win64 -norelay __crtCaptureCurrentContext(ptr) ntdll.RtlCaptureContext @ cdecl -arch=win64 -norelay __crtCaptureCurrentContext(ptr) ntdll.RtlCaptureContext
@ stub -arch=win64 __crtCapturePreviousContext @ cdecl -arch=x86_64 -norelay __crtCapturePreviousContext(ptr)
@ cdecl __crtCompareStringA(long long str long str long) @ cdecl __crtCompareStringA(long long str long str long)
@ stub -arch=i386,win64 __crtCompareStringEx @ stub -arch=i386,win64 __crtCompareStringEx
@ cdecl __crtCompareStringW(long long wstr long wstr long) @ cdecl __crtCompareStringW(long long wstr long wstr long)
......
...@@ -890,7 +890,7 @@ ...@@ -890,7 +890,7 @@
@ cdecl -arch=i386 __control87_2(long long ptr ptr) @ cdecl -arch=i386 __control87_2(long long ptr ptr)
@ cdecl __create_locale(long str) MSVCRT__create_locale @ cdecl __create_locale(long str) MSVCRT__create_locale
@ cdecl -arch=win64 -norelay __crtCaptureCurrentContext(ptr) ntdll.RtlCaptureContext @ cdecl -arch=win64 -norelay __crtCaptureCurrentContext(ptr) ntdll.RtlCaptureContext
@ stub -arch=win64 __crtCapturePreviousContext @ cdecl -arch=x86_64 -norelay __crtCapturePreviousContext(ptr)
@ cdecl __crtCompareStringA(long long str long str long) @ cdecl __crtCompareStringA(long long str long str long)
@ stub -arch=i386,win64 __crtCompareStringEx @ stub -arch=i386,win64 __crtCompareStringEx
@ cdecl __crtCompareStringW(long long wstr long wstr long) @ cdecl __crtCompareStringW(long long wstr long wstr long)
......
...@@ -884,7 +884,7 @@ ...@@ -884,7 +884,7 @@
@ cdecl -arch=i386 __control87_2(long long ptr ptr) msvcr120.__control87_2 @ cdecl -arch=i386 __control87_2(long long ptr ptr) msvcr120.__control87_2
@ cdecl __create_locale(long str) msvcr120.__create_locale @ cdecl __create_locale(long str) msvcr120.__create_locale
@ cdecl -arch=win64 -norelay __crtCaptureCurrentContext(ptr) msvcr120.__crtCaptureCurrentContext @ cdecl -arch=win64 -norelay __crtCaptureCurrentContext(ptr) msvcr120.__crtCaptureCurrentContext
@ stub -arch=win64 __crtCapturePreviousContext @ cdecl -arch=x86_64 -norelay __crtCapturePreviousContext(ptr) msvcr120.__crtCapturePreviousContext
@ stub __crtCloseWinRTThreadHandle @ stub __crtCloseWinRTThreadHandle
@ cdecl __crtCompareStringA(long long str long str long) msvcr120.__crtCompareStringA @ cdecl __crtCompareStringA(long long str long str long) msvcr120.__crtCompareStringA
@ cdecl __crtCompareStringW(long long wstr long wstr long) msvcr120.__crtCompareStringW @ cdecl __crtCompareStringW(long long wstr long wstr long) msvcr120.__crtCompareStringW
......
...@@ -798,4 +798,42 @@ int __cdecl _fpieee_flt(ULONG exception_code, EXCEPTION_POINTERS *ep, ...@@ -798,4 +798,42 @@ int __cdecl _fpieee_flt(ULONG exception_code, EXCEPTION_POINTERS *ep,
return EXCEPTION_CONTINUE_SEARCH; return EXCEPTION_CONTINUE_SEARCH;
} }
#if _MSVCR_VER>=110 && _MSVCR_VER<=120
/*********************************************************************
* __crtCapturePreviousContext (MSVCR110.@)
*/
void __cdecl get_prev_context(CONTEXT *ctx, DWORD64 rip)
{
ULONG64 frame, image_base;
RUNTIME_FUNCTION *rf;
void *data;
TRACE("(%p)\n", ctx);
ctx->Rip = rip;
ctx->Rsp += 3*8; /* Rip, Rcx, return address */
rf = RtlLookupFunctionEntry(ctx->Rip, &image_base, NULL);
if(!rf) {
FIXME("RtlLookupFunctionEntry failed\n");
return;
}
RtlVirtualUnwind(UNW_FLAG_NHANDLER, image_base, ctx->Rip,
rf, ctx, &data, &frame, NULL);
}
__ASM_GLOBAL_FUNC( __crtCapturePreviousContext,
"pushq (%rsp)\n\t" /* save Rip */
__ASM_CFI(".cfi_adjust_cfa_offset 8\n\t")
"pushq %rcx\n\t"
__ASM_CFI(".cfi_adjust_cfa_offset 8\n\t")
"call " __ASM_NAME("RtlCaptureContext") "\n\t"
"popq %rcx\n\t"
__ASM_CFI(".cfi_adjust_cfa_offset -8\n\t")
"popq %rdx\n\t"
__ASM_CFI(".cfi_adjust_cfa_offset -8\n\t")
"jmp " __ASM_NAME("get_prev_context") );
#endif
#endif /* __x86_64__ */ #endif /* __x86_64__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment