blob: ea332e56e4582d565a7975208328b9d9b60b8d22 [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>
Paul Mackerras9cffa8d2009-06-19 22:21:42 +10005#include "../types.h"
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -03006#include "list.h"
7#include "rbtree.h"
8
9struct symbol {
10 struct rb_node rb_node;
Paul Mackerras9cffa8d2009-06-19 22:21:42 +100011 u64 start;
12 u64 end;
13 u64 obj_start;
14 u64 hist_sum;
15 u64 *hist;
Frederic Weisbecker301406b2009-06-13 00:11:21 +020016 void *priv;
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030017 char name[0];
18};
19
20struct dso {
21 struct list_head node;
22 struct rb_root syms;
Arnaldo Carvalho de Melo0085c9542009-05-28 14:55:13 -030023 unsigned int sym_priv_size;
Paul Mackerras9cffa8d2009-06-19 22:21:42 +100024 struct symbol *(*find_symbol)(struct dso *, u64 ip);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030025 char name[0];
26};
27
Ingo Molnar0b73da32009-06-06 15:48:52 +020028const char *sym_hist_filter;
29
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030030typedef int (*symbol_filter_t)(struct dso *self, struct symbol *sym);
31
Arnaldo Carvalho de Melo0085c9542009-05-28 14:55:13 -030032struct dso *dso__new(const char *name, unsigned int sym_priv_size);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030033void dso__delete(struct dso *self);
34
Arnaldo Carvalho de Melo0085c9542009-05-28 14:55:13 -030035static inline void *dso__sym_priv(struct dso *self, struct symbol *sym)
36{
37 return ((void *)sym) - self->sym_priv_size;
38}
39
Paul Mackerras9cffa8d2009-06-19 22:21:42 +100040struct symbol *dso__find_symbol(struct dso *self, u64 ip);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030041
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030042int dso__load_kernel(struct dso *self, const char *vmlinux,
Ingo Molnarbd741372009-06-04 14:13:04 +020043 symbol_filter_t filter, int verbose);
44int dso__load(struct dso *self, symbol_filter_t filter, int verbose);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030045
46size_t dso__fprintf(struct dso *self, FILE *fp);
47
48void symbol__init(void);
49#endif /* _PERF_SYMBOL_ */