diff options
Diffstat (limited to 'arch/alpha/kernel/ptrace.c')
| -rw-r--r-- | arch/alpha/kernel/ptrace.c | 32 | 
1 files changed, 13 insertions, 19 deletions
diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c index 54616f496ae..2a4a80ff4a2 100644 --- a/arch/alpha/kernel/ptrace.c +++ b/arch/alpha/kernel/ptrace.c @@ -13,6 +13,7 @@  #include <linux/user.h>  #include <linux/security.h>  #include <linux/signal.h> +#include <linux/tracehook.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h> @@ -312,25 +313,18 @@ long arch_ptrace(struct task_struct *child, long request,  	return ret;  } -asmlinkage void -syscall_trace(void) +asmlinkage unsigned long syscall_trace_enter(void)  { -	if (!test_thread_flag(TIF_SYSCALL_TRACE)) -		return; -	if (!(current->ptrace & PT_PTRACED)) -		return; -	/* The 0x80 provides a way for the tracing parent to distinguish -	   between a syscall stop and SIGTRAP delivery */ -	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) -				 ? 0x80 : 0)); +	unsigned long ret = 0; +	if (test_thread_flag(TIF_SYSCALL_TRACE) && +	    tracehook_report_syscall_entry(current_pt_regs())) +		ret = -1UL; +	return ret ?: current_pt_regs()->r0; +} -	/* -	 * This isn't the same as continuing with a signal, but it will do -	 * for normal use.  strace only continues with a signal if the -	 * stopping signal is not SIGTRAP.  -brl -	 */ -	if (current->exit_code) { -		send_sig(current->exit_code, current, 1); -		current->exit_code = 0; -	} +asmlinkage void +syscall_trace_leave(void) +{ +	if (test_thread_flag(TIF_SYSCALL_TRACE)) +		tracehook_report_syscall_exit(current_pt_regs(), 0);  }  |