• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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__
14  extern void mcount(void);
15  extern void __gnu_mcount_nc(void);
16  
17  #ifdef CONFIG_DYNAMIC_FTRACE
18  struct dyn_arch_ftrace {
19  };
20  
ftrace_call_adjust(unsigned long addr)21  static inline unsigned long ftrace_call_adjust(unsigned long addr)
22  {
23  	/* With Thumb-2, the recorded addresses have the lsb set */
24  	return addr & ~1;
25  }
26  
27  extern void ftrace_caller_old(void);
28  extern void ftrace_call_old(void);
29  #endif
30  
31  #endif
32  
33  #endif
34  
35  #ifndef __ASSEMBLY__
36  
37  #if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
38  /*
39   * return_address uses walk_stackframe to do it's work.  If both
40   * CONFIG_FRAME_POINTER=y and CONFIG_ARM_UNWIND=y walk_stackframe uses unwind
41   * information.  For this to work in the function tracer many functions would
42   * have to be marked with __notrace.  So for now just depend on
43   * !CONFIG_ARM_UNWIND.
44   */
45  
46  void *return_address(unsigned int);
47  
48  #else
49  
return_address(unsigned int level)50  static inline void *return_address(unsigned int level)
51  {
52  	return NULL;
53  }
54  
55  #endif
56  
57  #define ftrace_return_address(n) return_address(n)
58  
59  #define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
60  
arch_syscall_match_sym_name(const char * sym,const char * name)61  static inline bool arch_syscall_match_sym_name(const char *sym,
62  					       const char *name)
63  {
64  	if (!strcmp(sym, "sys_mmap2"))
65  		sym = "sys_mmap_pgoff";
66  	else if (!strcmp(sym, "sys_statfs64_wrapper"))
67  		sym = "sys_statfs64";
68  	else if (!strcmp(sym, "sys_fstatfs64_wrapper"))
69  		sym = "sys_fstatfs64";
70  	else if (!strcmp(sym, "sys_arm_fadvise64_64"))
71  		sym = "sys_fadvise64_64";
72  
73  	/* Ignore case since sym may start with "SyS" instead of "sys" */
74  	return !strcasecmp(sym, name);
75  }
76  
77  #endif /* ifndef __ASSEMBLY__ */
78  
79  #endif /* _ASM_ARM_FTRACE */
80