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 Flemingstatic 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 Uytterhoevenstatic inline void arch_ftrace_nmi_enter(void) { } arch_ftrace_nmi_exit(void)53*9ffc9da6SGeert Uytterhoevenstatic 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