aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/thread.h
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2009-11-27 13:29:20 -0500
committerIngo Molnar <mingo@elte.hu>2009-11-27 14:22:00 -0500
commit95011c600740837288a3b34b411244a4d9157c4e (patch)
treef52496d2d378a338e7b0eee9b75e627bdfc4d2f1 /tools/perf/util/thread.h
parent23ea4a3fadc6b1692dec935397ea15e2affc1cba (diff)
perf symbols: Support multiple symtabs in struct thread
Making the routines that were so far specific to the kernel maps useful for all threads. This is done by making the kernel maps be contained in a kernel "thread". This gets the kernel specific routines closer to the userspace counterparts, which will help in reducing the boilerplate for resolving a symbol, as will be demonstrated in the next patches. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1259346563-12568-9-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/thread.h')
-rw-r--r--tools/perf/util/thread.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h
index 54580bb80008..3bdd9b2276f0 100644
--- a/tools/perf/util/thread.h
+++ b/tools/perf/util/thread.h
@@ -7,20 +7,22 @@
7 7
8struct thread { 8struct thread {
9 struct rb_node rb_node; 9 struct rb_node rb_node;
10 struct rb_root maps; 10 struct rb_root maps[MAP__NR_TYPES];
11 struct list_head removed_maps; 11 struct list_head removed_maps[MAP__NR_TYPES];
12 pid_t pid; 12 pid_t pid;
13 char shortname[3]; 13 char shortname[3];
14 char *comm; 14 char *comm;
15 int comm_len; 15 int comm_len;
16}; 16};
17 17
18void thread__init(struct thread *self, pid_t pid);
18int thread__set_comm(struct thread *self, const char *comm); 19int thread__set_comm(struct thread *self, const char *comm);
19int thread__comm_len(struct thread *self); 20int thread__comm_len(struct thread *self);
20struct thread *threads__findnew(pid_t pid); 21struct thread *threads__findnew(pid_t pid);
21struct thread *register_idle_thread(void); 22struct thread *register_idle_thread(void);
22void thread__insert_map(struct thread *self, struct map *map); 23void thread__insert_map(struct thread *self, struct map *map);
23int thread__fork(struct thread *self, struct thread *parent); 24int thread__fork(struct thread *self, struct thread *parent);
25size_t thread__fprintf_maps(struct thread *self, FILE *fp);
24size_t threads__fprintf(FILE *fp); 26size_t threads__fprintf(FILE *fp);
25 27
26void maps__insert(struct rb_root *maps, struct map *map); 28void maps__insert(struct rb_root *maps, struct map *map);
@@ -29,9 +31,14 @@ struct map *maps__find(struct rb_root *maps, u64 ip);
29struct symbol *kernel_maps__find_function(const u64 ip, struct map **mapp, 31struct symbol *kernel_maps__find_function(const u64 ip, struct map **mapp,
30 symbol_filter_t filter); 32 symbol_filter_t filter);
31 33
32static inline struct map *thread__find_map(struct thread *self, u64 ip) 34static inline struct map *thread__find_map(struct thread *self,
35 enum map_type type, u64 ip)
33{ 36{
34 return self ? maps__find(&self->maps, ip) : NULL; 37 return self ? maps__find(&self->maps[type], ip) : NULL;
35} 38}
36 39
40static inline void __thread__insert_map(struct thread *self, struct map *map)
41{
42 maps__insert(&self->maps[map->type], map);
43}
37#endif /* __PERF_THREAD_H */ 44#endif /* __PERF_THREAD_H */