]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
7853f9c0 NR |
2 | /* |
3 | * Split from entry_64.S | |
7853f9c0 NR |
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 | ||
67361cf8 NR |
13 | .pushsection ".tramp.ftrace.text","aw",@progbits; |
14 | .globl ftrace_tramp_text | |
15 | ftrace_tramp_text: | |
16 | .space 64 | |
17 | .popsection | |
18 | ||
19 | .pushsection ".tramp.ftrace.init","aw",@progbits; | |
20 | .globl ftrace_tramp_init | |
21 | ftrace_tramp_init: | |
22 | .space 64 | |
23 | .popsection | |
24 | ||
7853f9c0 NR |
25 | _GLOBAL(mcount) |
26 | _GLOBAL(_mcount) | |
27 | EXPORT_SYMBOL(_mcount) | |
28 | mflr r12 | |
29 | mtctr r12 | |
30 | mtlr r0 | |
31 | bctr | |
32 | ||
7853f9c0 | 33 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
7853f9c0 NR |
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 */ |