xref: /openbmc/linux/arch/ia64/include/asm/ftrace.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2d3e75ff1SShaohua Li #ifndef _ASM_IA64_FTRACE_H
3d3e75ff1SShaohua Li #define _ASM_IA64_FTRACE_H
4d3e75ff1SShaohua Li 
5d3e75ff1SShaohua Li #ifdef CONFIG_FUNCTION_TRACER
6d3e75ff1SShaohua Li #define MCOUNT_INSN_SIZE        32 /* sizeof mcount call */
7d3e75ff1SShaohua Li 
8d3e75ff1SShaohua Li #ifndef __ASSEMBLY__
9d3e75ff1SShaohua Li extern void _mcount(unsigned long pfs, unsigned long r1, unsigned long b0, unsigned long r0);
10d3e75ff1SShaohua Li #define mcount _mcount
11d3e75ff1SShaohua Li 
12a14a07b8SShaohua Li /* In IA64, MCOUNT_ADDR is set in link time, so it's not a constant at compile time */
13a14a07b8SShaohua Li #define MCOUNT_ADDR (((struct fnptr *)mcount)->ip)
14a14a07b8SShaohua Li #define FTRACE_ADDR (((struct fnptr *)ftrace_caller)->ip)
15a14a07b8SShaohua Li 
ftrace_call_adjust(unsigned long addr)16a14a07b8SShaohua Li static inline unsigned long ftrace_call_adjust(unsigned long addr)
17a14a07b8SShaohua Li {
18a14a07b8SShaohua Li 	/* second bundle, insn 2 */
19a14a07b8SShaohua Li 	return addr - 0x12;
20a14a07b8SShaohua Li }
21a14a07b8SShaohua Li 
22a14a07b8SShaohua Li struct dyn_arch_ftrace {
23a14a07b8SShaohua Li };
24d3e75ff1SShaohua Li #endif
25d3e75ff1SShaohua Li 
26d3e75ff1SShaohua Li #endif /* CONFIG_FUNCTION_TRACER */
27d3e75ff1SShaohua Li 
28d3e75ff1SShaohua Li #endif /* _ASM_IA64_FTRACE_H */
29