blob: 4839d68f14f08a79fe39ff5ace0986b2fbb8ce46 [file] [log] [blame]
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -03001#ifndef _PERF_SYMBOL_
2#define _PERF_SYMBOL_ 1
3
4#include <linux/types.h>
5#include "list.h"
6#include "rbtree.h"
7
8struct symbol {
9 struct rb_node rb_node;
10 __u64 start;
11 __u64 end;
Ingo Molnar0b73da32009-06-06 15:48:52 +020012 __u64 obj_start;
13 __u64 hist_sum;
14 __u64 *hist;
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030015 char name[0];
16};
17
18struct dso {
19 struct list_head node;
20 struct rb_root syms;
Arnaldo Carvalho de Melo0085c952009-05-28 14:55:13 -030021 unsigned int sym_priv_size;
Peter Zijlstrafc54db52009-06-05 14:04:59 +020022 struct symbol *(*find_symbol)(struct dso *, uint64_t ip);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030023 char name[0];
24};
25
Ingo Molnar0b73da32009-06-06 15:48:52 +020026const char *sym_hist_filter;
27
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030028typedef int (*symbol_filter_t)(struct dso *self, struct symbol *sym);
29
Arnaldo Carvalho de Melo0085c952009-05-28 14:55:13 -030030struct dso *dso__new(const char *name, unsigned int sym_priv_size);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030031void dso__delete(struct dso *self);
32
Arnaldo Carvalho de Melo0085c952009-05-28 14:55:13 -030033static inline void *dso__sym_priv(struct dso *self, struct symbol *sym)
34{
35 return ((void *)sym) - self->sym_priv_size;
36}
37
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030038struct symbol *dso__find_symbol(struct dso *self, uint64_t ip);
39
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030040int dso__load_kernel(struct dso *self, const char *vmlinux,
Ingo Molnarbd741372009-06-04 14:13:04 +020041 symbol_filter_t filter, int verbose);
42int dso__load(struct dso *self, symbol_filter_t filter, int verbose);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030043
44size_t dso__fprintf(struct dso *self, FILE *fp);
45
46void symbol__init(void);
47#endif /* _PERF_SYMBOL_ */