Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2858f856 authored by Chris Metcalf's avatar Chris Metcalf
Browse files

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: default avatarChris Metcalf <cmetcalf@tilera.com>
parent cb210ee3
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -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:
	/*