summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/mcount_64.S
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat)2014-11-25 03:00:34 +0100
committerSteven Rostedt2014-12-01 20:08:58 +0100
commit6a06bdbf7f9c669743f58084991ba280f2925586 (patch)
tree90dcca551768f0056ba993622062c7458eef4834 /arch/x86/kernel/mcount_64.S
parentftrace/x86: Get rid of ftrace_caller_setup (diff)
downloadkernel-qcow2-linux-6a06bdbf7f9c669743f58084991ba280f2925586.tar.gz
kernel-qcow2-linux-6a06bdbf7f9c669743f58084991ba280f2925586.tar.xz
kernel-qcow2-linux-6a06bdbf7f9c669743f58084991ba280f2925586.zip
ftrace/fgraph/x86: Have prepare_ftrace_return() take ip as first parameter
The function graph helper function prepare_ftrace_return() which does the work to hijack the parent pointer has that parent pointer as its first parameter. Instead, if we make it the second parameter and have ip as the first parameter (self_addr), then it can use the %rdi from save_mcount_regs that loads it already. Link: http://lkml.kernel.org/r/alpine.DEB.2.11.1411262304010.3961@nanos Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'arch/x86/kernel/mcount_64.S')
-rw-r--r--arch/x86/kernel/mcount_64.S11
1 files changed, 4 insertions, 7 deletions
diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S
index ddc766efa1f1..94ea120fa21f 100644
--- a/arch/x86/kernel/mcount_64.S
+++ b/arch/x86/kernel/mcount_64.S
@@ -124,7 +124,7 @@
/*
* Now %rdi (the first parameter) has the return address of
* where ftrace_call returns. But the callbacks expect the
- * the address of the call itself.
+ * address of the call itself.
*/
subq $MCOUNT_INSN_SIZE, %rdi
.endm
@@ -289,21 +289,18 @@ END(function_hook)
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
ENTRY(ftrace_graph_caller)
- /* Saves rbp into %rdx */
+ /* Saves rbp into %rdx and fills first parameter */
save_mcount_regs
#ifdef CC_USING_FENTRY
- leaq MCOUNT_REG_SIZE+8(%rsp), %rdi
+ leaq MCOUNT_REG_SIZE+8(%rsp), %rsi
movq $0, %rdx /* No framepointers needed */
#else
/* Save address of the return address of traced function */
- leaq 8(%rdx), %rdi
+ leaq 8(%rdx), %rsi
/* ftrace does sanity checks against frame pointers */
movq (%rdx), %rdx
#endif
- movq RIP(%rsp), %rsi
- subq $MCOUNT_INSN_SIZE, %rsi
-
call prepare_ftrace_return
restore_mcount_regs