1/* 2 * Split from entry_64.S 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ 9 10#include <linux/magic.h> 11#include <asm/ppc_asm.h> 12#include <asm/asm-offsets.h> 13#include <asm/ftrace.h> 14#include <asm/ppc-opcode.h> 15#include <asm/export.h> 16 17_GLOBAL(mcount) 18_GLOBAL(_mcount) 19EXPORT_SYMBOL(_mcount) 20 mflr r12 21 mtctr r12 22 mtlr r0 23 bctr 24 25#ifdef CONFIG_FUNCTION_GRAPH_TRACER 26_GLOBAL(return_to_handler) 27 /* need to save return values */ 28 std r4, -32(r1) 29 std r3, -24(r1) 30 /* save TOC */ 31 std r2, -16(r1) 32 std r31, -8(r1) 33 mr r31, r1 34 stdu r1, -112(r1) 35 36 /* 37 * We might be called from a module. 38 * Switch to our TOC to run inside the core kernel. 39 */ 40 ld r2, PACATOC(r13) 41 42 bl ftrace_return_to_handler 43 nop 44 45 /* return value has real return address */ 46 mtlr r3 47 48 ld r1, 0(r1) 49 ld r4, -32(r1) 50 ld r3, -24(r1) 51 ld r2, -16(r1) 52 ld r31, -8(r1) 53 54 /* Jump back to real return address */ 55 blr 56#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 57