diff options
Diffstat (limited to 'tools/perf/util/thread.h')
-rw-r--r-- | tools/perf/util/thread.h | 81 |
1 files changed, 73 insertions, 8 deletions
diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h index 32aea3c1c2ad..dcf70303e58e 100644 --- a/tools/perf/util/thread.h +++ b/tools/perf/util/thread.h | |||
@@ -1,22 +1,87 @@ | |||
1 | #ifndef __PERF_THREAD_H | ||
2 | #define __PERF_THREAD_H | ||
3 | |||
1 | #include <linux/rbtree.h> | 4 | #include <linux/rbtree.h> |
2 | #include <linux/list.h> | ||
3 | #include <unistd.h> | 5 | #include <unistd.h> |
4 | #include "symbol.h" | 6 | #include "symbol.h" |
5 | 7 | ||
8 | struct map_groups { | ||
9 | struct rb_root maps[MAP__NR_TYPES]; | ||
10 | struct list_head removed_maps[MAP__NR_TYPES]; | ||
11 | }; | ||
12 | |||
13 | size_t __map_groups__fprintf_maps(struct map_groups *self, | ||
14 | enum map_type type, FILE *fp); | ||
15 | |||
6 | struct thread { | 16 | struct thread { |
7 | struct rb_node rb_node; | 17 | struct rb_node rb_node; |
8 | struct list_head maps; | 18 | struct map_groups mg; |
9 | pid_t pid; | 19 | pid_t pid; |
10 | char shortname[3]; | 20 | char shortname[3]; |
21 | bool comm_set; | ||
11 | char *comm; | 22 | char *comm; |
23 | int comm_len; | ||
12 | }; | 24 | }; |
13 | 25 | ||
26 | void map_groups__init(struct map_groups *self); | ||
14 | int thread__set_comm(struct thread *self, const char *comm); | 27 | int thread__set_comm(struct thread *self, const char *comm); |
15 | struct thread * | 28 | int thread__comm_len(struct thread *self); |
16 | threads__findnew(pid_t pid, struct rb_root *threads, struct thread **last_match); | 29 | struct thread *perf_session__findnew(struct perf_session *self, pid_t pid); |
17 | struct thread * | ||
18 | register_idle_thread(struct rb_root *threads, struct thread **last_match); | ||
19 | void thread__insert_map(struct thread *self, struct map *map); | 30 | void thread__insert_map(struct thread *self, struct map *map); |
20 | int thread__fork(struct thread *self, struct thread *parent); | 31 | int thread__fork(struct thread *self, struct thread *parent); |
21 | struct map *thread__find_map(struct thread *self, u64 ip); | 32 | size_t map_groups__fprintf_maps(struct map_groups *self, FILE *fp); |
22 | size_t threads__fprintf(FILE *fp, struct rb_root *threads); | 33 | size_t perf_session__fprintf(struct perf_session *self, FILE *fp); |
34 | |||
35 | void maps__insert(struct rb_root *maps, struct map *map); | ||
36 | struct map *maps__find(struct rb_root *maps, u64 addr); | ||
37 | |||
38 | static inline void map_groups__insert(struct map_groups *self, struct map *map) | ||
39 | { | ||
40 | maps__insert(&self->maps[map->type], map); | ||
41 | } | ||
42 | |||
43 | static inline struct map *map_groups__find(struct map_groups *self, | ||
44 | enum map_type type, u64 addr) | ||
45 | { | ||
46 | return maps__find(&self->maps[type], addr); | ||
47 | } | ||
48 | |||
49 | static inline struct map *thread__find_map(struct thread *self, | ||
50 | enum map_type type, u64 addr) | ||
51 | { | ||
52 | return self ? map_groups__find(&self->mg, type, addr) : NULL; | ||
53 | } | ||
54 | |||
55 | void thread__find_addr_map(struct thread *self, | ||
56 | struct perf_session *session, u8 cpumode, | ||
57 | enum map_type type, u64 addr, | ||
58 | struct addr_location *al); | ||
59 | |||
60 | void thread__find_addr_location(struct thread *self, | ||
61 | struct perf_session *session, u8 cpumode, | ||
62 | enum map_type type, u64 addr, | ||
63 | struct addr_location *al, | ||
64 | symbol_filter_t filter); | ||
65 | struct symbol *map_groups__find_symbol(struct map_groups *self, | ||
66 | enum map_type type, u64 addr, | ||
67 | symbol_filter_t filter); | ||
68 | |||
69 | static inline struct symbol *map_groups__find_function(struct map_groups *self, | ||
70 | u64 addr, | ||
71 | symbol_filter_t filter) | ||
72 | { | ||
73 | return map_groups__find_symbol(self, MAP__FUNCTION, addr, filter); | ||
74 | } | ||
75 | |||
76 | struct map *map_groups__find_by_name(struct map_groups *self, | ||
77 | enum map_type type, const char *name); | ||
78 | |||
79 | int __map_groups__create_kernel_maps(struct map_groups *self, | ||
80 | struct map *vmlinux_maps[MAP__NR_TYPES], | ||
81 | struct dso *kernel); | ||
82 | int map_groups__create_kernel_maps(struct map_groups *self, | ||
83 | struct map *vmlinux_maps[MAP__NR_TYPES]); | ||
84 | |||
85 | struct map *map_groups__new_module(struct map_groups *self, u64 start, | ||
86 | const char *filename); | ||
87 | #endif /* __PERF_THREAD_H */ | ||