at v2.6.34 2.7 kB view raw
1#ifndef __PERF_THREAD_H 2#define __PERF_THREAD_H 3 4#include <linux/rbtree.h> 5#include <unistd.h> 6#include "symbol.h" 7 8struct map_groups { 9 struct rb_root maps[MAP__NR_TYPES]; 10 struct list_head removed_maps[MAP__NR_TYPES]; 11}; 12 13size_t __map_groups__fprintf_maps(struct map_groups *self, 14 enum map_type type, FILE *fp); 15 16struct thread { 17 struct rb_node rb_node; 18 struct map_groups mg; 19 pid_t pid; 20 char shortname[3]; 21 bool comm_set; 22 char *comm; 23 int comm_len; 24}; 25 26void map_groups__init(struct map_groups *self); 27int thread__set_comm(struct thread *self, const char *comm); 28int thread__comm_len(struct thread *self); 29struct thread *perf_session__findnew(struct perf_session *self, pid_t pid); 30void thread__insert_map(struct thread *self, struct map *map); 31int thread__fork(struct thread *self, struct thread *parent); 32size_t map_groups__fprintf_maps(struct map_groups *self, FILE *fp); 33size_t perf_session__fprintf(struct perf_session *self, FILE *fp); 34 35void maps__insert(struct rb_root *maps, struct map *map); 36struct map *maps__find(struct rb_root *maps, u64 addr); 37 38static inline void map_groups__insert(struct map_groups *self, struct map *map) 39{ 40 maps__insert(&self->maps[map->type], map); 41} 42 43static 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 49static 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 55void 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 60void 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); 65struct symbol *map_groups__find_symbol(struct map_groups *self, 66 enum map_type type, u64 addr, 67 symbol_filter_t filter); 68 69static 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 76struct map *map_groups__find_by_name(struct map_groups *self, 77 enum map_type type, const char *name); 78 79int __map_groups__create_kernel_maps(struct map_groups *self, 80 struct map *vmlinux_maps[MAP__NR_TYPES], 81 struct dso *kernel); 82int map_groups__create_kernel_maps(struct map_groups *self, 83 struct map *vmlinux_maps[MAP__NR_TYPES]); 84 85struct map *map_groups__new_module(struct map_groups *self, u64 start, 86 const char *filename); 87#endif /* __PERF_THREAD_H */