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