powerpc/ftrace: Remove ftrace_32.S
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 20 Dec 2021 16:38:44 +0000 (16:38 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sat, 12 Feb 2022 11:47:28 +0000 (22:47 +1100)
Functions in ftrace_32.S are common with PPC64.

Reuse the ones defined for PPC64 with slight modification
when required.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
[mpe: Squash in fixup diff from Christophe]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/5e837fc190504c4ef834272e70d60ae33f175d49.1640017960.git.christophe.leroy@csgroup.eu
arch/powerpc/kernel/trace/Makefile
arch/powerpc/kernel/trace/ftrace_32.S [deleted file]
arch/powerpc/kernel/trace/ftrace_low.S [moved from arch/powerpc/kernel/trace/ftrace_64.S with 85% similarity]
arch/powerpc/kernel/trace/ftrace_mprofile.S [moved from arch/powerpc/kernel/trace/ftrace_64_mprofile.S with 100% similarity]

index 8585037..542aa7a 100644 (file)
@@ -8,13 +8,13 @@ ifdef CONFIG_FUNCTION_TRACER
 CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
 endif
 
-obj32-$(CONFIG_FUNCTION_TRACER)                += ftrace_32.o
-obj64-$(CONFIG_FUNCTION_TRACER)                += ftrace_64.o
+obj32-$(CONFIG_FUNCTION_TRACER)                += ftrace_mprofile.o
 ifdef CONFIG_MPROFILE_KERNEL
-obj64-$(CONFIG_FUNCTION_TRACER)                += ftrace_64_mprofile.o
+obj64-$(CONFIG_FUNCTION_TRACER)                += ftrace_mprofile.o
 else
 obj64-$(CONFIG_FUNCTION_TRACER)                += ftrace_64_pg.o
 endif
+obj-$(CONFIG_FUNCTION_TRACER)          += ftrace_low.o
 obj-$(CONFIG_DYNAMIC_FTRACE)           += ftrace.o
 obj-$(CONFIG_FUNCTION_GRAPH_TRACER)    += ftrace.o
 obj-$(CONFIG_FTRACE_SYSCALLS)          += ftrace.o
diff --git a/arch/powerpc/kernel/trace/ftrace_32.S b/arch/powerpc/kernel/trace/ftrace_32.S
deleted file mode 100644 (file)
index 2b425da..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Split from entry_32.S
- */
-
-#include <linux/magic.h>
-#include <asm/reg.h>
-#include <asm/ppc_asm.h>
-#include <asm/asm-offsets.h>
-#include <asm/ftrace.h>
-#include <asm/export.h>
-#include <asm/ptrace.h>
-
-_GLOBAL(mcount)
-_GLOBAL(_mcount)
-       /*
-        * It is required that _mcount on PPC32 must preserve the
-        * link register. But we have r12 to play with. We use r12
-        * 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    r12
-       mtctr   r12
-       mtlr    r0
-       bctr
-EXPORT_SYMBOL(_mcount)
-
-_GLOBAL(ftrace_caller)
-       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)
-
-       addi    r6, r1, STACK_FRAME_OVERHEAD
-.globl ftrace_call
-ftrace_call:
-       bl      ftrace_stub
-       nop
-
-       lwz     r3, _NIP(r1)
-       mtctr   r3
-
-       REST_GPRS(3, 10, r1)
-
-       lwz     r0, _LINK(r1)
-       mtlr    r0
-
-       addi    r1, r1, INT_FRAME_SIZE
-       /* old link register ends up in ctr reg */
-       bctr
-
-
-_GLOBAL(ftrace_stub)
-       blr
-
-_GLOBAL(ftrace_regs_caller)
-       /* Create our stack frame + pt_regs */
-       stwu    r1,-INT_FRAME_SIZE(r1)
-
-       /* Save all gprs to pt_regs */
-       stw     r0, GPR0(r1)
-       stmw    r2, GPR2(r1)
-
-       /* Save previous stack pointer (r1) */
-       addi    r8, r1, INT_FRAME_SIZE
-       stw     r8, GPR1(r1)
-
-       /* Load special regs for save below */
-       mfmsr   r8
-       mfctr   r9
-       mfxer   r10
-       mfcr    r11
-
-       /* Get the _mcount() call site out of LR */
-       mflr    r7
-       /* Save it as pt_regs->nip */
-       stw     r7, _NIP(r1)
-       /* Save the read LR in pt_regs->link */
-       stw     r0, _LINK(r1)
-
-       lis     r3,function_trace_op@ha
-       lwz     r5,function_trace_op@l(r3)
-
-       /* Calculate ip from nip-4 into r3 for call below */
-       subi    r3, r7, MCOUNT_INSN_SIZE
-
-       /* Put the original return address in r4 as parent_ip */
-       mr      r4, r0
-
-       /* Save special regs */
-       stw     r8, _MSR(r1)
-       stw     r9, _CTR(r1)
-       stw     r10, _XER(r1)
-       stw     r11, _CCR(r1)
-
-       /* Load &pt_regs in r6 for call below */
-       addi    r6, r1, STACK_FRAME_OVERHEAD
-
-       /* ftrace_call(r3, r4, r5, r6) */
-.globl ftrace_regs_call
-ftrace_regs_call:
-       bl      ftrace_stub
-       nop
-
-       /* Load ctr with the possibly modified NIP */
-       lwz     r3, _NIP(r1)
-       mtctr   r3
-
-       /* Restore gprs */
-       lmw     r2, GPR2(r1)
-
-       /* Restore possibly modified LR */
-       lwz     r0, _LINK(r1)
-       mtlr    r0
-
-       /* Pop our stack frame */
-       addi r1, r1, INT_FRAME_SIZE
-       /* old link register ends up in ctr reg */
-       bctr
-
-#ifdef CONFIG_FUNCTION_GRAPH_TRACER
-_GLOBAL(return_to_handler)
-       /* need to save return values */
-       stwu    r1, -16(r1)
-       stw     r3, 8(r1)
-       stw     r4, 12(r1)
-
-       bl      ftrace_return_to_handler
-
-       /* return value has real return address */
-       mtlr    r3
-
-       lwz     r3, 8(r1)
-       lwz     r4, 12(r1)
-       addi    r1, r1, 16
-
-       /* Jump back to real return address */
-       blr
-#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
similarity index 85%
rename from arch/powerpc/kernel/trace/ftrace_64.S
rename to arch/powerpc/kernel/trace/ftrace_low.S
index 25e5b9e..0bddf1f 100644 (file)
@@ -10,6 +10,7 @@
 #include <asm/ppc-opcode.h>
 #include <asm/export.h>
 
+#ifdef CONFIG_PPC64
 .pushsection ".tramp.ftrace.text","aw",@progbits;
 .globl ftrace_tramp_text
 ftrace_tramp_text:
@@ -21,6 +22,7 @@ ftrace_tramp_text:
 ftrace_tramp_init:
        .space 64
 .popsection
+#endif
 
 _GLOBAL(mcount)
 _GLOBAL(_mcount)
@@ -33,6 +35,7 @@ EXPORT_SYMBOL(_mcount)
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 _GLOBAL(return_to_handler)
        /* need to save return values */
+#ifdef CONFIG_PPC64
        std     r4,  -32(r1)
        std     r3,  -24(r1)
        /* save TOC */
@@ -46,6 +49,11 @@ _GLOBAL(return_to_handler)
         * Switch to our TOC to run inside the core kernel.
         */
        ld      r2, PACATOC(r13)
+#else
+       stwu    r1, -16(r1)
+       stw     r3, 8(r1)
+       stw     r4, 12(r1)
+#endif
 
        bl      ftrace_return_to_handler
        nop
@@ -53,11 +61,17 @@ _GLOBAL(return_to_handler)
        /* return value has real return address */
        mtlr    r3
 
+#ifdef CONFIG_PPC64
        ld      r1, 0(r1)
        ld      r4,  -32(r1)
        ld      r3,  -24(r1)
        ld      r2,  -16(r1)
        ld      r31, -8(r1)
+#else
+       lwz     r3, 8(r1)
+       lwz     r4, 12(r1)
+       addi    r1, r1, 16
+#endif
 
        /* Jump back to real return address */
        blr