perf probe: Check build-id of vmlinux
Check build-id of vmlinux by using functions in symbol.c. This also exposes map__load() for getting vmlinux path, and removes vmlinux path list in builtin-probe.c, because symbol.c already has that. Checking build-id prevents users to open old or different debuginfo from current running kernel. Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Jim Keniston <jkenisto@us.ibm.com> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Frank Ch. Eigler <fche@redhat.com> Cc: Jason Baron <jbaron@redhat.com> Cc: K.Prasad <prasad@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: systemtap <systemtap@sources.redhat.com> Cc: DLE <dle-develop@lists.sourceforge.net> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20091215153232.17436.45539.stgit@dhcp-100-2-132.bos.redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
d761b08bff
commit
a128168d1e
@@ -104,12 +104,16 @@ void map__fixup_end(struct map *self)
|
||||
|
||||
#define DSO__DELETED "(deleted)"
|
||||
|
||||
static int map__load(struct map *self, struct perf_session *session,
|
||||
symbol_filter_t filter)
|
||||
int map__load(struct map *self, struct perf_session *session,
|
||||
symbol_filter_t filter)
|
||||
{
|
||||
const char *name = self->dso->long_name;
|
||||
int nr = dso__load(self->dso, self, session, filter);
|
||||
int nr;
|
||||
|
||||
if (dso__loaded(self->dso, self->type))
|
||||
return 0;
|
||||
|
||||
nr = dso__load(self->dso, self, session, filter);
|
||||
if (nr < 0) {
|
||||
if (self->dso->has_build_id) {
|
||||
char sbuild_id[BUILD_ID_SIZE * 2 + 1];
|
||||
@@ -147,7 +151,7 @@ static int map__load(struct map *self, struct perf_session *session,
|
||||
struct symbol *map__find_symbol(struct map *self, struct perf_session *session,
|
||||
u64 addr, symbol_filter_t filter)
|
||||
{
|
||||
if (!dso__loaded(self->dso, self->type) && map__load(self, session, filter) < 0)
|
||||
if (map__load(self, session, filter) < 0)
|
||||
return NULL;
|
||||
|
||||
return dso__find_symbol(self->dso, self->type, addr);
|
||||
@@ -157,7 +161,7 @@ struct symbol *map__find_symbol_by_name(struct map *self, const char *name,
|
||||
struct perf_session *session,
|
||||
symbol_filter_t filter)
|
||||
{
|
||||
if (!dso__loaded(self->dso, self->type) && map__load(self, session, filter) < 0)
|
||||
if (map__load(self, session, filter) < 0)
|
||||
return NULL;
|
||||
|
||||
if (!dso__sorted_by_name(self->dso, self->type))
|
||||
|
Reference in New Issue
Block a user