2014-04-30 18:54:33 +09:00
/*
* arch / arm64 / include / asm / ftrace . h
*
* Copyright ( C ) 2013 Linaro Limited
* Author : AKASHI Takahiro < takahiro . akashi @ linaro . org >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef __ASM_FTRACE_H
# define __ASM_FTRACE_H
# include <asm/insn.h>
# define MCOUNT_ADDR ((unsigned long)_mcount)
# define MCOUNT_INSN_SIZE AARCH64_INSN_SIZE
# ifndef __ASSEMBLY__
2014-04-30 10:54:36 +01:00
# include <linux/compat.h>
2014-04-30 18:54:33 +09:00
extern void _mcount ( unsigned long ) ;
2014-04-30 10:54:35 +01:00
extern void * return_address ( unsigned int ) ;
2014-04-30 10:54:34 +01:00
struct dyn_arch_ftrace {
/* No extra data needed for arm64 */
} ;
extern unsigned long ftrace_graph_call ;
static inline unsigned long ftrace_call_adjust ( unsigned long addr )
{
/*
* addr is the address of the mcount call instruction .
* recordmcount does the necessary offset calculation .
*/
return addr ;
}
2014-04-30 10:54:35 +01:00
# define ftrace_return_address(n) return_address(n)
2014-04-30 10:54:36 +01:00
/*
* Because AArch32 mode does not share the same syscall table with AArch64 ,
* tracing compat syscalls may result in reporting bogus syscalls or even
* hang - up , so just do not trace them .
* See kernel / trace / trace_syscalls . c
*
* x86 code says :
* If the user realy wants these , then they should use the
* raw syscall tracepoints with filtering .
*/
# define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS
static inline bool arch_trace_is_compat_syscall ( struct pt_regs * regs )
{
return is_compat_task ( ) ;
}
2014-04-30 10:54:35 +01:00
# endif /* ifndef __ASSEMBLY__ */
2014-04-30 18:54:33 +09:00
# endif /* __ASM_FTRACE_H */