blob: e23cc31266843ffb4b1474e18695016a4e15da78 [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;
12 char name[0];
13};
14
15struct dso {
16 struct list_head node;
17 struct rb_root syms;
Arnaldo Carvalho de Melo0085c952009-05-28 14:55:13 -030018 unsigned int sym_priv_size;
Peter Zijlstrafc54db52009-06-05 14:04:59 +020019 struct symbol *(*find_symbol)(struct dso *, uint64_t ip);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030020 char name[0];
21};
22
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030023typedef int (*symbol_filter_t)(struct dso *self, struct symbol *sym);
24
Arnaldo Carvalho de Melo0085c952009-05-28 14:55:13 -030025struct dso *dso__new(const char *name, unsigned int sym_priv_size);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030026void dso__delete(struct dso *self);
27
Arnaldo Carvalho de Melo0085c952009-05-28 14:55:13 -030028static inline void *dso__sym_priv(struct dso *self, struct symbol *sym)
29{
30 return ((void *)sym) - self->sym_priv_size;
31}
32
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030033struct symbol *dso__find_symbol(struct dso *self, uint64_t ip);
34
Arnaldo Carvalho de Melo69ee69f2009-05-28 14:55:26 -030035int dso__load_kernel(struct dso *self, const char *vmlinux,
Ingo Molnarbd741372009-06-04 14:13:04 +020036 symbol_filter_t filter, int verbose);
37int dso__load(struct dso *self, symbol_filter_t filter, int verbose);
Arnaldo Carvalho de Meloa2928c42009-05-28 14:55:04 -030038
39size_t dso__fprintf(struct dso *self, FILE *fp);
40
41void symbol__init(void);
42#endif /* _PERF_SYMBOL_ */