blob: de274996f640ac732613cc6c4107109a81df255d [file] [log] [blame]
Heiko Carstens5d360a72008-12-25 13:38:56 +01001/*
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +02002 * Copyright IBM Corp. 2008,2009
Heiko Carstens5d360a72008-12-25 13:38:56 +01003 *
4 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
5 *
6 */
7
Heiko Carstenscf087342009-03-18 13:27:34 +01008#include <asm/asm-offsets.h>
9
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020010 .globl ftrace_stub
11ftrace_stub:
12 br %r14
13
14#ifdef CONFIG_64BIT
15
16#ifdef CONFIG_DYNAMIC_FTRACE
17
18 .globl _mcount
Heiko Carstens5d360a72008-12-25 13:38:56 +010019_mcount:
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020020 br %r14
21
22 .globl ftrace_caller
23ftrace_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
41ftrace_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
75ftrace_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
860: 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
96ftrace_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)
Heiko Carstens5d360a72008-12-25 13:38:56 +0100105 st %r14,56(%r15)
106 lr %r1,%r15
107 ahi %r15,-96
108 l %r3,100(%r15)
109 la %r2,0(%r14)
Heiko Carstenscf087342009-03-18 13:27:34 +0100110 st %r1,__SF_BACKCHAIN(%r15)
Heiko Carstens5d360a72008-12-25 13:38:56 +0100111 la %r3,0(%r3)
112 bras %r14,0f
113 .long ftrace_trace_function
1140: l %r14,0(%r14)
115 l %r14,0(%r14)
116 basr %r14,%r14
117 ahi %r15,96
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +0200118 lm %r2,%r5,16(%r15)
Heiko Carstens5d360a72008-12-25 13:38:56 +0100119 l %r14,56(%r15)
120 br %r14
121
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +0200122#endif /* CONFIG_DYNAMIC_FTRACE */
Heiko Carstens5d360a72008-12-25 13:38:56 +0100123#endif /* CONFIG_64BIT */