thread.h 2.0 KB
Newer Older
1 2 3
#ifndef __PERF_THREAD_H
#define __PERF_THREAD_H

4 5 6 7
#include <linux/rbtree.h>
#include <unistd.h>
#include "symbol.h"

8
struct map_groups {
9 10
	struct rb_root		maps[MAP__NR_TYPES];
	struct list_head	removed_maps[MAP__NR_TYPES];
11
	bool			use_modules;
12 13 14 15 16 17
};

struct thread {
	struct rb_node		rb_node;
	struct map_groups	mg;
	pid_t			pid;
18
	char			shortname[3];
19
	char			*comm;
20
	int			comm_len;
21 22
};

23
void map_groups__init(struct map_groups *self);
24
int thread__set_comm(struct thread *self, const char *comm);
25
int thread__comm_len(struct thread *self);
26
struct thread *threads__findnew(pid_t pid);
27 28
void thread__insert_map(struct thread *self, struct map *map);
int thread__fork(struct thread *self, struct thread *parent);
29
size_t map_groups__fprintf_maps(struct map_groups *self, FILE *fp);
30
size_t threads__fprintf(FILE *fp);
31

32
void maps__insert(struct rb_root *maps, struct map *map);
33
struct map *maps__find(struct rb_root *maps, u64 addr);
34

35 36 37 38 39 40
static inline void map_groups__insert(struct map_groups *self, struct map *map)
{
	 maps__insert(&self->maps[map->type], map);
}

static inline struct map *map_groups__find(struct map_groups *self,
41
					   enum map_type type, u64 addr)
42
{
43
	return maps__find(&self->maps[type], addr);
44 45
}

46 47
static inline struct map *thread__find_map(struct thread *self,
					   enum map_type type, u64 addr)
48
{
49
	return self ? map_groups__find(&self->mg, type, addr) : NULL;
50
}
51 52 53 54 55

void thread__find_addr_location(struct thread *self, u8 cpumode,
				enum map_type type, u64 addr,
				struct addr_location *al,
				symbol_filter_t filter);
56 57 58
struct symbol *map_groups__find_symbol(struct map_groups *self,
				       enum map_type type, u64 addr,
				       symbol_filter_t filter);
59 60

static inline struct symbol *
61 62
map_groups__find_function(struct map_groups *self, u64 addr,
			  symbol_filter_t filter)
63
{
64
	return map_groups__find_symbol(self, MAP__FUNCTION, addr, filter);
65
}
66 67 68

struct map *map_groups__find_by_name(struct map_groups *self,
				     enum map_type type, const char *name);
69
#endif	/* __PERF_THREAD_H */