15d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens/*
2dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens * Copyright IBM Corp. 2008,2009
35d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens *
45d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens *   Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
55d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens *
65d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens */
75d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens
8144d634a21caff1d54cb4bb0d073774e88130045Jan Glauber#include <linux/linkage.h>
9cf087343805ebfea2b1234b06fd5f12273e865b1Heiko Carstens#include <asm/asm-offsets.h>
10cf087343805ebfea2b1234b06fd5f12273e865b1Heiko Carstens
11860dba45e81be2e1ba977617652ae36084daebafMartin Schwidefsky	.section .kprobes.text, "ax"
12860dba45e81be2e1ba977617652ae36084daebafMartin Schwidefsky
13144d634a21caff1d54cb4bb0d073774e88130045Jan GlauberENTRY(ftrace_stub)
14dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	br	%r14
15dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens
16144d634a21caff1d54cb4bb0d073774e88130045Jan GlauberENTRY(_mcount)
176ac2a4ddd10d6916785b4c566d521025c855f823Martin Schwidefsky#ifdef CONFIG_DYNAMIC_FTRACE
185d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens	br	%r14
195d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens
20144d634a21caff1d54cb4bb0d073774e88130045Jan GlauberENTRY(ftrace_caller)
216ac2a4ddd10d6916785b4c566d521025c855f823Martin Schwidefsky#endif
22dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	stm	%r2,%r5,16(%r15)
238b4488f85d619253c9e631ec723368f400106771Heiko Carstens	bras	%r1,2f
248b4488f85d619253c9e631ec723368f400106771Heiko Carstens0:	.long	ftrace_trace_function
258b4488f85d619253c9e631ec723368f400106771Heiko Carstens1:	.long	function_trace_stop
268b4488f85d619253c9e631ec723368f400106771Heiko Carstens2:	l	%r2,1b-0b(%r1)
278b4488f85d619253c9e631ec723368f400106771Heiko Carstens	icm	%r2,0xf,0(%r2)
288b4488f85d619253c9e631ec723368f400106771Heiko Carstens	jnz	3f
29dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	st	%r14,56(%r15)
308b4488f85d619253c9e631ec723368f400106771Heiko Carstens	lr	%r0,%r15
31dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	ahi	%r15,-96
32dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	l	%r3,100(%r15)
33dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	la	%r2,0(%r14)
348b4488f85d619253c9e631ec723368f400106771Heiko Carstens	st	%r0,__SF_BACKCHAIN(%r15)
35dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	la	%r3,0(%r3)
368b4488f85d619253c9e631ec723368f400106771Heiko Carstens	l	%r14,0b-0b(%r1)
37dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	l	%r14,0(%r14)
38dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	basr	%r14,%r14
3988dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens#ifdef CONFIG_FUNCTION_GRAPH_TRACER
404cc9bed034d1ae588e5b773ee0edeb74ef3c0ff4Martin Schwidefsky	l	%r2,100(%r15)
414cc9bed034d1ae588e5b773ee0edeb74ef3c0ff4Martin Schwidefsky	l	%r3,152(%r15)
42144d634a21caff1d54cb4bb0d073774e88130045Jan GlauberENTRY(ftrace_graph_caller)
434cc9bed034d1ae588e5b773ee0edeb74ef3c0ff4Martin Schwidefsky# The bras instruction gets runtime patched to call prepare_ftrace_return.
444cc9bed034d1ae588e5b773ee0edeb74ef3c0ff4Martin Schwidefsky# See ftrace_enable_ftrace_graph_caller. The patched instruction is:
454cc9bed034d1ae588e5b773ee0edeb74ef3c0ff4Martin Schwidefsky#	bras	%r14,prepare_ftrace_return
464cc9bed034d1ae588e5b773ee0edeb74ef3c0ff4Martin Schwidefsky	bras	%r14,0f
474cc9bed034d1ae588e5b773ee0edeb74ef3c0ff4Martin Schwidefsky0:	st	%r2,100(%r15)
4888dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens#endif
49dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	ahi	%r15,96
50dfd9f7abc0fb67b5781f340d982384cea53b2884Heiko Carstens	l	%r14,56(%r15)
518b4488f85d619253c9e631ec723368f400106771Heiko Carstens3:	lm	%r2,%r5,16(%r15)
525d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens	br	%r14
535d360a75f87f288e9a25d56cca503a7c7939e490Heiko Carstens
5488dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens#ifdef CONFIG_FUNCTION_GRAPH_TRACER
5588dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens
56144d634a21caff1d54cb4bb0d073774e88130045Jan GlauberENTRY(return_to_handler)
5788dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	stm	%r2,%r5,16(%r15)
5888dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	st	%r14,56(%r15)
5988dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	lr	%r0,%r15
6088dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	ahi	%r15,-96
6188dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	st	%r0,__SF_BACKCHAIN(%r15)
6288dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	bras	%r1,0f
6388dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	.long	ftrace_return_to_handler
6488dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens0:	l	%r2,0b-0b(%r1)
6588dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	basr	%r14,%r2
6688dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	lr	%r14,%r2
6788dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	ahi	%r15,96
6888dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	lm	%r2,%r5,16(%r15)
6988dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens	br	%r14
7088dbd2037229bd2ed7543ffd0d8f2d9dec9d31d2Heiko Carstens
716ac2a4ddd10d6916785b4c566d521025c855f823Martin Schwidefsky#endif
72