xref: /openbmc/linux/tools/perf/util/symbol.h (revision 78c99ba1)
1 #ifndef _PERF_SYMBOL_
2 #define _PERF_SYMBOL_ 1
3 
4 #include <linux/types.h>
5 #include "list.h"
6 #include "rbtree.h"
7 
8 struct symbol {
9 	struct rb_node	rb_node;
10 	__u64		start;
11 	__u64		end;
12 	__u64		obj_start;
13 	__u64		hist_sum;
14 	__u64		*hist;
15 	char		name[0];
16 };
17 
18 struct dso {
19 	struct list_head node;
20 	struct rb_root	 syms;
21 	unsigned int	 sym_priv_size;
22 	struct symbol    *(*find_symbol)(struct dso *, __u64 ip);
23 	char		 name[0];
24 };
25 
26 const char *sym_hist_filter;
27 
28 typedef int (*symbol_filter_t)(struct dso *self, struct symbol *sym);
29 
30 struct dso *dso__new(const char *name, unsigned int sym_priv_size);
31 void dso__delete(struct dso *self);
32 
33 static inline void *dso__sym_priv(struct dso *self, struct symbol *sym)
34 {
35 	return ((void *)sym) - self->sym_priv_size;
36 }
37 
38 struct symbol *dso__find_symbol(struct dso *self, __u64 ip);
39 
40 int dso__load_kernel(struct dso *self, const char *vmlinux,
41 		     symbol_filter_t filter, int verbose);
42 int dso__load(struct dso *self, symbol_filter_t filter, int verbose);
43 
44 size_t dso__fprintf(struct dso *self, FILE *fp);
45 
46 void symbol__init(void);
47 #endif /* _PERF_SYMBOL_ */
48