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

Commit c652d780 authored by Matt Fleming's avatar Matt Fleming Committed by Paul Mundt
Browse files

sh: Add ftrace syscall tracing support



Now that I've added TIF_SYSCALL_FTRACE the thread flags do not fit into
a single byte any more. Code testing them now needs to be aware of the
upper and lower bytes.

Signed-off-by: default avatarMatt Fleming <matt@console-pimps.org>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent c1340c05
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ config SUPERH32
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FUNCTION_TRACE_MCOUNT_TEST
	select HAVE_FTRACE_SYSCALLS
	select HAVE_ARCH_KGDB
	select ARCH_HIBERNATION_POSSIBLE if MMU

+1 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ static inline void syscall_get_arguments(struct task_struct *task,
	case 3: args[2] = regs->regs[6];
	case 2: args[1] = regs->regs[5];
	case 1:	args[0] = regs->regs[4];
	case 0:
		break;
	default:
		BUG();
+7 −4
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ extern void free_thread_info(struct thread_info *ti);
#define TIF_SYSCALL_AUDIT	5	/* syscall auditing active */
#define TIF_SECCOMP		6	/* secure computing */
#define TIF_NOTIFY_RESUME	7	/* callback before returning to user */
#define TIF_SYSCALL_FTRACE	8	/* for ftrace syscall instrumentation */
#define TIF_USEDFPU		16	/* FPU was used by this task this quantum (SMP) */
#define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_MEMDIE		18
@@ -129,25 +130,27 @@ extern void free_thread_info(struct thread_info *ti);
#define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT)
#define _TIF_SECCOMP		(1 << TIF_SECCOMP)
#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
#define _TIF_SYSCALL_FTRACE	(1 << TIF_SYSCALL_FTRACE)
#define _TIF_USEDFPU		(1 << TIF_USEDFPU)
#define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)
#define _TIF_FREEZE		(1 << TIF_FREEZE)

/*
 * _TIF_ALLWORK_MASK and _TIF_WORK_MASK need to fit within a byte, or we
 * _TIF_ALLWORK_MASK and _TIF_WORK_MASK need to fit within 2 bytes, or we
 * blow the tst immediate size constraints and need to fix up
 * arch/sh/kernel/entry-common.S.
 */

/* work to do in syscall trace */
#define _TIF_WORK_SYSCALL_MASK	(_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
				 _TIF_SYSCALL_AUDIT | _TIF_SECCOMP)
				 _TIF_SYSCALL_AUDIT | _TIF_SECCOMP    | \
				 _TIF_SYSCALL_FTRACE)

/* work to do on any return to u-space */
#define _TIF_ALLWORK_MASK	(_TIF_SYSCALL_TRACE | _TIF_SIGPENDING      | \
				 _TIF_NEED_RESCHED  | _TIF_SYSCALL_AUDIT   | \
				 _TIF_SINGLESTEP    | _TIF_RESTORE_SIGMASK | \
				 _TIF_NOTIFY_RESUME)
				 _TIF_NOTIFY_RESUME | _TIF_SYSCALL_FTRACE)

/* work to do on interrupt/exception return */
#define _TIF_WORK_MASK		(_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ obj-$(CONFIG_IO_TRAPPED) += io_trapped.o
obj-$(CONFIG_KPROBES)		+= kprobes.o
obj-$(CONFIG_GENERIC_GPIO)	+= gpio.o
obj-$(CONFIG_DYNAMIC_FTRACE)	+= ftrace.o
obj-$(CONFIG_FTRACE_SYSCALLS)	+= ftrace.o
obj-$(CONFIG_DUMP_CODE)		+= disassemble.o
obj-$(CONFIG_HIBERNATION)	+= swsusp.o

+13 −5
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ ENTRY(resume_userspace)
	 nop
#endif
	mov.l	@(TI_FLAGS,r8), r0		! current_thread_info->flags
	tst	#_TIF_WORK_MASK, r0
	tst	#(_TIF_WORK_MASK & 0xff), r0
	bt/s	__restore_all
	 tst	#_TIF_NEED_RESCHED, r0

@@ -163,7 +163,7 @@ work_resched:
#endif
	!
	mov.l	@(TI_FLAGS,r8), r0		! current_thread_info->flags
	tst	#_TIF_WORK_MASK, r0
	tst	#(_TIF_WORK_MASK & 0xff), r0
	bt	__restore_all
	bra	work_pending
	 tst	#_TIF_NEED_RESCHED, r0
@@ -181,7 +181,7 @@ work_resched:
syscall_exit_work:
	! r0: current_thread_info->flags
	! r8: current_thread_info
	tst	#_TIF_WORK_SYSCALL_MASK, r0
	tst	#(_TIF_WORK_SYSCALL_MASK & 0xff), r0
	bt/s	work_pending
	 tst	#_TIF_NEED_RESCHED, r0
#ifdef CONFIG_TRACE_IRQFLAGS
@@ -331,8 +331,12 @@ ENTRY(system_call)
	!
	get_current_thread_info r8, r10
	mov.l	@(TI_FLAGS,r8), r8
	mov	#_TIF_WORK_SYSCALL_MASK, r10
	mov	#(_TIF_WORK_SYSCALL_MASK & 0xff), r10
	mov	#(_TIF_WORK_SYSCALL_MASK >> 8), r9
	tst	r10, r8
	shll8	r9
	bf	syscall_trace_entry
	tst	r9, r8
	bf	syscall_trace_entry
	!
	mov.l	2f, r8			! Number of syscalls
@@ -359,7 +363,11 @@ syscall_exit:
	!
	get_current_thread_info r8, r0
	mov.l	@(TI_FLAGS,r8), r0		! current_thread_info->flags
	tst	#_TIF_ALLWORK_MASK, r0
	tst	#(_TIF_ALLWORK_MASK & 0xff), r0
	mov	#(_TIF_ALLWORK_MASK >> 8), r1
	bf	syscall_exit_work
	shlr8	r0
	tst	r0, r1
	bf	syscall_exit_work
	bra	__restore_all
	 nop
Loading