aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2010-01-27 18:05:49 -0500
committerIngo Molnar <mingo@elte.hu>2010-01-29 03:20:57 -0500
commit72b8fa1730207274f6818b47b891ce5dff79287e (patch)
treecc8fd9f816c3a3b9f251c9507f72bf9860b6b601
parent75c9f3284a7ff957829f44baace82406a6354ceb (diff)
perf top: Exit if specified --vmlinux can't be used
As we do lazy loading of symtabs we only will know if the specified vmlinux file is invalid when we actually have a hit in kernel space and then try to load it. So if we get kernel hits and there are _no_ symbols in the DSO backing the kernel map, bail out. Reported-by: Mike Galbraith <efault@gmx.de> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1264633557-17597-1-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--tools/perf/builtin-top.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 2227b84aa002..78f9c4576a0c 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -951,9 +951,31 @@ static void event__process_sample(const event_t *self,
951 } 951 }
952 952
953 if (event__preprocess_sample(self, session, &al, symbol_filter) < 0 || 953 if (event__preprocess_sample(self, session, &al, symbol_filter) < 0 ||
954 al.sym == NULL || al.filtered) 954 al.filtered)
955 return; 955 return;
956 956
957 if (al.sym == NULL) {
958 /*
959 * As we do lazy loading of symtabs we only will know if the
960 * specified vmlinux file is invalid when we actually have a
961 * hit in kernel space and then try to load it. So if we get
962 * here and there are _no_ symbols in the DSO backing the
963 * kernel map, bail out.
964 *
965 * We may never get here, for instance, if we use -K/
966 * --hide-kernel-symbols, even if the user specifies an
967 * invalid --vmlinux ;-)
968 */
969 if (al.map == session->vmlinux_maps[MAP__FUNCTION] &&
970 RB_EMPTY_ROOT(&al.map->dso->symbols[MAP__FUNCTION])) {
971 pr_err("The %s file can't be used\n",
972 symbol_conf.vmlinux_name);
973 exit(1);
974 }
975
976 return;
977 }
978
957 syme = symbol__priv(al.sym); 979 syme = symbol__priv(al.sym);
958 if (!syme->skip) { 980 if (!syme->skip) {
959 syme->count[counter]++; 981 syme->count[counter]++;