]> git.karo-electronics.de Git - mv-sheeva.git/blob - arch/s390/kernel/mcount.S
4a6e1a575f9eb6bdf360e0008730a86f267c315b
[mv-sheeva.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         .section .kprobes.text, "ax"
11
12         .globl ftrace_stub
13 ftrace_stub:
14         br      %r14
15
16         .globl _mcount
17 _mcount:
18 #ifdef CONFIG_DYNAMIC_FTRACE
19         br      %r14
20
21         .data
22         .globl  ftrace_dyn_func
23 ftrace_dyn_func:
24         .long   ftrace_stub
25         .previous
26
27         .globl ftrace_caller
28 ftrace_caller:
29 #endif
30         stm     %r2,%r5,16(%r15)
31         bras    %r1,2f
32 #ifdef CONFIG_DYNAMIC_FTRACE
33 0:      .long   ftrace_dyn_func
34 #else
35 0:      .long   ftrace_trace_function
36 #endif
37 1:      .long   function_trace_stop
38 2:      l       %r2,1b-0b(%r1)
39         icm     %r2,0xf,0(%r2)
40         jnz     3f
41         st      %r14,56(%r15)
42         lr      %r0,%r15
43         ahi     %r15,-96
44         l       %r3,100(%r15)
45         la      %r2,0(%r14)
46         st      %r0,__SF_BACKCHAIN(%r15)
47         la      %r3,0(%r3)
48         l       %r14,0b-0b(%r1)
49         l       %r14,0(%r14)
50         basr    %r14,%r14
51 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
52 #ifdef CONFIG_DYNAMIC_FTRACE
53         .globl  ftrace_graph_caller
54 ftrace_graph_caller:
55         # This unconditional branch gets runtime patched. Change only if
56         # you know what you are doing. See ftrace_enable_graph_caller().
57         j       1f
58 #endif
59         bras    %r1,0f
60         .long   prepare_ftrace_return
61 0:      l       %r2,152(%r15)
62         l       %r4,0(%r1)
63         l       %r3,100(%r15)
64         basr    %r14,%r4
65         st      %r2,100(%r15)
66 1:
67 #endif
68         ahi     %r15,96
69         l       %r14,56(%r15)
70 3:      lm      %r2,%r5,16(%r15)
71         br      %r14
72
73 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
74
75         .globl  return_to_handler
76 return_to_handler:
77         stm     %r2,%r5,16(%r15)
78         st      %r14,56(%r15)
79         lr      %r0,%r15
80         ahi     %r15,-96
81         st      %r0,__SF_BACKCHAIN(%r15)
82         bras    %r1,0f
83         .long   ftrace_return_to_handler
84 0:      l       %r2,0b-0b(%r1)
85         basr    %r14,%r2
86         lr      %r14,%r2
87         ahi     %r15,96
88         lm      %r2,%r5,16(%r15)
89         br      %r14
90
91 #endif