Alexandre Julliard : msvcrt: Simplify stack layout in __crtCapturePreviousContext().
Alexandre Julliard
julliard at winehq.org
Wed Aug 21 14:39:33 CDT 2019
Module: wine
Branch: master
Commit: ed6aa17d9880f5c5e1fe47fe725bfe96d4ed681f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ed6aa17d9880f5c5e1fe47fe725bfe96d4ed681f
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Aug 21 13:54:46 2019 +0200
msvcrt: Simplify stack layout in __crtCapturePreviousContext().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/except_x86_64.c | 21 ++++++++-------------
1 file changed, 8 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcrt/except_x86_64.c b/dlls/msvcrt/except_x86_64.c
index 1aa04ab..09eddfb 100644
--- a/dlls/msvcrt/except_x86_64.c
+++ b/dlls/msvcrt/except_x86_64.c
@@ -732,9 +732,6 @@ void __cdecl get_prev_context(CONTEXT *ctx, DWORD64 rip)
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");
@@ -746,16 +743,14 @@ void __cdecl get_prev_context(CONTEXT *ctx, DWORD64 rip)
}
__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") );
+ "movq %rcx,8(%rsp)\n\t"
+ "call " __ASM_NAME("RtlCaptureContext") "\n\t"
+ "movq 8(%rsp),%rcx\n\t" /* context */
+ "leaq 8(%rsp),%rax\n\t"
+ "movq %rax,0x98(%rcx)\n\t" /* context->Rsp */
+ "movq (%rsp),%rax\n\t"
+ "movq %rax,0xf8(%rcx)\n\t" /* context->Rip */
+ "jmp " __ASM_NAME("get_prev_context") )
#endif
#endif /* __x86_64__ */
More information about the wine-cvs
mailing list