1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __ASM_SH_FTRACE_H 3 #define __ASM_SH_FTRACE_H 4 5 #ifdef CONFIG_FUNCTION_TRACER 6 7 #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ 8 #define FTRACE_SYSCALL_MAX NR_syscalls 9 10 #ifndef __ASSEMBLY__ 11 extern void mcount(void); 12 13 #define MCOUNT_ADDR ((unsigned long)(mcount)) 14 15 #ifdef CONFIG_DYNAMIC_FTRACE 16 #define CALL_ADDR ((long)(ftrace_call)) 17 #define STUB_ADDR ((long)(ftrace_stub)) 18 #define GRAPH_ADDR ((long)(ftrace_graph_call)) 19 #define CALLER_ADDR ((long)(ftrace_caller)) 20 21 #define MCOUNT_INSN_OFFSET ((STUB_ADDR - CALL_ADDR) - 4) 22 #define GRAPH_INSN_OFFSET ((CALLER_ADDR - GRAPH_ADDR) - 4) 23 24 struct dyn_arch_ftrace { 25 /* No extra data needed on sh */ 26 }; 27 28 #endif /* CONFIG_DYNAMIC_FTRACE */ 29 ftrace_call_adjust(unsigned long addr)30static inline unsigned long ftrace_call_adjust(unsigned long addr) 31 { 32 /* 'addr' is the memory table address. */ 33 return addr; 34 } 35 36 void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr); 37 38 #endif /* __ASSEMBLY__ */ 39 #endif /* CONFIG_FUNCTION_TRACER */ 40 41 #ifndef __ASSEMBLY__ 42 43 /* arch/sh/kernel/return_address.c */ 44 extern void *return_address(unsigned int); 45 46 #define ftrace_return_address(n) return_address(n) 47 48 #ifdef CONFIG_DYNAMIC_FTRACE 49 extern void arch_ftrace_nmi_enter(void); 50 extern void arch_ftrace_nmi_exit(void); 51 #else arch_ftrace_nmi_enter(void)52static inline void arch_ftrace_nmi_enter(void) { } arch_ftrace_nmi_exit(void)53static inline void arch_ftrace_nmi_exit(void) { } 54 #endif 55 56 #endif /* __ASSEMBLY__ */ 57 58 #endif /* __ASM_SH_FTRACE_H */ 59