Commit af5395c2 authored by Max Filippov's avatar Max Filippov
Browse files

xtensa: implement syscall tracepoints



Add TIF_SYSCALL_TRACEPOINT flag definition; add _TIF_SYSCALL_TRACEPOINT
to _TIF_WORK_MASK. Call trace_sys_enter from do_syscall_trace_enter and
trace_sys_exit from do_syscall_trace_leave when TIF_SYSCALL_TRACEPOINT
flag is set.
Add declaration of sys_call_table to arch/xtensa/include/asm/syscall.h
Add definition of NR_syscalls to arch/xtensa/include/asm/unistd.h
Select HAVE_SYSCALL_TRACEPOINTS.

This change allows tracing each syscall entry and exit through the
ftrace mechanism.

Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent 9f24f3c1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ config XTENSA
	select HAVE_OPROFILE
	select HAVE_PERF_EVENTS
	select HAVE_STACKPROTECTOR
	select HAVE_SYSCALL_TRACEPOINTS
	select IRQ_DOMAIN
	select MODULES_USE_ELF_RELA
	select PERF_USE_VMALLOC
+5 −0
Original line number Diff line number Diff line
@@ -102,6 +102,11 @@ struct pt_regs {

#define user_stack_pointer(regs) ((regs)->areg[1])

static inline unsigned long regs_return_value(struct pt_regs *regs)
{
	return regs->areg[2];
}

#else	/* __ASSEMBLY__ */

# include <asm/asm-offsets.h>
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ static inline int syscall_get_arch(void)
	return AUDIT_ARCH_XTENSA;
}

typedef void (*syscall_t)(void);
extern syscall_t sys_call_table[];

static inline long syscall_get_nr(struct task_struct *task,
				  struct pt_regs *regs)
{
+4 −1
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ static inline struct thread_info *current_thread_info(void)
#define TIF_SIGPENDING		1	/* signal pending */
#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
#define TIF_SINGLESTEP		3	/* restore singlestep on return to user mode */
#define TIF_SYSCALL_TRACEPOINT	4	/* syscall tracepoint instrumentation */
#define TIF_MEMDIE		5	/* is terminating due to OOM killer */
#define TIF_RESTORE_SIGMASK	6	/* restore signal mask in do_signal() */
#define TIF_NOTIFY_RESUME	7	/* callback before returning to user */
@@ -115,8 +116,10 @@ static inline struct thread_info *current_thread_info(void)
#define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
#define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
#define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
#define _TIF_SYSCALL_TRACEPOINT	(1<<TIF_SYSCALL_TRACEPOINT)

#define _TIF_WORK_MASK		(_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP)
#define _TIF_WORK_MASK		(_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
				 _TIF_SYSCALL_TRACEPOINT)

/*
 * Thread-synchronous status.
+2 −0
Original line number Diff line number Diff line
@@ -22,4 +22,6 @@
#define __IGNORE_vfork				/* use clone */
#define __IGNORE_fadvise64			/* use fadvise64_64 */

#define NR_syscalls				__NR_syscalls

#endif /* _XTENSA_UNISTD_H */
Loading