Module: wine Branch: master Commit: 8a1420653c4e6ad0e9f14a61bd3eb503a1ba1798 URL: https://gitlab.winehq.org/wine/wine/-/commit/8a1420653c4e6ad0e9f14a61bd3eb50...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Dec 5 09:39:11 2023 +0100
ntdll: Fix breakpoint exceptions on ARM.
---
dlls/ntdll/unix/signal_arm.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c index e814b913830..5115fa7ec3a 100644 --- a/dlls/ntdll/unix/signal_arm.c +++ b/dlls/ntdll/unix/signal_arm.c @@ -998,7 +998,7 @@ NTSTATUS WINAPI NtGetContextThread( HANDLE handle, CONTEXT *context )
if (!self) { - NTSTATUS ret = get_thread_context( handle, &context, &self, IMAGE_FILE_MACHINE_ARMNT ); + NTSTATUS ret = get_thread_context( handle, context, &self, IMAGE_FILE_MACHINE_ARMNT ); if (ret || !self) return ret; }
@@ -1077,6 +1077,9 @@ static void setup_exception( ucontext_t *sigcontext, EXCEPTION_RECORD *rec ) return; }
+ /* fix up instruction pointer in context for EXCEPTION_BREAKPOINT */ + if (rec->ExceptionCode == EXCEPTION_BREAKPOINT) context.Pc -= 2; + stack = virtual_setup_exception( stack_ptr, sizeof(*stack), rec ); stack->rec = *rec; stack->context = context; @@ -1348,6 +1351,7 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext ) return; } case 0xfe: /* breakpoint */ + PC_sig(context) += 2; /* skip the instruction */ rec.ExceptionCode = EXCEPTION_BREAKPOINT; rec.NumberParameters = 1; break;