aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2010-03-15 10:46:58 -0400
committerIngo Molnar <mingo@elte.hu>2010-03-15 11:08:42 -0400
commitb0a9ab62ab96e258a0ddd81d7fe2719c3db36006 (patch)
treef86b57423ac24262533a11fae4c5dc72f7b912bd /tools/perf/util
parentbedbfdea31daf3880745001d56450c683959ee7e (diff)
perf top: Properly notify the user that vmlinux is missing
Before this patch this message would very briefly appear on the screen and then the screen would get updates only on the top, for number of interrupts received, etc, but no annotation would be performed: [root@doppio linux-2.6-tip]# perf top -s n_tty_write > /tmp/bla objdump: '[kernel.kallsyms]': No such file Now this is what the user gets: [root@doppio linux-2.6-tip]# perf top -s n_tty_write Can't annotate n_tty_write: No vmlinux file was found in the path: [0] vmlinux [1] /boot/vmlinux [2] /boot/vmlinux-2.6.33-rc5 [3] /lib/modules/2.6.33-rc5/build/vmlinux [4] /usr/lib/debug/lib/modules/2.6.33-rc5/vmlinux [root@doppio linux-2.6-tip]# This bug was introduced when we added automatic search for vmlinux, before that time the user had to specify a vmlinux file. Reported-by: David S. Miller <davem@davemloft.net> Reported-by: Ingo Molnar <mingo@elte.hu> 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> Cc: <stable@kernel.org> LKML-Reference: <1268664418-28328-2-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/symbol.c25
-rw-r--r--tools/perf/util/symbol.h15
2 files changed, 27 insertions, 13 deletions
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 75cd46807c70..292f941555a8 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -18,18 +18,6 @@
18#define NT_GNU_BUILD_ID 3 18#define NT_GNU_BUILD_ID 3
19#endif 19#endif
20 20
21enum dso_origin {
22 DSO__ORIG_KERNEL = 0,
23 DSO__ORIG_JAVA_JIT,
24 DSO__ORIG_BUILD_ID_CACHE,
25 DSO__ORIG_FEDORA,
26 DSO__ORIG_UBUNTU,
27 DSO__ORIG_BUILDID,
28 DSO__ORIG_DSO,
29 DSO__ORIG_KMODULE,
30 DSO__ORIG_NOT_FOUND,
31};
32
33static void dsos__add(struct list_head *head, struct dso *dso); 21static void dsos__add(struct list_head *head, struct dso *dso);
34static struct map *map__new2(u64 start, struct dso *dso, enum map_type type); 22static struct map *map__new2(u64 start, struct dso *dso, enum map_type type);
35static int dso__load_kernel_sym(struct dso *self, struct map *map, 23static int dso__load_kernel_sym(struct dso *self, struct map *map,
@@ -1017,7 +1005,7 @@ static int dso__load_sym(struct dso *self, struct map *map, const char *name,
1017 } 1005 }
1018 curr_map->map_ip = identity__map_ip; 1006 curr_map->map_ip = identity__map_ip;
1019 curr_map->unmap_ip = identity__map_ip; 1007 curr_map->unmap_ip = identity__map_ip;
1020 curr_dso->origin = DSO__ORIG_KERNEL; 1008 curr_dso->origin = self->origin;
1021 map_groups__insert(kmap->kmaps, curr_map); 1009 map_groups__insert(kmap->kmaps, curr_map);
1022 dsos__add(&dsos__kernel, curr_dso); 1010 dsos__add(&dsos__kernel, curr_dso);
1023 dso__set_loaded(curr_dso, map->type); 1011 dso__set_loaded(curr_dso, map->type);
@@ -1887,6 +1875,17 @@ out_fail:
1887 return -1; 1875 return -1;
1888} 1876}
1889 1877
1878size_t vmlinux_path__fprintf(FILE *fp)
1879{
1880 int i;
1881 size_t printed = 0;
1882
1883 for (i = 0; i < vmlinux_path__nr_entries; ++i)
1884 printed += fprintf(fp, "[%d] %s\n", i, vmlinux_path[i]);
1885
1886 return printed;
1887}
1888
1890static int setup_list(struct strlist **list, const char *list_str, 1889static int setup_list(struct strlist **list, const char *list_str,
1891 const char *list_name) 1890 const char *list_name)
1892{ 1891{
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 280dadd32a08..d983bbaf99c5 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -149,6 +149,19 @@ size_t dsos__fprintf_buildid(FILE *fp, bool with_hits);
149 149
150size_t dso__fprintf_buildid(struct dso *self, FILE *fp); 150size_t dso__fprintf_buildid(struct dso *self, FILE *fp);
151size_t dso__fprintf(struct dso *self, enum map_type type, FILE *fp); 151size_t dso__fprintf(struct dso *self, enum map_type type, FILE *fp);
152
153enum dso_origin {
154 DSO__ORIG_KERNEL = 0,
155 DSO__ORIG_JAVA_JIT,
156 DSO__ORIG_BUILD_ID_CACHE,
157 DSO__ORIG_FEDORA,
158 DSO__ORIG_UBUNTU,
159 DSO__ORIG_BUILDID,
160 DSO__ORIG_DSO,
161 DSO__ORIG_KMODULE,
162 DSO__ORIG_NOT_FOUND,
163};
164
152char dso__symtab_origin(const struct dso *self); 165char dso__symtab_origin(const struct dso *self);
153void dso__set_long_name(struct dso *self, char *name); 166void dso__set_long_name(struct dso *self, char *name);
154void dso__set_build_id(struct dso *self, void *build_id); 167void dso__set_build_id(struct dso *self, void *build_id);
@@ -168,4 +181,6 @@ int kallsyms__parse(const char *filename, void *arg,
168int symbol__init(void); 181int symbol__init(void);
169bool symbol_type__is_a(char symbol_type, enum map_type map_type); 182bool symbol_type__is_a(char symbol_type, enum map_type map_type);
170 183
184size_t vmlinux_path__fprintf(FILE *fp);
185
171#endif /* __PERF_SYMBOL */ 186#endif /* __PERF_SYMBOL */