linux/arch/arm/include/asm/ftrace.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_ARM_FTRACE
   3#define _ASM_ARM_FTRACE
   4
   5#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
   6#define ARCH_SUPPORTS_FTRACE_OPS 1
   7#endif
   8
   9#ifdef CONFIG_FUNCTION_TRACER
  10#define MCOUNT_ADDR             ((unsigned long)(__gnu_mcount_nc))
  11#define MCOUNT_INSN_SIZE        4 /* sizeof mcount call */
  12
  13#ifndef __ASSEMBLY__
  14extern void mcount(void);
  15extern void __gnu_mcount_nc(void);
  16
  17#ifdef CONFIG_DYNAMIC_FTRACE
  18struct dyn_arch_ftrace {
  19#ifdef CONFIG_OLD_MCOUNT
  20        bool    old_mcount;
  21#endif
  22};
  23
  24static inline unsigned long ftrace_call_adjust(unsigned long addr)
  25{
  26        /* With Thumb-2, the recorded addresses have the lsb set */
  27        return addr & ~1;
  28}
  29
  30extern void ftrace_caller_old(void);
  31extern void ftrace_call_old(void);
  32#endif
  33
  34#endif
  35
  36#endif
  37
  38#ifndef __ASSEMBLY__
  39
  40#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
  41/*
  42 * return_address uses walk_stackframe to do it's work.  If both
  43 * CONFIG_FRAME_POINTER=y and CONFIG_ARM_UNWIND=y walk_stackframe uses unwind
  44 * information.  For this to work in the function tracer many functions would
  45 * have to be marked with __notrace.  So for now just depend on
  46 * !CONFIG_ARM_UNWIND.
  47 */
  48
  49void *return_address(unsigned int);
  50
  51#else
  52
  53static inline void *return_address(unsigned int level)
  54{
  55        return NULL;
  56}
  57
  58#endif
  59
  60#define ftrace_return_address(n) return_address(n)
  61
  62#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
  63
  64static inline bool arch_syscall_match_sym_name(const char *sym,
  65                                               const char *name)
  66{
  67        if (!strcmp(sym, "sys_mmap2"))
  68                sym = "sys_mmap_pgoff";
  69        else if (!strcmp(sym, "sys_statfs64_wrapper"))
  70                sym = "sys_statfs64";
  71        else if (!strcmp(sym, "sys_fstatfs64_wrapper"))
  72                sym = "sys_fstatfs64";
  73        else if (!strcmp(sym, "sys_arm_fadvise64_64"))
  74                sym = "sys_fadvise64_64";
  75
  76        /* Ignore case since sym may start with "SyS" instead of "sys" */
  77        return !strcasecmp(sym, name);
  78}
  79
  80#endif /* ifndef __ASSEMBLY__ */
  81
  82#endif /* _ASM_ARM_FTRACE */
  83