powerpc: Split ftrace bits into a separate file
entry_*.S now includes a lot more than just kernel entry/exit code. As a first step at cleaning this up, let's split out the ftrace bits into separate files. Also move all related tracing code into a new trace/ subdirectory. No functional changes. Suggested-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
2505820f7c
commit
7853f9c029
@@ -31,7 +31,6 @@
|
||||
#include <asm/ppc_asm.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/ftrace.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/export.h>
|
||||
|
||||
@@ -1315,109 +1314,3 @@ machine_check_in_rtas:
|
||||
/* XXX load up BATs and panic */
|
||||
|
||||
#endif /* CONFIG_PPC_RTAS */
|
||||
|
||||
#ifdef CONFIG_FUNCTION_TRACER
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
_GLOBAL(mcount)
|
||||
_GLOBAL(_mcount)
|
||||
/*
|
||||
* It is required that _mcount on PPC32 must preserve the
|
||||
* link register. But we have r0 to play with. We use r0
|
||||
* to push the return address back to the caller of mcount
|
||||
* into the ctr register, restore the link register and
|
||||
* then jump back using the ctr register.
|
||||
*/
|
||||
mflr r0
|
||||
mtctr r0
|
||||
lwz r0, 4(r1)
|
||||
mtlr r0
|
||||
bctr
|
||||
|
||||
_GLOBAL(ftrace_caller)
|
||||
MCOUNT_SAVE_FRAME
|
||||
/* r3 ends up with link register */
|
||||
subi r3, r3, MCOUNT_INSN_SIZE
|
||||
.globl ftrace_call
|
||||
ftrace_call:
|
||||
bl ftrace_stub
|
||||
nop
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
.globl ftrace_graph_call
|
||||
ftrace_graph_call:
|
||||
b ftrace_graph_stub
|
||||
_GLOBAL(ftrace_graph_stub)
|
||||
#endif
|
||||
MCOUNT_RESTORE_FRAME
|
||||
/* old link register ends up in ctr reg */
|
||||
bctr
|
||||
#else
|
||||
_GLOBAL(mcount)
|
||||
_GLOBAL(_mcount)
|
||||
|
||||
MCOUNT_SAVE_FRAME
|
||||
|
||||
subi r3, r3, MCOUNT_INSN_SIZE
|
||||
LOAD_REG_ADDR(r5, ftrace_trace_function)
|
||||
lwz r5,0(r5)
|
||||
|
||||
mtctr r5
|
||||
bctrl
|
||||
nop
|
||||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
b ftrace_graph_caller
|
||||
#endif
|
||||
MCOUNT_RESTORE_FRAME
|
||||
bctr
|
||||
#endif
|
||||
EXPORT_SYMBOL(_mcount)
|
||||
|
||||
_GLOBAL(ftrace_stub)
|
||||
blr
|
||||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
_GLOBAL(ftrace_graph_caller)
|
||||
/* load r4 with local address */
|
||||
lwz r4, 44(r1)
|
||||
subi r4, r4, MCOUNT_INSN_SIZE
|
||||
|
||||
/* Grab the LR out of the caller stack frame */
|
||||
lwz r3,52(r1)
|
||||
|
||||
bl prepare_ftrace_return
|
||||
nop
|
||||
|
||||
/*
|
||||
* prepare_ftrace_return gives us the address we divert to.
|
||||
* Change the LR in the callers stack frame to this.
|
||||
*/
|
||||
stw r3,52(r1)
|
||||
|
||||
MCOUNT_RESTORE_FRAME
|
||||
/* old link register ends up in ctr reg */
|
||||
bctr
|
||||
|
||||
_GLOBAL(return_to_handler)
|
||||
/* need to save return values */
|
||||
stwu r1, -32(r1)
|
||||
stw r3, 20(r1)
|
||||
stw r4, 16(r1)
|
||||
stw r31, 12(r1)
|
||||
mr r31, r1
|
||||
|
||||
bl ftrace_return_to_handler
|
||||
nop
|
||||
|
||||
/* return value has real return address */
|
||||
mtlr r3
|
||||
|
||||
lwz r3, 20(r1)
|
||||
lwz r4, 16(r1)
|
||||
lwz r31,12(r1)
|
||||
lwz r1, 0(r1)
|
||||
|
||||
/* Jump back to real return address */
|
||||
blr
|
||||
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
||||
|
||||
#endif /* CONFIG_FUNCTION_TRACER */
|
||||
|
Reference in New Issue
Block a user