Commit | Line | Data |
---|---|---|
5d360a75 | 1 | /* |
dfd9f7ab | 2 | * Copyright IBM Corp. 2008,2009 |
5d360a75 HC |
3 | * |
4 | * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>, | |
5 | * | |
6 | */ | |
7 | ||
cf087343 HC |
8 | #include <asm/asm-offsets.h> |
9 | ||
dfd9f7ab HC |
10 | .globl ftrace_stub |
11 | ftrace_stub: | |
12 | br %r14 | |
13 | ||
14 | #ifdef CONFIG_64BIT | |
15 | ||
16 | #ifdef CONFIG_DYNAMIC_FTRACE | |
17 | ||
18 | .globl _mcount | |
5d360a75 | 19 | _mcount: |
5d360a75 HC |
20 | br %r14 |
21 | ||
dfd9f7ab HC |
22 | .globl ftrace_caller |
23 | ftrace_caller: | |
8b4488f8 HC |
24 | larl %r1,function_trace_stop |
25 | icm %r1,0xf,0(%r1) | |
26 | bnzr %r14 | |
dfd9f7ab HC |
27 | stmg %r2,%r5,32(%r15) |
28 | stg %r14,112(%r15) | |
29 | lgr %r1,%r15 | |
30 | aghi %r15,-160 | |
31 | stg %r1,__SF_BACKCHAIN(%r15) | |
32 | lgr %r2,%r14 | |
33 | lg %r3,168(%r15) | |
34 | larl %r14,ftrace_dyn_func | |
35 | lg %r14,0(%r14) | |
36 | basr %r14,%r14 | |
88dbd203 HC |
37 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
38 | .globl ftrace_graph_caller | |
39 | ftrace_graph_caller: | |
40 | # This unconditional branch gets runtime patched. Change only if | |
41 | # you know what you are doing. See ftrace_enable_graph_caller(). | |
42 | j 0f | |
43 | lg %r2,272(%r15) | |
44 | lg %r3,168(%r15) | |
45 | brasl %r14,prepare_ftrace_return | |
46 | stg %r2,168(%r15) | |
47 | 0: | |
48 | #endif | |
dfd9f7ab HC |
49 | aghi %r15,160 |
50 | lmg %r2,%r5,32(%r15) | |
51 | lg %r14,112(%r15) | |
5d360a75 HC |
52 | br %r14 |
53 | ||
dfd9f7ab HC |
54 | .data |
55 | .globl ftrace_dyn_func | |
56 | ftrace_dyn_func: | |
57 | .quad ftrace_stub | |
58 | .previous | |
59 | ||
60 | #else /* CONFIG_DYNAMIC_FTRACE */ | |
5d360a75 | 61 | |
dfd9f7ab | 62 | .globl _mcount |
5d360a75 | 63 | _mcount: |
8b4488f8 HC |
64 | larl %r1,function_trace_stop |
65 | icm %r1,0xf,0(%r1) | |
66 | bnzr %r14 | |
dfd9f7ab | 67 | stmg %r2,%r5,32(%r15) |
5d360a75 HC |
68 | stg %r14,112(%r15) |
69 | lgr %r1,%r15 | |
70 | aghi %r15,-160 | |
cf087343 | 71 | stg %r1,__SF_BACKCHAIN(%r15) |
5d360a75 HC |
72 | lgr %r2,%r14 |
73 | lg %r3,168(%r15) | |
74 | larl %r14,ftrace_trace_function | |
75 | lg %r14,0(%r14) | |
76 | basr %r14,%r14 | |
88dbd203 HC |
77 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
78 | lg %r2,272(%r15) | |
79 | lg %r3,168(%r15) | |
80 | brasl %r14,prepare_ftrace_return | |
81 | stg %r2,168(%r15) | |
82 | #endif | |
5d360a75 | 83 | aghi %r15,160 |
dfd9f7ab | 84 | lmg %r2,%r5,32(%r15) |
5d360a75 HC |
85 | lg %r14,112(%r15) |
86 | br %r14 | |
87 | ||
dfd9f7ab HC |
88 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
89 | ||
88dbd203 HC |
90 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
91 | ||
92 | .globl return_to_handler | |
93 | return_to_handler: | |
94 | stmg %r2,%r5,32(%r15) | |
95 | lgr %r1,%r15 | |
96 | aghi %r15,-160 | |
97 | stg %r1,__SF_BACKCHAIN(%r15) | |
98 | brasl %r14,ftrace_return_to_handler | |
99 | aghi %r15,160 | |
100 | lgr %r14,%r2 | |
101 | lmg %r2,%r5,32(%r15) | |
102 | br %r14 | |
103 | ||
104 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | |
105 | ||
dfd9f7ab HC |
106 | #else /* CONFIG_64BIT */ |
107 | ||
108 | #ifdef CONFIG_DYNAMIC_FTRACE | |
109 | ||
110 | .globl _mcount | |
111 | _mcount: | |
112 | br %r14 | |
113 | ||
114 | .globl ftrace_caller | |
115 | ftrace_caller: | |
116 | stm %r2,%r5,16(%r15) | |
8b4488f8 HC |
117 | bras %r1,2f |
118 | 0: .long ftrace_trace_function | |
119 | 1: .long function_trace_stop | |
120 | 2: l %r2,1b-0b(%r1) | |
121 | icm %r2,0xf,0(%r2) | |
122 | jnz 3f | |
dfd9f7ab | 123 | st %r14,56(%r15) |
8b4488f8 | 124 | lr %r0,%r15 |
dfd9f7ab HC |
125 | ahi %r15,-96 |
126 | l %r3,100(%r15) | |
127 | la %r2,0(%r14) | |
8b4488f8 | 128 | st %r0,__SF_BACKCHAIN(%r15) |
dfd9f7ab | 129 | la %r3,0(%r3) |
8b4488f8 | 130 | l %r14,0b-0b(%r1) |
dfd9f7ab HC |
131 | l %r14,0(%r14) |
132 | basr %r14,%r14 | |
88dbd203 HC |
133 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
134 | .globl ftrace_graph_caller | |
135 | ftrace_graph_caller: | |
136 | # This unconditional branch gets runtime patched. Change only if | |
137 | # you know what you are doing. See ftrace_enable_graph_caller(). | |
138 | j 1f | |
139 | bras %r1,0f | |
140 | .long prepare_ftrace_return | |
141 | 0: l %r2,152(%r15) | |
142 | l %r4,0(%r1) | |
143 | l %r3,100(%r15) | |
144 | basr %r14,%r4 | |
145 | st %r2,100(%r15) | |
146 | 1: | |
147 | #endif | |
dfd9f7ab | 148 | ahi %r15,96 |
dfd9f7ab | 149 | l %r14,56(%r15) |
8b4488f8 | 150 | 3: lm %r2,%r5,16(%r15) |
dfd9f7ab HC |
151 | br %r14 |
152 | ||
153 | .data | |
154 | .globl ftrace_dyn_func | |
155 | ftrace_dyn_func: | |
156 | .long ftrace_stub | |
157 | .previous | |
158 | ||
159 | #else /* CONFIG_DYNAMIC_FTRACE */ | |
160 | ||
161 | .globl _mcount | |
162 | _mcount: | |
163 | stm %r2,%r5,16(%r15) | |
8b4488f8 HC |
164 | bras %r1,2f |
165 | 0: .long ftrace_trace_function | |
166 | 1: .long function_trace_stop | |
167 | 2: l %r2,1b-0b(%r1) | |
168 | icm %r2,0xf,0(%r2) | |
169 | jnz 3f | |
dfd9f7ab | 170 | st %r14,56(%r15) |
8b4488f8 | 171 | lr %r0,%r15 |
dfd9f7ab HC |
172 | ahi %r15,-96 |
173 | l %r3,100(%r15) | |
174 | la %r2,0(%r14) | |
8b4488f8 | 175 | st %r0,__SF_BACKCHAIN(%r15) |
dfd9f7ab | 176 | la %r3,0(%r3) |
8b4488f8 | 177 | l %r14,0b-0b(%r1) |
dfd9f7ab HC |
178 | l %r14,0(%r14) |
179 | basr %r14,%r14 | |
88dbd203 HC |
180 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
181 | bras %r1,0f | |
182 | .long prepare_ftrace_return | |
183 | 0: l %r2,152(%r15) | |
184 | l %r4,0(%r1) | |
185 | l %r3,100(%r15) | |
186 | basr %r14,%r4 | |
187 | st %r2,100(%r15) | |
188 | #endif | |
dfd9f7ab | 189 | ahi %r15,96 |
dfd9f7ab | 190 | l %r14,56(%r15) |
8b4488f8 | 191 | 3: lm %r2,%r5,16(%r15) |
5d360a75 HC |
192 | br %r14 |
193 | ||
dfd9f7ab | 194 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
88dbd203 HC |
195 | |
196 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | |
197 | ||
198 | .globl return_to_handler | |
199 | return_to_handler: | |
200 | stm %r2,%r5,16(%r15) | |
201 | st %r14,56(%r15) | |
202 | lr %r0,%r15 | |
203 | ahi %r15,-96 | |
204 | st %r0,__SF_BACKCHAIN(%r15) | |
205 | bras %r1,0f | |
206 | .long ftrace_return_to_handler | |
207 | 0: l %r2,0b-0b(%r1) | |
208 | basr %r14,%r2 | |
209 | lr %r14,%r2 | |
210 | ahi %r15,96 | |
211 | lm %r2,%r5,16(%r15) | |
212 | br %r14 | |
213 | ||
214 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | |
215 | ||
5d360a75 | 216 | #endif /* CONFIG_64BIT */ |