Commit | Line | Data |
---|---|---|
5d360a75 | 1 | /* |
a53c8fab | 2 | * Copyright IBM Corp. 2008, 2009 |
5d360a75 HC |
3 | * |
4 | * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>, | |
5 | * | |
6 | */ | |
7 | ||
144d634a | 8 | #include <linux/linkage.h> |
cf087343 | 9 | #include <asm/asm-offsets.h> |
aca91209 | 10 | #include <asm/ftrace.h> |
53255c9a | 11 | #include <asm/ptrace.h> |
711f5df7 | 12 | #include <asm/export.h> |
cf087343 | 13 | |
860dba45 MS |
14 | .section .kprobes.text, "ax" |
15 | ||
144d634a | 16 | ENTRY(ftrace_stub) |
dfd9f7ab HC |
17 | br %r14 |
18 | ||
53255c9a HC |
19 | #define STACK_FRAME_SIZE (STACK_FRAME_OVERHEAD + __PT_SIZE) |
20 | #define STACK_PTREGS (STACK_FRAME_OVERHEAD) | |
21 | #define STACK_PTREGS_GPRS (STACK_PTREGS + __PT_GPRS) | |
22 | #define STACK_PTREGS_PSW (STACK_PTREGS + __PT_PSW) | |
23 | ||
144d634a | 24 | ENTRY(_mcount) |
5d360a75 HC |
25 | br %r14 |
26 | ||
711f5df7 AV |
27 | EXPORT_SYMBOL(_mcount) |
28 | ||
144d634a | 29 | ENTRY(ftrace_caller) |
53255c9a HC |
30 | .globl ftrace_regs_caller |
31 | .set ftrace_regs_caller,ftrace_caller | |
32 | lgr %r1,%r15 | |
e6d60b36 | 33 | #ifndef CC_USING_HOTPATCH |
c933146a | 34 | aghi %r0,MCOUNT_RETURN_FIXUP |
e6d60b36 | 35 | #endif |
53255c9a HC |
36 | aghi %r15,-STACK_FRAME_SIZE |
37 | stg %r1,__SF_BACKCHAIN(%r15) | |
38 | stg %r1,(STACK_PTREGS_GPRS+15*8)(%r15) | |
39 | stg %r0,(STACK_PTREGS_PSW+8)(%r15) | |
40 | stmg %r2,%r14,(STACK_PTREGS_GPRS+2*8)(%r15) | |
41 | #ifdef CONFIG_HAVE_MARCH_Z196_FEATURES | |
42 | aghik %r2,%r0,-MCOUNT_INSN_SIZE | |
43 | lgrl %r4,function_trace_op | |
44 | lgrl %r1,ftrace_trace_function | |
45 | #else | |
46 | lgr %r2,%r0 | |
47 | aghi %r2,-MCOUNT_INSN_SIZE | |
48 | larl %r4,function_trace_op | |
49 | lg %r4,0(%r4) | |
50 | larl %r1,ftrace_trace_function | |
51 | lg %r1,0(%r1) | |
52 | #endif | |
53 | lgr %r3,%r14 | |
54 | la %r5,STACK_PTREGS(%r15) | |
55 | basr %r14,%r1 | |
88dbd203 | 56 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
53255c9a | 57 | # The j instruction gets runtime patched to a nop instruction. |
0cccdda8 | 58 | # See ftrace_enable_ftrace_graph_caller. |
53255c9a HC |
59 | ENTRY(ftrace_graph_caller) |
60 | j ftrace_graph_caller_end | |
61 | lg %r2,(STACK_PTREGS_GPRS+14*8)(%r15) | |
62 | lg %r3,(STACK_PTREGS_PSW+8)(%r15) | |
63 | brasl %r14,prepare_ftrace_return | |
64 | stg %r2,(STACK_PTREGS_GPRS+14*8)(%r15) | |
65 | ftrace_graph_caller_end: | |
66 | .globl ftrace_graph_caller_end | |
88dbd203 | 67 | #endif |
53255c9a HC |
68 | lg %r1,(STACK_PTREGS_PSW+8)(%r15) |
69 | lmg %r2,%r15,(STACK_PTREGS_GPRS+2*8)(%r15) | |
70 | br %r1 | |
5d360a75 | 71 | |
88dbd203 HC |
72 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
73 | ||
144d634a | 74 | ENTRY(return_to_handler) |
53255c9a HC |
75 | stmg %r2,%r5,32(%r15) |
76 | lgr %r1,%r15 | |
77 | aghi %r15,-STACK_FRAME_OVERHEAD | |
78 | stg %r1,__SF_BACKCHAIN(%r15) | |
79 | brasl %r14,ftrace_return_to_handler | |
80 | aghi %r15,STACK_FRAME_OVERHEAD | |
81 | lgr %r14,%r2 | |
82 | lmg %r2,%r5,32(%r15) | |
88dbd203 HC |
83 | br %r14 |
84 | ||
6ac2a4dd | 85 | #endif |