Alexandre Julliard : ntdll: Fix support for breakpoint exceptions on ARM64.

Alexandre Julliard julliard at winehq.org
Tue Aug 13 14:54:34 CDT 2019


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Aug 13 15:41:55 2019 +0200

ntdll: Fix support for breakpoint exceptions on ARM64.

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

---

 dlls/ntdll/signal_arm64.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c
index 4ebccd2..e405c90 100644
--- a/dlls/ntdll/signal_arm64.c
+++ b/dlls/ntdll/signal_arm64.c
@@ -506,6 +506,17 @@ done:
 }
 
 /**********************************************************************
+ *		raise_trap_exception
+ */
+static void WINAPI raise_trap_exception( EXCEPTION_RECORD *rec, CONTEXT *context )
+{
+    NTSTATUS status;
+    if (rec->ExceptionCode == EXCEPTION_BREAKPOINT) context->Pc += 4;
+    status = NtRaiseException( rec, context, TRUE );
+    raise_status( status, rec );
+}
+
+/**********************************************************************
  *		raise_generic_exception
  */
 static void WINAPI raise_generic_exception( EXCEPTION_RECORD *rec, CONTEXT *context )
@@ -704,7 +715,7 @@ static void segv_handler( int signal, siginfo_t *info, void *ucontext )
 static void trap_handler( int signal, siginfo_t *info, void *ucontext )
 {
     ucontext_t *context = ucontext;
-    EXCEPTION_RECORD *rec = setup_exception( context, raise_generic_exception );
+    EXCEPTION_RECORD *rec = setup_exception( context, raise_trap_exception );
 
     switch (info->si_code)
     {
@@ -1208,18 +1219,12 @@ void signal_exit_process( int status )
 /**********************************************************************
  *              DbgBreakPoint   (NTDLL.@)
  */
-void WINAPI DbgBreakPoint(void)
-{
-     kill(getpid(), SIGTRAP);
-}
+__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "brk #0; ret")
 
 /**********************************************************************
  *              DbgUserBreakPoint   (NTDLL.@)
  */
-void WINAPI DbgUserBreakPoint(void)
-{
-     kill(getpid(), SIGTRAP);
-}
+__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "brk #0; ret")
 
 /**********************************************************************
  *           NtCurrentTeb   (NTDLL.@)




More information about the wine-cvs mailing list