blob: 4567ce20d900c128a23d27a6b8668b72d921149f [file] [log] [blame]
Heiko Carstens5d360a72008-12-25 13:38:56 +01001/*
Heiko Carstensa53c8fa2012-07-20 11:15:04 +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
Jan Glauber144d6342011-07-24 10:48:19 +02008#include <linux/linkage.h>
Heiko Carstenscf087342009-03-18 13:27:34 +01009#include <asm/asm-offsets.h>
10
Martin Schwidefsky860dba42011-01-05 12:47:25 +010011 .section .kprobes.text, "ax"
12
Jan Glauber144d6342011-07-24 10:48:19 +020013ENTRY(ftrace_stub)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020014 br %r14
15
Jan Glauber144d6342011-07-24 10:48:19 +020016ENTRY(_mcount)
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020017#ifdef CONFIG_DYNAMIC_FTRACE
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020018 br %r14
19
Jan Glauber144d6342011-07-24 10:48:19 +020020ENTRY(ftrace_caller)
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020021#endif
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020022 stm %r2,%r5,16(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020023 bras %r1,2f
240: .long ftrace_trace_function
251: .long function_trace_stop
262: l %r2,1b-0b(%r1)
27 icm %r2,0xf,0(%r2)
28 jnz 3f
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020029 st %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020030 lr %r0,%r15
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020031 ahi %r15,-96
32 l %r3,100(%r15)
33 la %r2,0(%r14)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020034 st %r0,__SF_BACKCHAIN(%r15)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020035 la %r3,0(%r3)
Heiko Carstens8b4488f2009-06-12 10:26:45 +020036 l %r14,0b-0b(%r1)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020037 l %r14,0(%r14)
38 basr %r14,%r14
Heiko Carstens88dbd202009-06-12 10:26:46 +020039#ifdef CONFIG_FUNCTION_GRAPH_TRACER
Martin Schwidefsky4cc9bed2011-01-05 12:48:11 +010040 l %r2,100(%r15)
41 l %r3,152(%r15)
Jan Glauber144d6342011-07-24 10:48:19 +020042ENTRY(ftrace_graph_caller)
Martin Schwidefsky4cc9bed2011-01-05 12:48:11 +010043# The bras instruction gets runtime patched to call prepare_ftrace_return.
44# See ftrace_enable_ftrace_graph_caller. The patched instruction is:
45# bras %r14,prepare_ftrace_return
46 bras %r14,0f
470: st %r2,100(%r15)
Heiko Carstens88dbd202009-06-12 10:26:46 +020048#endif
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020049 ahi %r15,96
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020050 l %r14,56(%r15)
Heiko Carstens8b4488f2009-06-12 10:26:45 +0200513: lm %r2,%r5,16(%r15)
Heiko Carstensdfd9f7a2009-06-12 10:26:44 +020052 br %r14
53
Heiko Carstens88dbd202009-06-12 10:26:46 +020054#ifdef CONFIG_FUNCTION_GRAPH_TRACER
55
Jan Glauber144d6342011-07-24 10:48:19 +020056ENTRY(return_to_handler)
Heiko Carstens88dbd202009-06-12 10:26:46 +020057 stm %r2,%r5,16(%r15)
58 st %r14,56(%r15)
59 lr %r0,%r15
60 ahi %r15,-96
61 st %r0,__SF_BACKCHAIN(%r15)
62 bras %r1,0f
63 .long ftrace_return_to_handler
640: l %r2,0b-0b(%r1)
65 basr %r14,%r2
66 lr %r14,%r2
67 ahi %r15,96
68 lm %r2,%r5,16(%r15)
69 br %r14
70
Martin Schwidefsky6ac2a4d2009-09-11 10:28:33 +020071#endif