aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/mcount.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/mcount.S')
-rw-r--r--arch/s390/kernel/mcount.S79
1 files changed, 79 insertions, 0 deletions
diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
index 0aa85ec94d08..2a0a5e97ba8c 100644
--- a/arch/s390/kernel/mcount.S
+++ b/arch/s390/kernel/mcount.S
@@ -34,6 +34,18 @@ ftrace_caller:
34 larl %r14,ftrace_dyn_func 34 larl %r14,ftrace_dyn_func
35 lg %r14,0(%r14) 35 lg %r14,0(%r14)
36 basr %r14,%r14 36 basr %r14,%r14
37#ifdef CONFIG_FUNCTION_GRAPH_TRACER
38 .globl ftrace_graph_caller
39ftrace_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)
470:
48#endif
37 aghi %r15,160 49 aghi %r15,160
38 lmg %r2,%r5,32(%r15) 50 lmg %r2,%r5,32(%r15)
39 lg %r14,112(%r15) 51 lg %r14,112(%r15)
@@ -62,6 +74,12 @@ _mcount:
62 larl %r14,ftrace_trace_function 74 larl %r14,ftrace_trace_function
63 lg %r14,0(%r14) 75 lg %r14,0(%r14)
64 basr %r14,%r14 76 basr %r14,%r14
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
65 aghi %r15,160 83 aghi %r15,160
66 lmg %r2,%r5,32(%r15) 84 lmg %r2,%r5,32(%r15)
67 lg %r14,112(%r15) 85 lg %r14,112(%r15)
@@ -69,6 +87,22 @@ _mcount:
69 87
70#endif /* CONFIG_DYNAMIC_FTRACE */ 88#endif /* CONFIG_DYNAMIC_FTRACE */
71 89
90#ifdef CONFIG_FUNCTION_GRAPH_TRACER
91
92 .globl return_to_handler
93return_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
72#else /* CONFIG_64BIT */ 106#else /* CONFIG_64BIT */
73 107
74#ifdef CONFIG_DYNAMIC_FTRACE 108#ifdef CONFIG_DYNAMIC_FTRACE
@@ -96,6 +130,21 @@ ftrace_caller:
96 l %r14,0b-0b(%r1) 130 l %r14,0b-0b(%r1)
97 l %r14,0(%r14) 131 l %r14,0(%r14)
98 basr %r14,%r14 132 basr %r14,%r14
133#ifdef CONFIG_FUNCTION_GRAPH_TRACER
134 .globl ftrace_graph_caller
135ftrace_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
1410: l %r2,152(%r15)
142 l %r4,0(%r1)
143 l %r3,100(%r15)
144 basr %r14,%r4
145 st %r2,100(%r15)
1461:
147#endif
99 ahi %r15,96 148 ahi %r15,96
100 l %r14,56(%r15) 149 l %r14,56(%r15)
1013: lm %r2,%r5,16(%r15) 1503: lm %r2,%r5,16(%r15)
@@ -128,10 +177,40 @@ _mcount:
128 l %r14,0b-0b(%r1) 177 l %r14,0b-0b(%r1)
129 l %r14,0(%r14) 178 l %r14,0(%r14)
130 basr %r14,%r14 179 basr %r14,%r14
180#ifdef CONFIG_FUNCTION_GRAPH_TRACER
181 bras %r1,0f
182 .long prepare_ftrace_return
1830: 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
131 ahi %r15,96 189 ahi %r15,96
132 l %r14,56(%r15) 190 l %r14,56(%r15)
1333: lm %r2,%r5,16(%r15) 1913: lm %r2,%r5,16(%r15)
134 br %r14 192 br %r14
135 193
136#endif /* CONFIG_DYNAMIC_FTRACE */ 194#endif /* CONFIG_DYNAMIC_FTRACE */
195
196#ifdef CONFIG_FUNCTION_GRAPH_TRACER
197
198 .globl return_to_handler
199return_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
2070: 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
137#endif /* CONFIG_64BIT */ 216#endif /* CONFIG_64BIT */