Alexandre Julliard : ntdll: Call NtRaiseException directly from RtlRaiseException on x86-64.

Alexandre Julliard julliard at winehq.org
Thu Jul 20 16:20:34 CDT 2017


Module: wine
Branch: master
Commit: ac6244b55ad49f856b321d55c2007e6807c0f138
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ac6244b55ad49f856b321d55c2007e6807c0f138

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Jul 20 13:00:10 2017 +0200

ntdll: Call NtRaiseException directly from RtlRaiseException on x86-64.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/signal_x86_64.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 08881e7..0c9ef50 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -4041,14 +4041,6 @@ NTSTATUS WINAPI NtRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL
 /***********************************************************************
  *		RtlRaiseException (NTDLL.@)
  */
-void WINAPI __regs_RtlRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context )
-{
-    NTSTATUS status;
-
-    rec->ExceptionAddress = (void *)context->Rip;
-    status = raise_exception( rec, context, TRUE );
-    if (status != STATUS_SUCCESS) raise_status( status, rec );
-}
 __ASM_GLOBAL_FUNC( RtlRaiseException,
                    "movq %rcx,8(%rsp)\n\t"
                    "sub $0x4f8,%rsp\n\t"
@@ -4056,15 +4048,17 @@ __ASM_GLOBAL_FUNC( RtlRaiseException,
                    "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_full_cpu_context") /* does not return */ );
+                   "movq 0x4f8(%rsp),%rax\n\t"  /* return address */
+                   "movq %rax,0xf8(%rdx)\n\t"   /* context->Rip */
+                   "movq %rax,0x10(%rcx)\n\t"   /* rec->ExceptionAddress */
+                   "movl $1,%r8d\n\t"
+                   "call " __ASM_NAME("NtRaiseException") "\n\t"
+                   "movq %rax,%rcx\n\t"
+                   "call " __ASM_NAME("RtlRaiseStatus") /* does not return */ );
 
 
 /*************************************************************************




More information about the wine-cvs mailing list