]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
5d360a75 | 2 | /* |
a53c8fab | 3 | * Copyright IBM Corp. 2008, 2009 |
5d360a75 HC |
4 | * |
5 | * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>, | |
6 | * | |
7 | */ | |
8 | ||
144d634a | 9 | #include <linux/linkage.h> |
cf087343 | 10 | #include <asm/asm-offsets.h> |
aca91209 | 11 | #include <asm/ftrace.h> |
53255c9a | 12 | #include <asm/ptrace.h> |
711f5df7 | 13 | #include <asm/export.h> |
cf087343 | 14 | |
860dba45 MS |
15 | .section .kprobes.text, "ax" |
16 | ||
144d634a | 17 | ENTRY(ftrace_stub) |
dfd9f7ab HC |
18 | br %r14 |
19 | ||
53255c9a HC |
20 | #define STACK_FRAME_SIZE (STACK_FRAME_OVERHEAD + __PT_SIZE) |
21 | #define STACK_PTREGS (STACK_FRAME_OVERHEAD) | |
22 | #define STACK_PTREGS_GPRS (STACK_PTREGS + __PT_GPRS) | |
23 | #define STACK_PTREGS_PSW (STACK_PTREGS + __PT_PSW) | |
24 | ||
144d634a | 25 | ENTRY(_mcount) |
5d360a75 HC |
26 | br %r14 |
27 | ||
711f5df7 AV |
28 | EXPORT_SYMBOL(_mcount) |
29 | ||
144d634a | 30 | ENTRY(ftrace_caller) |
53255c9a HC |
31 | .globl ftrace_regs_caller |
32 | .set ftrace_regs_caller,ftrace_caller | |
33 | lgr %r1,%r15 | |
e6d60b36 | 34 | #ifndef CC_USING_HOTPATCH |
c933146a | 35 | aghi %r0,MCOUNT_RETURN_FIXUP |
e6d60b36 | 36 | #endif |
53255c9a HC |
37 | aghi %r15,-STACK_FRAME_SIZE |
38 | stg %r1,__SF_BACKCHAIN(%r15) | |
39 | stg %r1,(STACK_PTREGS_GPRS+15*8)(%r15) | |
40 | stg %r0,(STACK_PTREGS_PSW+8)(%r15) | |
41 | stmg %r2,%r14,(STACK_PTREGS_GPRS+2*8)(%r15) | |
42 | #ifdef CONFIG_HAVE_MARCH_Z196_FEATURES | |
43 | aghik %r2,%r0,-MCOUNT_INSN_SIZE | |
44 | lgrl %r4,function_trace_op | |
45 | lgrl %r1,ftrace_trace_function | |
46 | #else | |
47 | lgr %r2,%r0 | |
48 | aghi %r2,-MCOUNT_INSN_SIZE | |
49 | larl %r4,function_trace_op | |
50 | lg %r4,0(%r4) | |
51 | larl %r1,ftrace_trace_function | |
52 | lg %r1,0(%r1) | |
53 | #endif | |
54 | lgr %r3,%r14 | |
55 | la %r5,STACK_PTREGS(%r15) | |
56 | basr %r14,%r1 | |
88dbd203 | 57 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
53255c9a | 58 | # The j instruction gets runtime patched to a nop instruction. |
0cccdda8 | 59 | # See ftrace_enable_ftrace_graph_caller. |
53255c9a HC |
60 | ENTRY(ftrace_graph_caller) |
61 | j ftrace_graph_caller_end | |
62 | lg %r2,(STACK_PTREGS_GPRS+14*8)(%r15) | |
63 | lg %r3,(STACK_PTREGS_PSW+8)(%r15) | |
64 | brasl %r14,prepare_ftrace_return | |
65 | stg %r2,(STACK_PTREGS_GPRS+14*8)(%r15) | |
66 | ftrace_graph_caller_end: | |
67 | .globl ftrace_graph_caller_end | |
88dbd203 | 68 | #endif |
53255c9a HC |
69 | lg %r1,(STACK_PTREGS_PSW+8)(%r15) |
70 | lmg %r2,%r15,(STACK_PTREGS_GPRS+2*8)(%r15) | |
71 | br %r1 | |
5d360a75 | 72 | |
88dbd203 HC |
73 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
74 | ||
144d634a | 75 | ENTRY(return_to_handler) |
53255c9a HC |
76 | stmg %r2,%r5,32(%r15) |
77 | lgr %r1,%r15 | |
78 | aghi %r15,-STACK_FRAME_OVERHEAD | |
79 | stg %r1,__SF_BACKCHAIN(%r15) | |
80 | brasl %r14,ftrace_return_to_handler | |
81 | aghi %r15,STACK_FRAME_OVERHEAD | |
82 | lgr %r14,%r2 | |
83 | lmg %r2,%r5,32(%r15) | |
88dbd203 HC |
84 | br %r14 |
85 | ||
6ac2a4dd | 86 | #endif |