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