blob: dfe015d7398c9e900f13810eb9b6bab6e52ca4f2 [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
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020014 .globl _mcount
Heiko Carstens5d360a72008-12-25 13:38:56 +010015_mcount:
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020016#ifdef CONFIG_DYNAMIC_FTRACE
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020017 br %r14
18
19 .data
20 .globl ftrace_dyn_func
21ftrace_dyn_func:
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020022 .long ftrace_stub
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020023 .previous
24
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020025 .globl ftrace_caller
26ftrace_caller:
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020027#endif
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020028 stm %r2,%r5,16(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020029 bras %r1,2f
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020030#ifdef CONFIG_DYNAMIC_FTRACE
310: .long ftrace_dyn_func
32#else
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200330: .long ftrace_trace_function
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020034#endif
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200351: .long function_trace_stop
362: l %r2,1b-0b(%r1)
37 icm %r2,0xf,0(%r2)
38 jnz 3f
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020039 st %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020040 lr %r0,%r15
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020041 ahi %r15,-96
42 l %r3,100(%r15)
43 la %r2,0(%r14)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020044 st %r0,__SF_BACKCHAIN(%r15)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020045 la %r3,0(%r3)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020046 l %r14,0b-0b(%r1)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020047 l %r14,0(%r14)
48 basr %r14,%r14
Heiko Carstens88dbd202009-06-12 10:26:46 +020049#ifdef CONFIG_FUNCTION_GRAPH_TRACER
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020050#ifdef CONFIG_DYNAMIC_FTRACE
Heiko Carstens88dbd202009-06-12 10:26:46 +020051 .globl ftrace_graph_caller
52ftrace_graph_caller:
53 # This unconditional branch gets runtime patched. Change only if
54 # you know what you are doing. See ftrace_enable_graph_caller().
55 j 1f
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020056#endif
Heiko Carstens88dbd202009-06-12 10:26:46 +020057 bras %r1,0f
58 .long prepare_ftrace_return
590: l %r2,152(%r15)
60 l %r4,0(%r1)
61 l %r3,100(%r15)
62 basr %r14,%r4
63 st %r2,100(%r15)
641:
65#endif
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020066 ahi %r15,96
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020067 l %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200683: lm %r2,%r5,16(%r15)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020069 br %r14
70
Heiko Carstens88dbd202009-06-12 10:26:46 +020071#ifdef CONFIG_FUNCTION_GRAPH_TRACER
72
73 .globl return_to_handler
74return_to_handler:
75 stm %r2,%r5,16(%r15)
76 st %r14,56(%r15)
77 lr %r0,%r15
78 ahi %r15,-96
79 st %r0,__SF_BACKCHAIN(%r15)
80 bras %r1,0f
81 .long ftrace_return_to_handler
820: l %r2,0b-0b(%r1)
83 basr %r14,%r2
84 lr %r14,%r2
85 ahi %r15,96
86 lm %r2,%r5,16(%r15)
87 br %r14
88
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020089#endif