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 8 struct thread { 9 struct rb_node rb_node; 10 struct rb_root maps[MAP__NR_TYPES]; 11 struct list_head removed_maps[MAP__NR_TYPES]; 12 pid_t pid; 13 bool use_modules; 14 char shortname[3]; 15 char *comm; 16 int comm_len; 17 }; 18 19 void thread__init(struct thread *self, pid_t pid); 20 int thread__set_comm(struct thread *self, const char *comm); 21 int thread__comm_len(struct thread *self); 22 struct thread *threads__findnew(pid_t pid); 23 struct thread *register_idle_thread(void); 24 void thread__insert_map(struct thread *self, struct map *map); 25 int thread__fork(struct thread *self, struct thread *parent); 26 size_t thread__fprintf_maps(struct thread *self, FILE *fp); 27 size_t threads__fprintf(FILE *fp); 28 29 void maps__insert(struct rb_root *maps, struct map *map); 30 struct map *maps__find(struct rb_root *maps, u64 addr); 31 32 static inline struct map *thread__find_map(struct thread *self, 33 enum map_type type, u64 addr) 34 { 35 return self ? maps__find(&self->maps[type], addr) : NULL; 36 } 37 38 static inline void __thread__insert_map(struct thread *self, struct map *map) 39 { 40 maps__insert(&self->maps[map->type], map); 41 } 42 43 void thread__find_addr_location(struct thread *self, u8 cpumode, 44 enum map_type type, u64 addr, 45 struct addr_location *al, 46 symbol_filter_t filter); 47 struct symbol *thread__find_symbol(struct thread *self, 48 enum map_type type, u64 addr, 49 symbol_filter_t filter); 50 51 static inline struct symbol * 52 thread__find_function(struct thread *self, u64 addr, symbol_filter_t filter) 53 { 54 return thread__find_symbol(self, MAP__FUNCTION, addr, filter); 55 } 56 #endif /* __PERF_THREAD_H */ 57