1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Split from entry_64.S 4 */ 5 6#include <linux/magic.h> 7#include <asm/ppc_asm.h> 8#include <asm/asm-offsets.h> 9#include <asm/ftrace.h> 10#include <asm/ppc-opcode.h> 11#include <asm/export.h> 12 13.pushsection ".tramp.ftrace.text","aw",@progbits; 14.globl ftrace_tramp_text 15ftrace_tramp_text: 16 .space 64 17.popsection 18 19.pushsection ".tramp.ftrace.init","aw",@progbits; 20.globl ftrace_tramp_init 21ftrace_tramp_init: 22 .space 64 23.popsection 24 25_GLOBAL(mcount) 26_GLOBAL(_mcount) 27EXPORT_SYMBOL(_mcount) 28 mflr r12 29 mtctr r12 30 mtlr r0 31 bctr 32 33#ifdef CONFIG_FUNCTION_GRAPH_TRACER 34_GLOBAL(return_to_handler) 35 /* need to save return values */ 36 std r4, -32(r1) 37 std r3, -24(r1) 38 /* save TOC */ 39 std r2, -16(r1) 40 std r31, -8(r1) 41 mr r31, r1 42 stdu r1, -112(r1) 43 44 /* 45 * We might be called from a module. 46 * Switch to our TOC to run inside the core kernel. 47 */ 48 ld r2, PACATOC(r13) 49 50 bl ftrace_return_to_handler 51 nop 52 53 /* return value has real return address */ 54 mtlr r3 55 56 ld r1, 0(r1) 57 ld r4, -32(r1) 58 ld r3, -24(r1) 59 ld r2, -16(r1) 60 ld r31, -8(r1) 61 62 /* Jump back to real return address */ 63 blr 64#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 65