xref: /linux/arch/sh/include/asm/ftrace.h (revision 36c871992697eaaf88a3682c2c3003a41c54b8c0)
14b4cf759SPaul Mundt #ifndef __ASM_SH_FTRACE_H
24b4cf759SPaul Mundt #define __ASM_SH_FTRACE_H
34b4cf759SPaul Mundt 
4fad57febSMatt Fleming #ifdef CONFIG_FUNCTION_TRACER
5fad57febSMatt Fleming 
6fad57febSMatt Fleming #define MCOUNT_INSN_SIZE	4 /* sizeof mcount call */
7c68e3206SPaul Mundt #define FTRACE_SYSCALL_MAX	NR_syscalls
8fad57febSMatt Fleming 
94b4cf759SPaul Mundt #ifndef __ASSEMBLY__
104b4cf759SPaul Mundt extern void mcount(void);
11fad57febSMatt Fleming 
12fad57febSMatt Fleming #define MCOUNT_ADDR		((long)(mcount))
13fad57febSMatt Fleming 
14fad57febSMatt Fleming #ifdef CONFIG_DYNAMIC_FTRACE
15ca0d1727SMatt Fleming #define CALL_ADDR		((long)(ftrace_call))
16fad57febSMatt Fleming #define STUB_ADDR		((long)(ftrace_stub))
17327933f5SMatt Fleming #define GRAPH_ADDR		((long)(ftrace_graph_call))
18327933f5SMatt Fleming #define CALLER_ADDR		((long)(ftrace_caller))
19fad57febSMatt Fleming 
20ca0d1727SMatt Fleming #define MCOUNT_INSN_OFFSET	((STUB_ADDR - CALL_ADDR) - 4)
21327933f5SMatt Fleming #define GRAPH_INSN_OFFSET	((CALLER_ADDR - GRAPH_ADDR) - 4)
2222f131aaSPaul Mundt 
2322f131aaSPaul Mundt struct dyn_arch_ftrace {
2422f131aaSPaul Mundt 	/* No extra data needed on sh */
2522f131aaSPaul Mundt };
2622f131aaSPaul Mundt 
2722f131aaSPaul Mundt #endif /* CONFIG_DYNAMIC_FTRACE */
284b4cf759SPaul Mundt 
29fad57febSMatt Fleming static inline unsigned long ftrace_call_adjust(unsigned long addr)
30fad57febSMatt Fleming {
31fad57febSMatt Fleming 	/* 'addr' is the memory table address. */
32fad57febSMatt Fleming 	return addr;
33fad57febSMatt Fleming }
34fad57febSMatt Fleming 
35*36c87199SPaul Mundt #endif /* __ASSEMBLY__ */
36*36c87199SPaul Mundt #endif /* CONFIG_FUNCTION_TRACER */
37*36c87199SPaul Mundt 
38*36c87199SPaul Mundt #ifndef __ASSEMBLY__
39*36c87199SPaul Mundt 
40ac4fac8cSPaul Mundt /* arch/sh/kernel/return_address.c */
41ac4fac8cSPaul Mundt extern void *return_address(unsigned int);
42d26cddbbSMatt Fleming 
43d26cddbbSMatt Fleming #define HAVE_ARCH_CALLER_ADDR
44d26cddbbSMatt Fleming 
45d26cddbbSMatt Fleming #define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
46ac4fac8cSPaul Mundt #define CALLER_ADDR1 ((unsigned long)return_address(1))
47ac4fac8cSPaul Mundt #define CALLER_ADDR2 ((unsigned long)return_address(2))
48ac4fac8cSPaul Mundt #define CALLER_ADDR3 ((unsigned long)return_address(3))
49ac4fac8cSPaul Mundt #define CALLER_ADDR4 ((unsigned long)return_address(4))
50ac4fac8cSPaul Mundt #define CALLER_ADDR5 ((unsigned long)return_address(5))
51ac4fac8cSPaul Mundt #define CALLER_ADDR6 ((unsigned long)return_address(6))
52d26cddbbSMatt Fleming 
5322f131aaSPaul Mundt #endif /* __ASSEMBLY__ */
54fad57febSMatt Fleming 
554b4cf759SPaul Mundt #endif /* __ASM_SH_FTRACE_H */
56