blob: 28875a3e41164d73e5b042824d04ff3231a2539d [file] [log] [blame]
Paul Mundt4b4cf752008-09-21 17:17:53 +09001#ifndef __ASM_SH_FTRACE_H
2#define __ASM_SH_FTRACE_H
3
Matt Flemingfad57fe2008-11-12 20:11:47 +09004#ifdef CONFIG_FUNCTION_TRACER
5
6#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */
Paul Mundtc68e3202009-08-25 18:39:33 +09007#define FTRACE_SYSCALL_MAX NR_syscalls
Matt Flemingfad57fe2008-11-12 20:11:47 +09008
Paul Mundt4b4cf752008-09-21 17:17:53 +09009#ifndef __ASSEMBLY__
10extern void mcount(void);
Matt Flemingfad57fe2008-11-12 20:11:47 +090011
12#define MCOUNT_ADDR ((long)(mcount))
13
14#ifdef CONFIG_DYNAMIC_FTRACE
Matt Flemingca0d1722009-06-28 12:53:07 +010015#define CALL_ADDR ((long)(ftrace_call))
Matt Flemingfad57fe2008-11-12 20:11:47 +090016#define STUB_ADDR ((long)(ftrace_stub))
Matt Fleming327933f2009-07-11 00:29:03 +000017#define GRAPH_ADDR ((long)(ftrace_graph_call))
18#define CALLER_ADDR ((long)(ftrace_caller))
Matt Flemingfad57fe2008-11-12 20:11:47 +090019
Matt Flemingca0d1722009-06-28 12:53:07 +010020#define MCOUNT_INSN_OFFSET ((STUB_ADDR - CALL_ADDR) - 4)
Matt Fleming327933f2009-07-11 00:29:03 +000021#define GRAPH_INSN_OFFSET ((CALLER_ADDR - GRAPH_ADDR) - 4)
Paul Mundt22f131a2008-11-27 11:04:43 +090022
23struct dyn_arch_ftrace {
24 /* No extra data needed on sh */
25};
26
27#endif /* CONFIG_DYNAMIC_FTRACE */
Paul Mundt4b4cf752008-09-21 17:17:53 +090028
Matt Flemingfad57fe2008-11-12 20:11:47 +090029static inline unsigned long ftrace_call_adjust(unsigned long addr)
30{
31 /* 'addr' is the memory table address. */
32 return addr;
33}
Matt Flemingfad57fe2008-11-12 20:11:47 +090034
Paul Mundtac4fac82009-10-13 13:10:14 +090035/* arch/sh/kernel/return_address.c */
36extern void *return_address(unsigned int);
Matt Flemingd26cddb2009-10-11 17:56:17 +010037
38#define HAVE_ARCH_CALLER_ADDR
39
Matt Flemingd26cddb2009-10-11 17:56:17 +010040#define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
Paul Mundtac4fac82009-10-13 13:10:14 +090041#define CALLER_ADDR1 ((unsigned long)return_address(1))
42#define CALLER_ADDR2 ((unsigned long)return_address(2))
43#define CALLER_ADDR3 ((unsigned long)return_address(3))
44#define CALLER_ADDR4 ((unsigned long)return_address(4))
45#define CALLER_ADDR5 ((unsigned long)return_address(5))
46#define CALLER_ADDR6 ((unsigned long)return_address(6))
Matt Flemingd26cddb2009-10-11 17:56:17 +010047
Paul Mundt22f131a2008-11-27 11:04:43 +090048#endif /* __ASSEMBLY__ */
Matt Flemingfad57fe2008-11-12 20:11:47 +090049#endif /* CONFIG_FUNCTION_TRACER */
50
Paul Mundt4b4cf752008-09-21 17:17:53 +090051#endif /* __ASM_SH_FTRACE_H */