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