ntdll: Fix support for breakpoint exceptions on ARM64.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3027c266fc
commit
fc97373f62
|
@ -505,6 +505,17 @@ done:
|
||||||
set_cpu_context( context );
|
set_cpu_context( context );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* 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
|
* raise_generic_exception
|
||||||
*/
|
*/
|
||||||
|
@ -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 )
|
static void trap_handler( int signal, siginfo_t *info, void *ucontext )
|
||||||
{
|
{
|
||||||
ucontext_t *context = 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)
|
switch (info->si_code)
|
||||||
{
|
{
|
||||||
|
@ -1208,18 +1219,12 @@ void signal_exit_process( int status )
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* DbgBreakPoint (NTDLL.@)
|
* DbgBreakPoint (NTDLL.@)
|
||||||
*/
|
*/
|
||||||
void WINAPI DbgBreakPoint(void)
|
__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "brk #0; ret")
|
||||||
{
|
|
||||||
kill(getpid(), SIGTRAP);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* DbgUserBreakPoint (NTDLL.@)
|
* DbgUserBreakPoint (NTDLL.@)
|
||||||
*/
|
*/
|
||||||
void WINAPI DbgUserBreakPoint(void)
|
__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "brk #0; ret")
|
||||||
{
|
|
||||||
kill(getpid(), SIGTRAP);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* NtCurrentTeb (NTDLL.@)
|
* NtCurrentTeb (NTDLL.@)
|
||||||
|
|
Loading…
Reference in New Issue