| From 1739f09e33d8f66bf48ddbc3eca615574da6c4f6 Mon Sep 17 00:00:00 2001 |
| From: Steven Rostedt <rostedt@goodmis.org> |
| Date: Wed, 13 Nov 2013 15:20:04 -0500 |
| Subject: ftrace/x86: Load ftrace_ops in parameter not the variable holding it |
| |
| From: Steven Rostedt <rostedt@goodmis.org> |
| |
| commit 1739f09e33d8f66bf48ddbc3eca615574da6c4f6 upstream. |
| |
| Function tracing callbacks expect to have the ftrace_ops that registered it |
| passed to them, not the address of the variable that holds the ftrace_ops |
| that registered it. |
| |
| Use a mov instead of a lea to store the ftrace_ops into the parameter |
| of the function tracing callback. |
| |
| Signed-off-by: Steven Rostedt <rostedt@goodmis.org> |
| Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> |
| Link: http://lkml.kernel.org/r/20131113152004.459787f9@gandalf.local.home |
| Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/kernel/entry_32.S | 4 ++-- |
| arch/x86/kernel/entry_64.S | 2 +- |
| 2 files changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/arch/x86/kernel/entry_32.S |
| +++ b/arch/x86/kernel/entry_32.S |
| @@ -1085,7 +1085,7 @@ ENTRY(ftrace_caller) |
| pushl $0 /* Pass NULL as regs pointer */ |
| movl 4*4(%esp), %eax |
| movl 0x4(%ebp), %edx |
| - leal function_trace_op, %ecx |
| + movl function_trace_op, %ecx |
| subl $MCOUNT_INSN_SIZE, %eax |
| |
| .globl ftrace_call |
| @@ -1143,7 +1143,7 @@ ENTRY(ftrace_regs_caller) |
| movl 12*4(%esp), %eax /* Load ip (1st parameter) */ |
| subl $MCOUNT_INSN_SIZE, %eax /* Adjust ip */ |
| movl 0x4(%ebp), %edx /* Load parent ip (2nd parameter) */ |
| - leal function_trace_op, %ecx /* Save ftrace_pos in 3rd parameter */ |
| + movl function_trace_op, %ecx /* Save ftrace_pos in 3rd parameter */ |
| pushl %esp /* Save pt_regs as 4th parameter */ |
| |
| GLOBAL(ftrace_regs_call) |
| --- a/arch/x86/kernel/entry_64.S |
| +++ b/arch/x86/kernel/entry_64.S |
| @@ -88,7 +88,7 @@ END(function_hook) |
| MCOUNT_SAVE_FRAME \skip |
| |
| /* Load the ftrace_ops into the 3rd parameter */ |
| - leaq function_trace_op, %rdx |
| + movq function_trace_op(%rip), %rdx |
| |
| /* Load ip into the first parameter */ |
| movq RIP(%rsp), %rdi |