arch/tile: fix single-stepping over swint1 instructions on tilegx
If we are single-stepping and make a syscall, we call ptrace_notify() explicitly on the return path back to user space, since we are returning to a pc value set artificially to the next instruction, and otherwise we won't register that we stepped over the syscall instruction (swint1). Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
This commit is contained in:
parent
cb210ee3a8
commit
2858f85602
|
@ -22,6 +22,7 @@
|
|||
#include <asm/irqflags.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/signal.h>
|
||||
#include <hv/hypervisor.h>
|
||||
#include <arch/abi.h>
|
||||
#include <arch/interrupts.h>
|
||||
|
@ -1039,11 +1040,25 @@ handle_syscall:
|
|||
|
||||
/* Do syscall trace again, if requested. */
|
||||
ld r30, r31
|
||||
andi r30, r30, _TIF_SYSCALL_TRACE
|
||||
beqzt r30, 1f
|
||||
andi r0, r30, _TIF_SYSCALL_TRACE
|
||||
{
|
||||
andi r0, r30, _TIF_SINGLESTEP
|
||||
beqzt r0, 1f
|
||||
}
|
||||
jal do_syscall_trace
|
||||
FEEDBACK_REENTER(handle_syscall)
|
||||
1: j .Lresume_userspace /* jump into middle of interrupt_return */
|
||||
andi r0, r30, _TIF_SINGLESTEP
|
||||
|
||||
1: beqzt r0, 2f
|
||||
|
||||
/* Single stepping -- notify ptrace. */
|
||||
{
|
||||
movei r0, SIGTRAP
|
||||
jal ptrace_notify
|
||||
}
|
||||
FEEDBACK_REENTER(handle_syscall)
|
||||
|
||||
2: j .Lresume_userspace /* jump into middle of interrupt_return */
|
||||
|
||||
.Lcompat_syscall:
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue