|
@@ -26,22 +26,42 @@ mcount:
|
|
|
#else
|
|
|
sethi %hi(function_trace_stop), %g1
|
|
|
lduw [%g1 + %lo(function_trace_stop)], %g2
|
|
|
- brnz,pn %g2, 1f
|
|
|
+ brnz,pn %g2, 2f
|
|
|
sethi %hi(ftrace_trace_function), %g1
|
|
|
sethi %hi(ftrace_stub), %g2
|
|
|
ldx [%g1 + %lo(ftrace_trace_function)], %g1
|
|
|
or %g2, %lo(ftrace_stub), %g2
|
|
|
cmp %g1, %g2
|
|
|
be,pn %icc, 1f
|
|
|
- mov %i7, %g2
|
|
|
+ mov %i7, %g3
|
|
|
save %sp, -128, %sp
|
|
|
- mov %g2, %o1
|
|
|
+ mov %g3, %o1
|
|
|
jmpl %g1, %o7
|
|
|
mov %i7, %o0
|
|
|
ret
|
|
|
restore
|
|
|
/* not reached */
|
|
|
1:
|
|
|
+#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
|
+ sethi %hi(ftrace_graph_return), %g1
|
|
|
+ ldx [%g1 + %lo(ftrace_graph_return)], %g3
|
|
|
+ cmp %g2, %g3
|
|
|
+ bne,pn %xcc, 5f
|
|
|
+ sethi %hi(ftrace_graph_entry_stub), %g2
|
|
|
+ sethi %hi(ftrace_graph_entry), %g1
|
|
|
+ or %g2, %lo(ftrace_graph_entry_stub), %g2
|
|
|
+ ldx [%g1 + %lo(ftrace_graph_entry)], %g1
|
|
|
+ cmp %g1, %g2
|
|
|
+ be,pt %xcc, 2f
|
|
|
+ nop
|
|
|
+5: mov %i7, %g2
|
|
|
+ mov %fp, %g3
|
|
|
+ save %sp, -128, %sp
|
|
|
+ mov %g2, %l0
|
|
|
+ ba,pt %xcc, ftrace_graph_caller
|
|
|
+ mov %g3, %l1
|
|
|
+#endif
|
|
|
+2:
|
|
|
#endif
|
|
|
#endif
|
|
|
retl
|
|
@@ -62,18 +82,48 @@ ftrace_stub:
|
|
|
ftrace_caller:
|
|
|
sethi %hi(function_trace_stop), %g1
|
|
|
mov %i7, %g2
|
|
|
- lduw [%g1 + %lo(function_trace_stop)], %g3
|
|
|
- brnz,pn %g3, ftrace_stub
|
|
|
- nop
|
|
|
+ lduw [%g1 + %lo(function_trace_stop)], %g1
|
|
|
+ brnz,pn %g1, ftrace_stub
|
|
|
+ mov %fp, %g3
|
|
|
save %sp, -128, %sp
|
|
|
mov %g2, %o1
|
|
|
+ mov %g2, %l0
|
|
|
+ mov %g3, %l1
|
|
|
.globl ftrace_call
|
|
|
ftrace_call:
|
|
|
call ftrace_stub
|
|
|
mov %i7, %o0
|
|
|
+#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
|
+ .globl ftrace_graph_call
|
|
|
+ftrace_graph_call:
|
|
|
+ call ftrace_stub
|
|
|
+ nop
|
|
|
+#endif
|
|
|
ret
|
|
|
restore
|
|
|
+#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
|
+ .size ftrace_graph_call,.-ftrace_graph_call
|
|
|
+#endif
|
|
|
.size ftrace_call,.-ftrace_call
|
|
|
.size ftrace_caller,.-ftrace_caller
|
|
|
#endif
|
|
|
#endif
|
|
|
+
|
|
|
+#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
|
+ENTRY(ftrace_graph_caller)
|
|
|
+ mov %l0, %o0
|
|
|
+ mov %i7, %o1
|
|
|
+ call prepare_ftrace_return
|
|
|
+ mov %l1, %o2
|
|
|
+ ret
|
|
|
+ restore %o0, -8, %i7
|
|
|
+END(ftrace_graph_caller)
|
|
|
+
|
|
|
+ENTRY(return_to_handler)
|
|
|
+ save %sp, -128, %sp
|
|
|
+ call ftrace_return_to_handler
|
|
|
+ mov %fp, %o0
|
|
|
+ jmpl %o0 + 8, %g0
|
|
|
+ restore
|
|
|
+END(return_to_handler)
|
|
|
+#endif
|