Commit | Line | Data |
---|---|---|
395a59d0 AS |
1 | #ifndef _ASM_ARM_FTRACE |
2 | #define _ASM_ARM_FTRACE | |
3 | ||
606576ce | 4 | #ifdef CONFIG_FUNCTION_TRACER |
395a59d0 AS |
5 | #define MCOUNT_ADDR ((long)(mcount)) |
6 | #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ | |
7 | ||
8 | #ifndef __ASSEMBLY__ | |
9 | extern void mcount(void); | |
181f817e | 10 | extern void __gnu_mcount_nc(void); |
395a59d0 AS |
11 | #endif |
12 | ||
13 | #endif | |
14 | ||
4bf1fa5a UKK |
15 | #ifndef __ASSEMBLY__ |
16 | ||
17 | #if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) | |
18 | /* | |
19 | * return_address uses walk_stackframe to do it's work. If both | |
20 | * CONFIG_FRAME_POINTER=y and CONFIG_ARM_UNWIND=y walk_stackframe uses unwind | |
21 | * information. For this to work in the function tracer many functions would | |
22 | * have to be marked with __notrace. So for now just depend on | |
23 | * !CONFIG_ARM_UNWIND. | |
24 | */ | |
25 | ||
26 | void *return_address(unsigned int); | |
27 | ||
28 | #else | |
29 | ||
30 | extern inline void *return_address(unsigned int level) | |
31 | { | |
32 | return NULL; | |
33 | } | |
34 | ||
35 | #endif | |
36 | ||
37 | #define HAVE_ARCH_CALLER_ADDR | |
38 | ||
39 | #define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) | |
40 | #define CALLER_ADDR1 ((unsigned long)return_address(1)) | |
41 | #define CALLER_ADDR2 ((unsigned long)return_address(2)) | |
42 | #define CALLER_ADDR3 ((unsigned long)return_address(3)) | |
43 | #define CALLER_ADDR4 ((unsigned long)return_address(4)) | |
44 | #define CALLER_ADDR5 ((unsigned long)return_address(5)) | |
45 | #define CALLER_ADDR6 ((unsigned long)return_address(6)) | |
46 | ||
47 | #endif /* ifndef __ASSEMBLY__ */ | |
48 | ||
395a59d0 | 49 | #endif /* _ASM_ARM_FTRACE */ |