diff options
Diffstat (limited to 'arch/arm/kernel/ptrace.c')
| -rw-r--r-- | arch/arm/kernel/ptrace.c | 19 | 
1 files changed, 13 insertions, 6 deletions
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index 3e0fc5f7ed4..739db3a1b2d 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c @@ -30,6 +30,9 @@  #include <asm/pgtable.h>  #include <asm/traps.h> +#define CREATE_TRACE_POINTS +#include <trace/events/syscalls.h> +  #define REG_PC	15  #define REG_PSR	16  /* @@ -918,11 +921,11 @@ static int ptrace_syscall_trace(struct pt_regs *regs, int scno,  {  	unsigned long ip; +	current_thread_info()->syscall = scno; +  	if (!test_thread_flag(TIF_SYSCALL_TRACE))  		return scno; -	current_thread_info()->syscall = scno; -  	/*  	 * IP is used to denote syscall entry/exit:  	 * IP = 0 -> entry, =1 -> exit @@ -941,15 +944,19 @@ static int ptrace_syscall_trace(struct pt_regs *regs, int scno,  asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno)  { -	int ret = ptrace_syscall_trace(regs, scno, PTRACE_SYSCALL_ENTER); +	scno = ptrace_syscall_trace(regs, scno, PTRACE_SYSCALL_ENTER); +	if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) +		trace_sys_enter(regs, scno);  	audit_syscall_entry(AUDIT_ARCH_ARM, scno, regs->ARM_r0, regs->ARM_r1,  			    regs->ARM_r2, regs->ARM_r3); -	return ret; +	return scno;  }  asmlinkage int syscall_trace_exit(struct pt_regs *regs, int scno)  { -	int ret = ptrace_syscall_trace(regs, scno, PTRACE_SYSCALL_EXIT); +	scno = ptrace_syscall_trace(regs, scno, PTRACE_SYSCALL_EXIT); +	if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) +		trace_sys_exit(regs, scno);  	audit_syscall_exit(regs); -	return ret; +	return scno;  }  |