blob: 5ad9b06c3f6f40aac932ab47747585effafb319d [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;
Frederic Weisbecker301406b2009-06-13 00:11:21 +020015 void *priv;
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030016 char name[0];
17};
18
19struct dso {
20 struct list_head node;
21 struct rb_root syms;
Arnaldo Carvalho de Melo0085c9542009-05-28 14:55:13 -030022 unsigned int sym_priv_size;
Ingo Molnar729ff5e22009-06-11 14:16:15 +020023 struct symbol *(*find_symbol)(struct dso *, __u64 ip);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030024 char name[0];
25};
26
Ingo Molnar0b73da32009-06-06 15:48:52 +020027const char *sym_hist_filter;
28
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030029typedef int (*symbol_filter_t)(struct dso *self, struct symbol *sym);
30
Arnaldo Carvalho de Melo0085c9542009-05-28 14:55:13 -030031struct dso *dso__new(const char *name, unsigned int sym_priv_size);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030032void dso__delete(struct dso *self);
33
Arnaldo Carvalho de Melo0085c9542009-05-28 14:55:13 -030034static inline void *dso__sym_priv(struct dso *self, struct symbol *sym)
35{
36 return ((void *)sym) - self->sym_priv_size;
37}
38
Ingo Molnar729ff5e22009-06-11 14:16:15 +020039struct symbol *dso__find_symbol(struct dso *self, __u64 ip);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030040
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030041int dso__load_kernel(struct dso *self, const char *vmlinux,
Ingo Molnarbd741372009-06-04 14:13:04 +020042 symbol_filter_t filter, int verbose);
43int dso__load(struct dso *self, symbol_filter_t filter, int verbose);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030044
45size_t dso__fprintf(struct dso *self, FILE *fp);
46
47void symbol__init(void);
48#endif /* _PERF_SYMBOL_ */