|
@@ -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
|
|
@@ -942,6 +945,8 @@ 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);
|
|
|
+ if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
|
|
+ trace_sys_enter(regs, ret);
|
|
|
audit_syscall_entry(AUDIT_ARCH_ARM, scno, regs->ARM_r0, regs->ARM_r1,
|
|
|
regs->ARM_r2, regs->ARM_r3);
|
|
|
return ret;
|
|
@@ -950,6 +955,8 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno)
|
|
|
asmlinkage int syscall_trace_exit(struct pt_regs *regs, int scno)
|
|
|
{
|
|
|
int ret = ptrace_syscall_trace(regs, scno, PTRACE_SYSCALL_EXIT);
|
|
|
+ if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
|
|
+ trace_sys_exit(regs, ret);
|
|
|
audit_syscall_exit(regs);
|
|
|
return ret;
|
|
|
}
|