2008-12-25 13:38:56 +01:00
/ *
2009-06-12 10:26:44 +02:00
* Copyright I B M C o r p . 2 0 0 8 ,2 0 0 9
2008-12-25 13:38:56 +01:00
*
* Author( s ) : H e i k o C a r s t e n s < h e i k o . c a r s t e n s @de.ibm.com>,
*
* /
2009-03-18 13:27:34 +01:00
# include < a s m / a s m - o f f s e t s . h >
2009-06-12 10:26:44 +02:00
.globl ftrace_stub
ftrace_stub :
br % r14
.globl _mcount
2008-12-25 13:38:56 +01:00
_mcount :
2009-09-11 10:28:33 +02:00
# ifdef C O N F I G _ D Y N A M I C _ F T R A C E
2008-12-25 13:38:56 +01:00
br % r14
2009-06-12 10:26:44 +02:00
.data
.globl ftrace_dyn_func
ftrace_dyn_func :
2009-09-11 10:28:33 +02:00
.long ftrace_stub
2009-06-12 10:26:44 +02:00
.previous
.globl ftrace_caller
ftrace_caller :
2009-09-11 10:28:33 +02:00
# endif
2009-06-12 10:26:44 +02:00
stm % r2 ,% r5 ,1 6 ( % r15 )
2009-06-12 10:26:45 +02:00
bras % r1 ,2 f
2009-09-11 10:28:33 +02:00
# ifdef C O N F I G _ D Y N A M I C _ F T R A C E
0 : .long f t r a c e _ d y n _ f u n c
# else
2009-06-12 10:26:45 +02:00
0 : .long f t r a c e _ t r a c e _ f u n c t i o n
2009-09-11 10:28:33 +02:00
# endif
2009-06-12 10:26:45 +02:00
1 : .long f u n c t i o n _ t r a c e _ s t o p
2 : l % r2 ,1 b - 0 b ( % r1 )
icm % r2 ,0 x f ,0 ( % r2 )
jnz 3 f
2009-06-12 10:26:44 +02:00
st % r14 ,5 6 ( % r15 )
2009-06-12 10:26:45 +02:00
lr % r0 ,% r15
2009-06-12 10:26:44 +02:00
ahi % r15 ,- 9 6
l % r3 ,1 0 0 ( % r15 )
la % r2 ,0 ( % r14 )
2009-06-12 10:26:45 +02:00
st % r0 ,_ _ S F _ B A C K C H A I N ( % r15 )
2009-06-12 10:26:44 +02:00
la % r3 ,0 ( % r3 )
2009-06-12 10:26:45 +02:00
l % r14 ,0 b - 0 b ( % r1 )
2009-06-12 10:26:44 +02:00
l % r14 ,0 ( % r14 )
basr % r14 ,% r14
2009-06-12 10:26:46 +02:00
# ifdef C O N F I G _ F U N C T I O N _ G R A P H _ T R A C E R
2009-09-11 10:28:33 +02:00
# ifdef C O N F I G _ D Y N A M I C _ F T R A C E
2009-06-12 10:26:46 +02:00
.globl ftrace_graph_caller
ftrace_graph_caller :
# This u n c o n d i t i o n a l b r a n c h g e t s r u n t i m e p a t c h e d . C h a n g e o n l y i f
# you k n o w w h a t y o u a r e d o i n g . S e e f t r a c e _ e n a b l e _ g r a p h _ c a l l e r ( ) .
j 1 f
# endif
bras % r1 ,0 f
.long prepare_ftrace_return
0 : l % r2 ,1 5 2 ( % r15 )
l % r4 ,0 ( % r1 )
l % r3 ,1 0 0 ( % r15 )
basr % r14 ,% r4
st % r2 ,1 0 0 ( % r15 )
2009-09-11 10:28:33 +02:00
1 :
2009-06-12 10:26:46 +02:00
# endif
2009-06-12 10:26:44 +02:00
ahi % r15 ,9 6
l % r14 ,5 6 ( % r15 )
2009-06-12 10:26:45 +02:00
3 : lm % r2 ,% r5 ,1 6 ( % r15 )
2008-12-25 13:38:56 +01:00
br % r14
2009-06-12 10:26:46 +02:00
# ifdef C O N F I G _ F U N C T I O N _ G R A P H _ T R A C E R
.globl return_to_handler
return_to_handler :
stm % r2 ,% r5 ,1 6 ( % r15 )
st % r14 ,5 6 ( % r15 )
lr % r0 ,% r15
ahi % r15 ,- 9 6
st % r0 ,_ _ S F _ B A C K C H A I N ( % r15 )
bras % r1 ,0 f
.long ftrace_return_to_handler
0 : l % r2 ,0 b - 0 b ( % r1 )
basr % r14 ,% r2
lr % r14 ,% r2
ahi % r15 ,9 6
lm % r2 ,% r5 ,1 6 ( % r15 )
br % r14
2009-09-11 10:28:33 +02:00
# endif