18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef __ASM_SH_FTRACE_H
38c2ecf20Sopenharmony_ci#define __ASM_SH_FTRACE_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#ifdef CONFIG_FUNCTION_TRACER
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#define MCOUNT_INSN_SIZE	4 /* sizeof mcount call */
88c2ecf20Sopenharmony_ci#define FTRACE_SYSCALL_MAX	NR_syscalls
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#ifndef __ASSEMBLY__
118c2ecf20Sopenharmony_ciextern void mcount(void);
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#define MCOUNT_ADDR		((unsigned long)(mcount))
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#ifdef CONFIG_DYNAMIC_FTRACE
168c2ecf20Sopenharmony_ci#define CALL_ADDR		((long)(ftrace_call))
178c2ecf20Sopenharmony_ci#define STUB_ADDR		((long)(ftrace_stub))
188c2ecf20Sopenharmony_ci#define GRAPH_ADDR		((long)(ftrace_graph_call))
198c2ecf20Sopenharmony_ci#define CALLER_ADDR		((long)(ftrace_caller))
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci#define MCOUNT_INSN_OFFSET	((STUB_ADDR - CALL_ADDR) - 4)
228c2ecf20Sopenharmony_ci#define GRAPH_INSN_OFFSET	((CALLER_ADDR - GRAPH_ADDR) - 4)
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_cistruct dyn_arch_ftrace {
258c2ecf20Sopenharmony_ci	/* No extra data needed on sh */
268c2ecf20Sopenharmony_ci};
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#endif /* CONFIG_DYNAMIC_FTRACE */
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_cistatic inline unsigned long ftrace_call_adjust(unsigned long addr)
318c2ecf20Sopenharmony_ci{
328c2ecf20Sopenharmony_ci	/* 'addr' is the memory table address. */
338c2ecf20Sopenharmony_ci	return addr;
348c2ecf20Sopenharmony_ci}
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci#endif /* __ASSEMBLY__ */
378c2ecf20Sopenharmony_ci#endif /* CONFIG_FUNCTION_TRACER */
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci#ifndef __ASSEMBLY__
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci/* arch/sh/kernel/return_address.c */
428c2ecf20Sopenharmony_ciextern void *return_address(unsigned int);
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci#define ftrace_return_address(n) return_address(n)
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci#endif /* __ASSEMBLY__ */
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci#endif /* __ASM_SH_FTRACE_H */
49