1/* 2 * Copyright IBM Corp. 2008, 2009 3 * 4 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>, 5 * 6 */ 7 8#include <linux/linkage.h> 9#include <asm/asm-offsets.h> 10#include <asm/ftrace.h> 11 12 .section .kprobes.text, "ax" 13 14ENTRY(ftrace_stub) 15 br %r14 16 17ENTRY(_mcount) 18#ifdef CONFIG_DYNAMIC_FTRACE 19 br %r14 20 21ENTRY(ftrace_caller) 22#endif 23 larl %r1,function_trace_stop 24 icm %r1,0xf,0(%r1) 25 bnzr %r14 26 stmg %r2,%r5,32(%r15) 27 stg %r14,112(%r15) 28 lgr %r1,%r15 29 aghi %r15,-160 30 stg %r1,__SF_BACKCHAIN(%r15) 31 lgr %r2,%r14 32 lg %r3,168(%r15) 33 aghi %r2,-MCOUNT_INSN_SIZE 34 larl %r14,ftrace_trace_function 35 lg %r14,0(%r14) 36 basr %r14,%r14 37#ifdef CONFIG_FUNCTION_GRAPH_TRACER 38 lg %r2,168(%r15) 39 lg %r3,272(%r15) 40ENTRY(ftrace_graph_caller) 41# The bras instruction gets runtime patched to call prepare_ftrace_return. 42# See ftrace_enable_ftrace_graph_caller. The patched instruction is: 43# bras %r14,prepare_ftrace_return 44 bras %r14,0f 450: stg %r2,168(%r15) 46#endif 47 aghi %r15,160 48 lmg %r2,%r5,32(%r15) 49 lg %r14,112(%r15) 50 br %r14 51 52#ifdef CONFIG_FUNCTION_GRAPH_TRACER 53 54ENTRY(return_to_handler) 55 stmg %r2,%r5,32(%r15) 56 lgr %r1,%r15 57 aghi %r15,-160 58 stg %r1,__SF_BACKCHAIN(%r15) 59 brasl %r14,ftrace_return_to_handler 60 aghi %r15,160 61 lgr %r14,%r2 62 lmg %r2,%r5,32(%r15) 63 br %r14 64 65#endif 66