diff options
Diffstat (limited to 'arch/arm/include/asm/ftrace.h')
-rw-r--r-- | arch/arm/include/asm/ftrace.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/arm/include/asm/ftrace.h b/arch/arm/include/asm/ftrace.h index 39c8bc1a006a..103f7ee97313 100644 --- a/arch/arm/include/asm/ftrace.h +++ b/arch/arm/include/asm/ftrace.h | |||
@@ -7,8 +7,43 @@ | |||
7 | 7 | ||
8 | #ifndef __ASSEMBLY__ | 8 | #ifndef __ASSEMBLY__ |
9 | extern void mcount(void); | 9 | extern void mcount(void); |
10 | extern void __gnu_mcount_nc(void); | ||
10 | #endif | 11 | #endif |
11 | 12 | ||
12 | #endif | 13 | #endif |
13 | 14 | ||
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 | |||
14 | #endif /* _ASM_ARM_FTRACE */ | 49 | #endif /* _ASM_ARM_FTRACE */ |