Module: wine Branch: master Commit: fc97373f6202c8fef8d070f8b3cc5671baa6b6c0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=fc97373f6202c8fef8d070f8b...
Author: Alexandre Julliard julliard@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@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.@)