ntdll: Fix breakpoint exceptions on ARM.

This commit is contained in:
Alexandre Julliard 2023-12-05 09:39:11 +01:00
parent 4a138da761
commit 8a1420653c

View file

@ -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;