aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
authorMasami Hiramatsu <mhiramat@redhat.com>2009-12-15 10:32:33 -0500
committerIngo Molnar <mingo@elte.hu>2009-12-15 14:22:04 -0500
commita128168d1e79e537d6666655e7771d973e9230e3 (patch)
tree73f8581954751bd9927182e3ac984d925faefade /tools/perf/util
parentd761b08bff0a9b653f6bd248cea50322e7eccb14 (diff)
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>
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/event.h2
-rw-r--r--tools/perf/util/map.c14
2 files changed, 11 insertions, 5 deletions
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
index a92e0b039a6a..8027309b0422 100644
--- a/tools/perf/util/event.h
+++ b/tools/perf/util/event.h
@@ -152,6 +152,8 @@ size_t map__fprintf(struct map *self, FILE *fp);
152 152
153struct perf_session; 153struct perf_session;
154 154
155int map__load(struct map *self, struct perf_session *session,
156 symbol_filter_t filter);
155struct symbol *map__find_symbol(struct map *self, struct perf_session *session, 157struct symbol *map__find_symbol(struct map *self, struct perf_session *session,
156 u64 addr, symbol_filter_t filter); 158 u64 addr, symbol_filter_t filter);
157struct symbol *map__find_symbol_by_name(struct map *self, const char *name, 159struct symbol *map__find_symbol_by_name(struct map *self, const char *name,
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index 8b3dd467adb5..c4d55a0da2ea 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -104,12 +104,16 @@ void map__fixup_end(struct map *self)
104 104
105#define DSO__DELETED "(deleted)" 105#define DSO__DELETED "(deleted)"
106 106
107static int map__load(struct map *self, struct perf_session *session, 107int map__load(struct map *self, struct perf_session *session,
108 symbol_filter_t filter) 108 symbol_filter_t filter)
109{ 109{
110 const char *name = self->dso->long_name; 110 const char *name = self->dso->long_name;
111 int nr = dso__load(self->dso, self, session, filter); 111 int nr;
112 112
113 if (dso__loaded(self->dso, self->type))
114 return 0;
115
116 nr = dso__load(self->dso, self, session, filter);
113 if (nr < 0) { 117 if (nr < 0) {
114 if (self->dso->has_build_id) { 118 if (self->dso->has_build_id) {
115 char sbuild_id[BUILD_ID_SIZE * 2 + 1]; 119 char sbuild_id[BUILD_ID_SIZE * 2 + 1];
@@ -147,7 +151,7 @@ static int map__load(struct map *self, struct perf_session *session,
147struct symbol *map__find_symbol(struct map *self, struct perf_session *session, 151struct symbol *map__find_symbol(struct map *self, struct perf_session *session,
148 u64 addr, symbol_filter_t filter) 152 u64 addr, symbol_filter_t filter)
149{ 153{
150 if (!dso__loaded(self->dso, self->type) && map__load(self, session, filter) < 0) 154 if (map__load(self, session, filter) < 0)
151 return NULL; 155 return NULL;
152 156
153 return dso__find_symbol(self->dso, self->type, addr); 157 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,
157 struct perf_session *session, 161 struct perf_session *session,
158 symbol_filter_t filter) 162 symbol_filter_t filter)
159{ 163{
160 if (!dso__loaded(self->dso, self->type) && map__load(self, session, filter) < 0) 164 if (map__load(self, session, filter) < 0)
161 return NULL; 165 return NULL;
162 166
163 if (!dso__sorted_by_name(self->dso, self->type)) 167 if (!dso__sorted_by_name(self->dso, self->type))