]>
Commit | Line | Data |
---|---|---|
16444a8a ACM |
1 | #ifndef _LINUX_FTRACE_H |
2 | #define _LINUX_FTRACE_H | |
3 | ||
4 | #ifdef CONFIG_FTRACE | |
5 | ||
6 | #include <linux/linkage.h> | |
7 | ||
8 | #define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) | |
9 | #define CALLER_ADDR1 ((unsigned long)__builtin_return_address(1)) | |
10 | #define CALLER_ADDR2 ((unsigned long)__builtin_return_address(2)) | |
11 | ||
12 | typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip); | |
13 | ||
14 | struct ftrace_ops { | |
15 | ftrace_func_t func; | |
16 | struct ftrace_ops *next; | |
17 | }; | |
18 | ||
19 | /* | |
20 | * The ftrace_ops must be a static and should also | |
21 | * be read_mostly. These functions do modify read_mostly variables | |
22 | * so use them sparely. Never free an ftrace_op or modify the | |
23 | * next pointer after it has been registered. Even after unregistering | |
24 | * it, the next pointer may still be used internally. | |
25 | */ | |
26 | int register_ftrace_function(struct ftrace_ops *ops); | |
27 | int unregister_ftrace_function(struct ftrace_ops *ops); | |
28 | void clear_ftrace_function(void); | |
29 | ||
30 | extern void ftrace_stub(unsigned long a0, unsigned long a1); | |
31 | extern void mcount(void); | |
32 | ||
33 | #else /* !CONFIG_FTRACE */ | |
34 | # define register_ftrace_function(ops) do { } while (0) | |
35 | # define unregister_ftrace_function(ops) do { } while (0) | |
36 | # define clear_ftrace_function(ops) do { } while (0) | |
37 | #endif /* CONFIG_FTRACE */ | |
38 | #endif /* _LINUX_FTRACE_H */ |