Merge branch 'stable/bug-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / arch / s390 / kernel / mcount64.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         .globl ftrace_caller
22 ftrace_caller:
23 #endif
24         larl    %r1,function_trace_stop
25         icm     %r1,0xf,0(%r1)
26         bnzr    %r14
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_trace_function
35         lg      %r14,0(%r14)
36         basr    %r14,%r14
37 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
38         lg      %r2,168(%r15)
39         lg      %r3,272(%r15)
40         .globl  ftrace_graph_caller
41 ftrace_graph_caller:
42 # The bras instruction gets runtime patched to call prepare_ftrace_return.
43 # See ftrace_enable_ftrace_graph_caller. The patched instruction is:
44 #       bras    %r14,prepare_ftrace_return
45         bras    %r14,0f
46 0:      stg     %r2,168(%r15)
47 #endif
48         aghi    %r15,160
49         lmg     %r2,%r5,32(%r15)
50         lg      %r14,112(%r15)
51         br      %r14
52
53 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
54
55         .globl  return_to_handler
56 return_to_handler:
57         stmg    %r2,%r5,32(%r15)
58         lgr     %r1,%r15
59         aghi    %r15,-160
60         stg     %r1,__SF_BACKCHAIN(%r15)
61         brasl   %r14,ftrace_return_to_handler
62         aghi    %r15,160
63         lgr     %r14,%r2
64         lmg     %r2,%r5,32(%r15)
65         br      %r14
66
67 #endif