Commit 953f534a authored by Ard Biesheuvel's avatar Ard Biesheuvel
Browse files

ARM: ftrace: enable HAVE_FUNCTION_GRAPH_FP_TEST



Fix the frame pointer handling in the function graph tracer entry and
exit code so we can enable HAVE_FUNCTION_GRAPH_FP_TEST. Instead of using
FP directly (which will have different values between the entry and exit
pieces of the function graph tracer), use the value of SP at entry and
exit, as we can derive the former value from the frame pointer.

Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Reviewed-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 65aa7e34
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@
#ifndef _ASM_ARM_FTRACE
#define _ASM_ARM_FTRACE

#define HAVE_FUNCTION_GRAPH_FP_TEST

#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
#define ARCH_SUPPORTS_FTRACE_OPS 1
#endif
+1 −1
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ ENDPROC(ftrace_graph_regs_caller)
	.globl return_to_handler
return_to_handler:
	stmdb	sp!, {r0-r3}
	mov	r0, fp			@ frame pointer
	add	r0, sp, #16		@ sp at exit of instrumented routine
	bl	ftrace_return_to_handler
	mov	lr, r0			@ r0 has real ret addr
	ldmia	sp!, {r0-r3}
+5 −0
Original line number Diff line number Diff line
@@ -233,6 +233,11 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
	if (unlikely(atomic_read(&current->tracing_graph_pause)))
		return;

	if (IS_ENABLED(CONFIG_UNWINDER_FRAME_POINTER)) {
		/* FP points one word below parent's top of stack */
		frame_pointer += 4;
	}

	old = *parent;
	*parent = return_hooker;