提交 2858f856 编写于 作者: C Chris Metcalf

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: NChris Metcalf <cmetcalf@tilera.com>
上级 cb210ee3
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <asm/irqflags.h> #include <asm/irqflags.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/types.h> #include <asm/types.h>
#include <asm/signal.h>
#include <hv/hypervisor.h> #include <hv/hypervisor.h>
#include <arch/abi.h> #include <arch/abi.h>
#include <arch/interrupts.h> #include <arch/interrupts.h>
...@@ -1039,11 +1040,25 @@ handle_syscall: ...@@ -1039,11 +1040,25 @@ handle_syscall:
/* Do syscall trace again, if requested. */ /* Do syscall trace again, if requested. */
ld r30, r31 ld r30, r31
andi r30, r30, _TIF_SYSCALL_TRACE andi r0, r30, _TIF_SYSCALL_TRACE
beqzt r30, 1f {
andi r0, r30, _TIF_SINGLESTEP
beqzt r0, 1f
}
jal do_syscall_trace jal do_syscall_trace
FEEDBACK_REENTER(handle_syscall) 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: .Lcompat_syscall:
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册