Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzi...
[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 <linux/linkage.h>
9 #include <asm/asm-offsets.h>
10
11         .section .kprobes.text, "ax"
12
13 ENTRY(ftrace_stub)
14         br      %r14
15
16 ENTRY(_mcount)
17 #ifdef CONFIG_DYNAMIC_FTRACE
18         br      %r14
19
20 ENTRY(ftrace_caller)
21 #endif
22         larl    %r1,function_trace_stop
23         icm     %r1,0xf,0(%r1)
24         bnzr    %r14
25         stmg    %r2,%r5,32(%r15)
26         stg     %r14,112(%r15)
27         lgr     %r1,%r15
28         aghi    %r15,-160
29         stg     %r1,__SF_BACKCHAIN(%r15)
30         lgr     %r2,%r14
31         lg      %r3,168(%r15)
32         larl    %r14,ftrace_trace_function
33         lg      %r14,0(%r14)
34         basr    %r14,%r14
35 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
36         lg      %r2,168(%r15)
37         lg      %r3,272(%r15)
38 ENTRY(ftrace_graph_caller)
39 # The bras instruction gets runtime patched to call prepare_ftrace_return.
40 # See ftrace_enable_ftrace_graph_caller. The patched instruction is:
41 #       bras    %r14,prepare_ftrace_return
42         bras    %r14,0f
43 0:      stg     %r2,168(%r15)
44 #endif
45         aghi    %r15,160
46         lmg     %r2,%r5,32(%r15)
47         lg      %r14,112(%r15)
48         br      %r14
49
50 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
51
52 ENTRY(return_to_handler)
53         stmg    %r2,%r5,32(%r15)
54         lgr     %r1,%r15
55         aghi    %r15,-160
56         stg     %r1,__SF_BACKCHAIN(%r15)
57         brasl   %r14,ftrace_return_to_handler
58         aghi    %r15,160
59         lgr     %r14,%r2
60         lmg     %r2,%r5,32(%r15)
61         br      %r14
62
63 #endif