mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-16 12:14:06 +00:00
powerpc/ftrace: Remove ftrace_32.S
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
This commit is contained in:
parent
41315494be
commit
4ee83a2cfb
4 changed files with 17 additions and 155 deletions
|
@ -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
|
||||
|
|
|
@ -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 */
|
|
@ -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
|
Loading…
Add table
Reference in a new issue