From 672a084584524dfb173819a30b19b87aa14bf8f8 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 27 Jan 2011 13:59:45 +0100 Subject: [PATCH] ntdll: Implement RtlRaiseException for x86_64 directly instead of using the winebuild-generated code. --- dlls/ntdll/signal_x86_64.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index c1d1b845d5d..86f5c934d04 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -3098,7 +3098,22 @@ void WINAPI __regs_RtlRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context ) status = raise_exception( rec, context, TRUE ); if (status != STATUS_SUCCESS) raise_status( status, rec ); } -DEFINE_REGS_ENTRYPOINT( RtlRaiseException, 1 ) +__ASM_GLOBAL_FUNC( RtlRaiseException, + "movq %rcx,8(%rsp)\n\t" + "sub $0x4f8,%rsp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 0x4f8\n\t") + "leaq 0x20(%rsp),%rcx\n\t" + "call " __ASM_NAME("RtlCaptureContext") "\n\t" + "leaq 0x20(%rsp),%rdx\n\t" /* context pointer */ + "movq 0x4f8(%rsp),%rax\n\t" /* return address */ + "movq %rax,0xf8(%rdx)\n\t" /* context->Rip */ + "leaq 0x500(%rsp),%rax\n\t" /* orig stack pointer */ + "movq %rax,0x98(%rdx)\n\t" /* context->Rsp */ + "movq (%rax),%rcx\n\t" /* original first parameter */ + "movq %rcx,0x80(%rdx)\n\t" /* context->Rcx */ + "call " __ASM_NAME("__regs_RtlRaiseException") "\n\t" + "leaq 0x20(%rsp),%rdi\n\t" /* context pointer */ + "call " __ASM_NAME("set_cpu_context") /* does not return */ ); /************************************************************************* -- 2.11.4.GIT