blob: f379881d5cc3feba90ebda6a873fb4fb950a1cdf [file] [log] [blame]
Abhishek Sagar395a59d2008-06-21 23:47:27 +05301#ifndef _ASM_ARM_FTRACE
2#define _ASM_ARM_FTRACE
3
Abel Vesa620176f2017-05-26 21:49:47 +01004#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
5#define ARCH_SUPPORTS_FTRACE_OPS 1
6#endif
7
Steven Rostedt606576c2008-10-06 19:06:12 -04008#ifdef CONFIG_FUNCTION_TRACER
Rabin Vincent3b6c2232010-08-10 19:43:28 +01009#define MCOUNT_ADDR ((unsigned long)(__gnu_mcount_nc))
Abhishek Sagar395a59d2008-06-21 23:47:27 +053010#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */
11
12#ifndef __ASSEMBLY__
13extern void mcount(void);
Uwe Kleine-König181f8172009-08-13 20:38:16 +020014extern void __gnu_mcount_nc(void);
Rabin Vincent3b6c2232010-08-10 19:43:28 +010015
16#ifdef CONFIG_DYNAMIC_FTRACE
17struct dyn_arch_ftrace {
18#ifdef CONFIG_OLD_MCOUNT
19 bool old_mcount;
20#endif
21};
22
23static inline unsigned long ftrace_call_adjust(unsigned long addr)
24{
Rabin Vincent72dc43a2010-08-10 19:52:35 +010025 /* With Thumb-2, the recorded addresses have the lsb set */
26 return addr & ~1;
Rabin Vincent3b6c2232010-08-10 19:43:28 +010027}
28
29extern void ftrace_caller_old(void);
30extern void ftrace_call_old(void);
31#endif
32
Abhishek Sagar395a59d2008-06-21 23:47:27 +053033#endif
34
35#endif
36
Uwe Kleine-König4bf1fa52009-07-21 09:56:27 +010037#ifndef __ASSEMBLY__
38
39#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
40/*
41 * return_address uses walk_stackframe to do it's work. If both
42 * CONFIG_FRAME_POINTER=y and CONFIG_ARM_UNWIND=y walk_stackframe uses unwind
43 * information. For this to work in the function tracer many functions would
44 * have to be marked with __notrace. So for now just depend on
45 * !CONFIG_ARM_UNWIND.
46 */
47
48void *return_address(unsigned int);
49
50#else
51
Behan Websteraeea3592014-09-24 01:06:46 +010052static inline void *return_address(unsigned int level)
Uwe Kleine-König4bf1fa52009-07-21 09:56:27 +010053{
54 return NULL;
55}
56
57#endif
58
Steven Rostedt1712ef42014-06-16 15:25:29 +010059#define ftrace_return_address(n) return_address(n)
Uwe Kleine-König4bf1fa52009-07-21 09:56:27 +010060
Rabin Vincent270c8cf2016-11-23 13:02:32 +010061#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
62
63static inline bool arch_syscall_match_sym_name(const char *sym,
64 const char *name)
65{
66 if (!strcmp(sym, "sys_mmap2"))
67 sym = "sys_mmap_pgoff";
68 else if (!strcmp(sym, "sys_statfs64_wrapper"))
69 sym = "sys_statfs64";
70 else if (!strcmp(sym, "sys_fstatfs64_wrapper"))
71 sym = "sys_fstatfs64";
72 else if (!strcmp(sym, "sys_arm_fadvise64_64"))
73 sym = "sys_fadvise64_64";
74
75 /* Ignore case since sym may start with "SyS" instead of "sys" */
76 return !strcasecmp(sym, name);
77}
78
Uwe Kleine-König4bf1fa52009-07-21 09:56:27 +010079#endif /* ifndef __ASSEMBLY__ */
80
Abhishek Sagar395a59d2008-06-21 23:47:27 +053081#endif /* _ASM_ARM_FTRACE */