|
@@ -47,6 +47,7 @@
|
|
#include <asm/processor.h>
|
|
#include <asm/processor.h>
|
|
#include <asm/thread_info.h>
|
|
#include <asm/thread_info.h>
|
|
#include <asm/unistd.h>
|
|
#include <asm/unistd.h>
|
|
|
|
+#include <asm/ftrace.h>
|
|
|
|
|
|
#include "minstate.h"
|
|
#include "minstate.h"
|
|
|
|
|
|
@@ -1404,6 +1405,54 @@ GLOBAL_ENTRY(unw_init_running)
|
|
br.ret.sptk.many rp
|
|
br.ret.sptk.many rp
|
|
END(unw_init_running)
|
|
END(unw_init_running)
|
|
|
|
|
|
|
|
+#ifdef CONFIG_FUNCTION_TRACER
|
|
|
|
+GLOBAL_ENTRY(_mcount)
|
|
|
|
+ movl r2 = ftrace_stub
|
|
|
|
+ movl r3 = ftrace_trace_function;;
|
|
|
|
+ ld8 r3 = [r3];;
|
|
|
|
+ ld8 r3 = [r3];;
|
|
|
|
+ cmp.eq p7,p0 = r2, r3
|
|
|
|
+(p7) br.sptk.many ftrace_stub
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ alloc loc0 = ar.pfs, 4, 4, 2, 0
|
|
|
|
+ ;;
|
|
|
|
+ mov loc1 = b0
|
|
|
|
+ mov out0 = b0
|
|
|
|
+ mov loc2 = r8
|
|
|
|
+ mov loc3 = r15
|
|
|
|
+ ;;
|
|
|
|
+ adds out0 = -MCOUNT_INSN_SIZE, out0
|
|
|
|
+ mov out1 = in2
|
|
|
|
+ mov b6 = r3
|
|
|
|
+
|
|
|
|
+ br.call.sptk.many b0 = b6
|
|
|
|
+ ;;
|
|
|
|
+ mov ar.pfs = loc0
|
|
|
|
+ mov b0 = loc1
|
|
|
|
+ mov r8 = loc2
|
|
|
|
+ mov r15 = loc3
|
|
|
|
+ br ftrace_stub
|
|
|
|
+ ;;
|
|
|
|
+END(_mcount)
|
|
|
|
+
|
|
|
|
+GLOBAL_ENTRY(ftrace_stub)
|
|
|
|
+ mov r3 = b0
|
|
|
|
+ movl r2 = _mcount_ret_helper
|
|
|
|
+ ;;
|
|
|
|
+ mov b6 = r2
|
|
|
|
+ mov b7 = r3
|
|
|
|
+ br.ret.sptk.many b6
|
|
|
|
+
|
|
|
|
+_mcount_ret_helper:
|
|
|
|
+ mov b0 = r42
|
|
|
|
+ mov r1 = r41
|
|
|
|
+ mov ar.pfs = r40
|
|
|
|
+ br b7
|
|
|
|
+END(ftrace_stub)
|
|
|
|
+
|
|
|
|
+#endif /* CONFIG_FUNCTION_TRACER */
|
|
|
|
+
|
|
.rodata
|
|
.rodata
|
|
.align 8
|
|
.align 8
|
|
.globl sys_call_table
|
|
.globl sys_call_table
|