Commit d3e75ff1 authored by Shaohua Li's avatar Shaohua Li Committed by Ingo Molnar

ftrace, ia64: IA64 static ftrace support

IA64 ftrace suppport. In IA64, below code will be added in each function
if -pg is enabled.

alloc r40=ar.pfs,12,8,0
mov r43=r0;;
mov r42=b0
mov r41=r1
nop.i 0x0
br.call.sptk.many b0 = _mcount;;
Signed-off-by: default avatarShaohua Li <shaohua.li@intel.com>
Signed-off-by: default avatarSteven Rostedt <srostedt@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 418071eb
...@@ -21,6 +21,7 @@ config IA64 ...@@ -21,6 +21,7 @@ config IA64
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_KPROBES select HAVE_KPROBES
select HAVE_KRETPROBES select HAVE_KRETPROBES
select HAVE_FUNCTION_TRACER
select HAVE_DMA_ATTRS select HAVE_DMA_ATTRS
select HAVE_KVM select HAVE_KVM
select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRACEHOOK
......
#ifndef _ASM_IA64_FTRACE_H
#define _ASM_IA64_FTRACE_H
#ifdef CONFIG_FUNCTION_TRACER
#define MCOUNT_INSN_SIZE 32 /* sizeof mcount call */
#ifndef __ASSEMBLY__
extern void _mcount(unsigned long pfs, unsigned long r1, unsigned long b0, unsigned long r0);
#define mcount _mcount
#endif
#endif /* CONFIG_FUNCTION_TRACER */
#endif /* _ASM_IA64_FTRACE_H */
...@@ -47,6 +47,7 @@ ...@@ -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) ...@@ -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
......
...@@ -112,3 +112,9 @@ EXPORT_SYMBOL_GPL(esi_call_phys); ...@@ -112,3 +112,9 @@ EXPORT_SYMBOL_GPL(esi_call_phys);
#endif #endif
extern char ia64_ivt[]; extern char ia64_ivt[];
EXPORT_SYMBOL(ia64_ivt); EXPORT_SYMBOL(ia64_ivt);
#include <asm/ftrace.h>
#ifdef CONFIG_FUNCTION_TRACER
/* mcount is defined in assembly */
EXPORT_SYMBOL(_mcount);
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment