de274996f640ac732613cc6c4107109a81df255d
[linux-block.git] / arch / s390 / kernel / mcount.S
1 /*
2  * Copyright IBM Corp. 2008,2009
3  *
4  *   Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
5  *
6  */
7
8 #include <asm/asm-offsets.h>
9
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
19 _mcount:
20         br      %r14
21
22         .globl ftrace_caller
23 ftrace_caller:
24         stmg    %r2,%r5,32(%r15)
25         stg     %r14,112(%r15)
26         lgr     %r1,%r15
27         aghi    %r15,-160
28         stg     %r1,__SF_BACKCHAIN(%r15)
29         lgr     %r2,%r14
30         lg      %r3,168(%r15)
31         larl    %r14,ftrace_dyn_func
32         lg      %r14,0(%r14)
33         basr    %r14,%r14
34         aghi    %r15,160
35         lmg     %r2,%r5,32(%r15)
36         lg      %r14,112(%r15)
37         br      %r14
38
39         .data
40         .globl  ftrace_dyn_func
41 ftrace_dyn_func:
42         .quad   ftrace_stub
43         .previous
44
45 #else /* CONFIG_DYNAMIC_FTRACE */
46
47         .globl _mcount
48 _mcount:
49         stmg    %r2,%r5,32(%r15)
50         stg     %r14,112(%r15)
51         lgr     %r1,%r15
52         aghi    %r15,-160
53         stg     %r1,__SF_BACKCHAIN(%r15)
54         lgr     %r2,%r14
55         lg      %r3,168(%r15)
56         larl    %r14,ftrace_trace_function
57         lg      %r14,0(%r14)
58         basr    %r14,%r14
59         aghi    %r15,160
60         lmg     %r2,%r5,32(%r15)
61         lg      %r14,112(%r15)
62         br      %r14
63
64 #endif /* CONFIG_DYNAMIC_FTRACE */
65
66 #else /* CONFIG_64BIT */
67
68 #ifdef CONFIG_DYNAMIC_FTRACE
69
70         .globl _mcount
71 _mcount:
72         br      %r14
73
74         .globl ftrace_caller
75 ftrace_caller:
76         stm     %r2,%r5,16(%r15)
77         st      %r14,56(%r15)
78         lr      %r1,%r15
79         ahi     %r15,-96
80         l       %r3,100(%r15)
81         la      %r2,0(%r14)
82         st      %r1,__SF_BACKCHAIN(%r15)
83         la      %r3,0(%r3)
84         bras    %r14,0f
85         .long   ftrace_dyn_func
86 0:      l       %r14,0(%r14)
87         l       %r14,0(%r14)
88         basr    %r14,%r14
89         ahi     %r15,96
90         lm      %r2,%r5,16(%r15)
91         l       %r14,56(%r15)
92         br      %r14
93
94         .data
95         .globl  ftrace_dyn_func
96 ftrace_dyn_func:
97         .long   ftrace_stub
98         .previous
99
100 #else /* CONFIG_DYNAMIC_FTRACE */
101
102         .globl _mcount
103 _mcount:
104         stm     %r2,%r5,16(%r15)
105         st      %r14,56(%r15)
106         lr      %r1,%r15
107         ahi     %r15,-96
108         l       %r3,100(%r15)
109         la      %r2,0(%r14)
110         st      %r1,__SF_BACKCHAIN(%r15)
111         la      %r3,0(%r3)
112         bras    %r14,0f
113         .long   ftrace_trace_function
114 0:      l       %r14,0(%r14)
115         l       %r14,0(%r14)
116         basr    %r14,%r14
117         ahi     %r15,96
118         lm      %r2,%r5,16(%r15)
119         l       %r14,56(%r15)
120         br      %r14
121
122 #endif /* CONFIG_DYNAMIC_FTRACE */
123 #endif /* CONFIG_64BIT */