f5812a7a33
I.e. we can't handle these two kinds of files in the same way: 1) prelinked system library: [acme@doppio pahole]$ readelf -s /usr/lib64/libdw-0.141.so | egrep 'FUNC.+GLOBAL.+dwfl_report_elf' 278: 00000030450105a0 261 FUNC GLOBAL DEFAULT 12 dwfl_report_elf@@ELFUTILS_0.122 2) not prelinked library with debug information from a -debuginfo package: [acme@doppio pahole]$ readelf -s /usr/lib/debug/usr/lib64/libdw-0.141.so.debug | egrep 'FUNC.+GLOBAL.+dwfl_report_elf' 629: 00000000000105a0 261 FUNC GLOBAL DEFAULT 12 dwfl_report_elf [acme@doppio pahole]$ Now the numbers I got for a pahole perf run are in line with the numbers I get from oprofile. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20090630144317.GB12663@ghostprotocols.net> Signed-off-by: Ingo Molnar <mingo@elte.hu>
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
#ifndef _PERF_SYMBOL_
|
|
#define _PERF_SYMBOL_ 1
|
|
|
|
#include <linux/types.h>
|
|
#include "types.h"
|
|
#include "list.h"
|
|
#include "rbtree.h"
|
|
|
|
struct symbol {
|
|
struct rb_node rb_node;
|
|
u64 start;
|
|
u64 end;
|
|
u64 obj_start;
|
|
u64 hist_sum;
|
|
u64 *hist;
|
|
void *priv;
|
|
char name[0];
|
|
};
|
|
|
|
struct dso {
|
|
struct list_head node;
|
|
struct rb_root syms;
|
|
struct symbol *(*find_symbol)(struct dso *, u64 ip);
|
|
unsigned int sym_priv_size;
|
|
unsigned char prelinked;
|
|
char name[0];
|
|
};
|
|
|
|
const char *sym_hist_filter;
|
|
|
|
typedef int (*symbol_filter_t)(struct dso *self, struct symbol *sym);
|
|
|
|
struct dso *dso__new(const char *name, unsigned int sym_priv_size);
|
|
void dso__delete(struct dso *self);
|
|
|
|
static inline void *dso__sym_priv(struct dso *self, struct symbol *sym)
|
|
{
|
|
return ((void *)sym) - self->sym_priv_size;
|
|
}
|
|
|
|
struct symbol *dso__find_symbol(struct dso *self, u64 ip);
|
|
|
|
int dso__load_kernel(struct dso *self, const char *vmlinux,
|
|
symbol_filter_t filter, int verbose);
|
|
int dso__load(struct dso *self, symbol_filter_t filter, int verbose);
|
|
|
|
size_t dso__fprintf(struct dso *self, FILE *fp);
|
|
|
|
void symbol__init(void);
|
|
#endif /* _PERF_SYMBOL_ */
|