xref: /linux/arch/sh/include/asm/ftrace.h (revision 621cde16e49b3ecf7d59a8106a20aaebfb4a59a9)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
24b4cf759SPaul Mundt #ifndef __ASM_SH_FTRACE_H
34b4cf759SPaul Mundt #define __ASM_SH_FTRACE_H
44b4cf759SPaul Mundt 
5fad57febSMatt Fleming #ifdef CONFIG_FUNCTION_TRACER
6fad57febSMatt Fleming 
7fad57febSMatt Fleming #define MCOUNT_INSN_SIZE	4 /* sizeof mcount call */
8c68e3206SPaul Mundt #define FTRACE_SYSCALL_MAX	NR_syscalls
9fad57febSMatt Fleming 
104b4cf759SPaul Mundt #ifndef __ASSEMBLY__
114b4cf759SPaul Mundt extern void mcount(void);
12fad57febSMatt Fleming 
13c93bf928SMinfei Huang #define MCOUNT_ADDR		((unsigned long)(mcount))
14fad57febSMatt Fleming 
15fad57febSMatt Fleming #ifdef CONFIG_DYNAMIC_FTRACE
16ca0d1727SMatt Fleming #define CALL_ADDR		((long)(ftrace_call))
17fad57febSMatt Fleming #define STUB_ADDR		((long)(ftrace_stub))
18327933f5SMatt Fleming #define GRAPH_ADDR		((long)(ftrace_graph_call))
19327933f5SMatt Fleming #define CALLER_ADDR		((long)(ftrace_caller))
20fad57febSMatt Fleming 
21ca0d1727SMatt Fleming #define MCOUNT_INSN_OFFSET	((STUB_ADDR - CALL_ADDR) - 4)
22327933f5SMatt Fleming #define GRAPH_INSN_OFFSET	((CALLER_ADDR - GRAPH_ADDR) - 4)
2322f131aaSPaul Mundt 
2422f131aaSPaul Mundt struct dyn_arch_ftrace {
2522f131aaSPaul Mundt 	/* No extra data needed on sh */
2622f131aaSPaul Mundt };
2722f131aaSPaul Mundt 
2822f131aaSPaul Mundt #endif /* CONFIG_DYNAMIC_FTRACE */
294b4cf759SPaul Mundt 
ftrace_call_adjust(unsigned long addr)30fad57febSMatt Fleming static inline unsigned long ftrace_call_adjust(unsigned long addr)
31fad57febSMatt Fleming {
32fad57febSMatt Fleming 	/* 'addr' is the memory table address. */
33fad57febSMatt Fleming 	return addr;
34fad57febSMatt Fleming }
35fad57febSMatt Fleming 
36*9ffc9da6SGeert Uytterhoeven void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr);
37*9ffc9da6SGeert Uytterhoeven 
3836c87199SPaul Mundt #endif /* __ASSEMBLY__ */
3936c87199SPaul Mundt #endif /* CONFIG_FUNCTION_TRACER */
4036c87199SPaul Mundt 
4136c87199SPaul Mundt #ifndef __ASSEMBLY__
4236c87199SPaul Mundt 
43ac4fac8cSPaul Mundt /* arch/sh/kernel/return_address.c */
44ac4fac8cSPaul Mundt extern void *return_address(unsigned int);
45d26cddbbSMatt Fleming 
46eed542d6SAKASHI Takahiro #define ftrace_return_address(n) return_address(n)
47d26cddbbSMatt Fleming 
48*9ffc9da6SGeert Uytterhoeven #ifdef CONFIG_DYNAMIC_FTRACE
49*9ffc9da6SGeert Uytterhoeven extern void arch_ftrace_nmi_enter(void);
50*9ffc9da6SGeert Uytterhoeven extern void arch_ftrace_nmi_exit(void);
51*9ffc9da6SGeert Uytterhoeven #else
arch_ftrace_nmi_enter(void)52*9ffc9da6SGeert Uytterhoeven static inline void arch_ftrace_nmi_enter(void) { }
arch_ftrace_nmi_exit(void)53*9ffc9da6SGeert Uytterhoeven static inline void arch_ftrace_nmi_exit(void) { }
54*9ffc9da6SGeert Uytterhoeven #endif
55*9ffc9da6SGeert Uytterhoeven 
5622f131aaSPaul Mundt #endif /* __ASSEMBLY__ */
57fad57febSMatt Fleming 
584b4cf759SPaul Mundt #endif /* __ASM_SH_FTRACE_H */
59