diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-01-27 18:05:49 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-01-29 03:20:57 -0500 |
commit | 72b8fa1730207274f6818b47b891ce5dff79287e (patch) | |
tree | cc8fd9f816c3a3b9f251c9507f72bf9860b6b601 /tools/perf/builtin-top.c | |
parent | 75c9f3284a7ff957829f44baace82406a6354ceb (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>
Diffstat (limited to 'tools/perf/builtin-top.c')
-rw-r--r-- | tools/perf/builtin-top.c | 24 |
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]++; |