blob: e73667286ac0fdc8957dab079111e8511498a332 [file] [log] [blame]
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +02001/*
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
Martin Schwidefsky860dba42011-01-05 12:47:25 +010010 .section .kprobes.text, "ax"
11
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020012 .globl ftrace_stub
13ftrace_stub:
14 br %r14
15
16 .globl _mcount
17_mcount:
18#ifdef CONFIG_DYNAMIC_FTRACE
19 br %r14
20
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020021 .globl ftrace_caller
22ftrace_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)
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020034 larl %r14,ftrace_trace_function
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020035 lg %r14,0(%r14)
36 basr %r14,%r14
37#ifdef CONFIG_FUNCTION_GRAPH_TRACER
Martin Schwidefsky4cc9bed2011-01-05 12:48:11 +010038 lg %r2,168(%r15)
39 lg %r3,272(%r15)
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020040 .globl ftrace_graph_caller
41ftrace_graph_caller:
Martin Schwidefsky4cc9bed2011-01-05 12:48:11 +010042# 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
460: stg %r2,168(%r15)
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020047#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
56return_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