xref: /linux/arch/arm64/include/asm/ftrace.h (revision 055b1212d141f1f398fca548f8147787c0b6253f)
1819e50e2SAKASHI Takahiro /*
2819e50e2SAKASHI Takahiro  * arch/arm64/include/asm/ftrace.h
3819e50e2SAKASHI Takahiro  *
4819e50e2SAKASHI Takahiro  * Copyright (C) 2013 Linaro Limited
5819e50e2SAKASHI Takahiro  * Author: AKASHI Takahiro <takahiro.akashi@linaro.org>
6819e50e2SAKASHI Takahiro  *
7819e50e2SAKASHI Takahiro  * This program is free software; you can redistribute it and/or modify
8819e50e2SAKASHI Takahiro  * it under the terms of the GNU General Public License version 2 as
9819e50e2SAKASHI Takahiro  * published by the Free Software Foundation.
10819e50e2SAKASHI Takahiro  */
11819e50e2SAKASHI Takahiro #ifndef __ASM_FTRACE_H
12819e50e2SAKASHI Takahiro #define __ASM_FTRACE_H
13819e50e2SAKASHI Takahiro 
14819e50e2SAKASHI Takahiro #include <asm/insn.h>
15819e50e2SAKASHI Takahiro 
16819e50e2SAKASHI Takahiro #define MCOUNT_ADDR		((unsigned long)_mcount)
17819e50e2SAKASHI Takahiro #define MCOUNT_INSN_SIZE	AARCH64_INSN_SIZE
18819e50e2SAKASHI Takahiro 
19819e50e2SAKASHI Takahiro #ifndef __ASSEMBLY__
20*055b1212SAKASHI Takahiro #include <linux/compat.h>
21*055b1212SAKASHI Takahiro 
22819e50e2SAKASHI Takahiro extern void _mcount(unsigned long);
233711784eSAKASHI Takahiro extern void *return_address(unsigned int);
24bd7d38dbSAKASHI Takahiro 
25bd7d38dbSAKASHI Takahiro struct dyn_arch_ftrace {
26bd7d38dbSAKASHI Takahiro 	/* No extra data needed for arm64 */
27bd7d38dbSAKASHI Takahiro };
28bd7d38dbSAKASHI Takahiro 
29bd7d38dbSAKASHI Takahiro extern unsigned long ftrace_graph_call;
30bd7d38dbSAKASHI Takahiro 
31bd7d38dbSAKASHI Takahiro static inline unsigned long ftrace_call_adjust(unsigned long addr)
32bd7d38dbSAKASHI Takahiro {
33bd7d38dbSAKASHI Takahiro 	/*
34bd7d38dbSAKASHI Takahiro 	 * addr is the address of the mcount call instruction.
35bd7d38dbSAKASHI Takahiro 	 * recordmcount does the necessary offset calculation.
36bd7d38dbSAKASHI Takahiro 	 */
37bd7d38dbSAKASHI Takahiro 	return addr;
38bd7d38dbSAKASHI Takahiro }
393711784eSAKASHI Takahiro 
403711784eSAKASHI Takahiro #define ftrace_return_address(n) return_address(n)
41*055b1212SAKASHI Takahiro 
42*055b1212SAKASHI Takahiro /*
43*055b1212SAKASHI Takahiro  * Because AArch32 mode does not share the same syscall table with AArch64,
44*055b1212SAKASHI Takahiro  * tracing compat syscalls may result in reporting bogus syscalls or even
45*055b1212SAKASHI Takahiro  * hang-up, so just do not trace them.
46*055b1212SAKASHI Takahiro  * See kernel/trace/trace_syscalls.c
47*055b1212SAKASHI Takahiro  *
48*055b1212SAKASHI Takahiro  * x86 code says:
49*055b1212SAKASHI Takahiro  * If the user realy wants these, then they should use the
50*055b1212SAKASHI Takahiro  * raw syscall tracepoints with filtering.
51*055b1212SAKASHI Takahiro  */
52*055b1212SAKASHI Takahiro #define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS
53*055b1212SAKASHI Takahiro static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
54*055b1212SAKASHI Takahiro {
55*055b1212SAKASHI Takahiro 	return is_compat_task();
56*055b1212SAKASHI Takahiro }
573711784eSAKASHI Takahiro #endif /* ifndef __ASSEMBLY__ */
58819e50e2SAKASHI Takahiro 
59819e50e2SAKASHI Takahiro #endif /* __ASM_FTRACE_H */
60