aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/trace/ftrace_32.S
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@csgroup.eu>2021-12-20 16:38:22 +0000
committerMichael Ellerman <mpe@ellerman.id.au>2022-02-07 21:03:11 +1100
commitd95bf254be5f74c1e4c8f7cb64e2e21b9cc91717 (patch)
treea134e521415b985bcb8a10d6159b8da2d8e86df5 /arch/powerpc/kernel/trace/ftrace_32.S
parentpowerpc/ftrace: Simplify PPC32's return_to_handler() (diff)
downloadlinux-dev-d95bf254be5f74c1e4c8f7cb64e2e21b9cc91717.tar.xz
linux-dev-d95bf254be5f74c1e4c8f7cb64e2e21b9cc91717.zip
powerpc/ftrace: Prepare PPC32's ftrace_caller() for CONFIG_DYNAMIC_FTRACE_WITH_ARGS
In order to implement CONFIG_DYNAMIC_FTRACE_WITH_ARGS, change ftrace_caller() stack layout to match struct pt_regs. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/da9734eba504998fb914aca12131c9f6bf6120a8.1640017960.git.christophe.leroy@csgroup.eu
Diffstat (limited to 'arch/powerpc/kernel/trace/ftrace_32.S')
-rw-r--r--arch/powerpc/kernel/trace/ftrace_32.S29
1 files changed, 25 insertions, 4 deletions
diff --git a/arch/powerpc/kernel/trace/ftrace_32.S b/arch/powerpc/kernel/trace/ftrace_32.S
index 95ffea2bdc29..c4055b41af5f 100644
--- a/arch/powerpc/kernel/trace/ftrace_32.S
+++ b/arch/powerpc/kernel/trace/ftrace_32.S
@@ -27,17 +27,38 @@ _GLOBAL(_mcount)
EXPORT_SYMBOL(_mcount)
_GLOBAL(ftrace_caller)
- MCOUNT_SAVE_FRAME
- /* r3 ends up with link register */
+ stwu r1, -INT_FRAME_SIZE(r1)
+
+ SAVE_GPRS(3, 10, r1)
+
+ addi r8, r1, INT_FRAME_SIZE
+ stw r8, GPR1(r1)
+
+ mflr r3
+ stw r3, _NIP(r1)
subi r3, r3, MCOUNT_INSN_SIZE
+
+ stw r0, _LINK(r1)
+ mr r4, r0
+
lis r5,function_trace_op@ha
lwz r5,function_trace_op@l(r5)
- li r6, 0
+
+ addi r6, r1, STACK_FRAME_OVERHEAD
.globl ftrace_call
ftrace_call:
bl ftrace_stub
nop
- MCOUNT_RESTORE_FRAME
+
+ lwz r3, _NIP(r1)
+ mtctr r3
+
+ REST_GPRS(3, 10, r1)
+
+ lwz r0, _LINK(r1)
+ mtlr r0
+
+ addi r1, r1, INT_FRAME_SIZE
ftrace_caller_common:
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
.globl ftrace_graph_call