blob: 0aa85ec94d0821ea8ff43e990063d6ec9f423590 [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:
Heiko Carstens8b4488f2009-06-12 10:26:45 +020024 larl %r1,function_trace_stop
25 icm %r1,0xf,0(%r1)
26 bnzr %r14
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020027 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_dyn_func
35 lg %r14,0(%r14)
36 basr %r14,%r14
37 aghi %r15,160
38 lmg %r2,%r5,32(%r15)
39 lg %r14,112(%r15)
40 br %r14
41
42 .data
43 .globl ftrace_dyn_func
44ftrace_dyn_func:
45 .quad ftrace_stub
46 .previous
47
48#else /* CONFIG_DYNAMIC_FTRACE */
49
50 .globl _mcount
51_mcount:
Heiko Carstens8b4488f2009-06-12 10:26:45 +020052 larl %r1,function_trace_stop
53 icm %r1,0xf,0(%r1)
54 bnzr %r14
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020055 stmg %r2,%r5,32(%r15)
56 stg %r14,112(%r15)
57 lgr %r1,%r15
58 aghi %r15,-160
59 stg %r1,__SF_BACKCHAIN(%r15)
60 lgr %r2,%r14
61 lg %r3,168(%r15)
62 larl %r14,ftrace_trace_function
63 lg %r14,0(%r14)
64 basr %r14,%r14
65 aghi %r15,160
66 lmg %r2,%r5,32(%r15)
67 lg %r14,112(%r15)
68 br %r14
69
70#endif /* CONFIG_DYNAMIC_FTRACE */
71
72#else /* CONFIG_64BIT */
73
74#ifdef CONFIG_DYNAMIC_FTRACE
75
76 .globl _mcount
77_mcount:
78 br %r14
79
80 .globl ftrace_caller
81ftrace_caller:
82 stm %r2,%r5,16(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020083 bras %r1,2f
840: .long ftrace_trace_function
851: .long function_trace_stop
862: l %r2,1b-0b(%r1)
87 icm %r2,0xf,0(%r2)
88 jnz 3f
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020089 st %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020090 lr %r0,%r15
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020091 ahi %r15,-96
92 l %r3,100(%r15)
93 la %r2,0(%r14)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020094 st %r0,__SF_BACKCHAIN(%r15)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020095 la %r3,0(%r3)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020096 l %r14,0b-0b(%r1)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020097 l %r14,0(%r14)
98 basr %r14,%r14
99 ahi %r15,96
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +0200100 l %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +02001013: lm %r2,%r5,16(%r15)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +0200102 br %r14
103
104 .data
105 .globl ftrace_dyn_func
106ftrace_dyn_func:
107 .long ftrace_stub
108 .previous
109
110#else /* CONFIG_DYNAMIC_FTRACE */
111
112 .globl _mcount
113_mcount:
114 stm %r2,%r5,16(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200115 bras %r1,2f
1160: .long ftrace_trace_function
1171: .long function_trace_stop
1182: l %r2,1b-0b(%r1)
119 icm %r2,0xf,0(%r2)
120 jnz 3f
Heiko Carstens5d360a72008-12-25 13:38:56 +0100121 st %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200122 lr %r0,%r15
Heiko Carstens5d360a72008-12-25 13:38:56 +0100123 ahi %r15,-96
124 l %r3,100(%r15)
125 la %r2,0(%r14)
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200126 st %r0,__SF_BACKCHAIN(%r15)
Heiko Carstens5d360a72008-12-25 13:38:56 +0100127 la %r3,0(%r3)
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200128 l %r14,0b-0b(%r1)
Heiko Carstens5d360a72008-12-25 13:38:56 +0100129 l %r14,0(%r14)
130 basr %r14,%r14
131 ahi %r15,96
Heiko Carstens5d360a72008-12-25 13:38:56 +0100132 l %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +02001333: lm %r2,%r5,16(%r15)
Heiko Carstens5d360a72008-12-25 13:38:56 +0100134 br %r14
135
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +0200136#endif /* CONFIG_DYNAMIC_FTRACE */
Heiko Carstens5d360a72008-12-25 13:38:56 +0100137#endif /* CONFIG_64BIT */