diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-30 12:35:01 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-30 12:35:01 -0700 |
commit | bc7d352c5e76c74c628a39b99777a1bdddde5e81 (patch) | |
tree | 3cc0a80defb54d284e2a9a1e69b1224064921775 /tools | |
parent | b3f2f6cd1ff935ecac9a5346904b899d7af689fe (diff) | |
parent | 92af1abde4f2d74c9e5f7b670a1971779ed0b051 (diff) | |
download | lwn-bc7d352c5e76c74c628a39b99777a1bdddde5e81.tar.gz lwn-bc7d352c5e76c74c628a39b99777a1bdddde5e81.zip |
Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
perf tui: Fix last use_browser problem related to .perfconfig
perf symbols: Add the build id cache to the vmlinux path
perf tui: Reset use_browser if stdout is not a tty
ring-buffer: Move zeroing out excess in page to ring buffer code
ring-buffer: Reset "real_end" when page is filled
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-annotate.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-top.c | 2 | ||||
-rw-r--r-- | tools/perf/util/debug.c | 2 | ||||
-rw-r--r-- | tools/perf/util/newt.c | 1 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 27 | ||||
-rw-r--r-- | tools/perf/util/symbol.h | 2 |
6 files changed, 28 insertions, 8 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 08278eda31a5..96db5248e995 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -343,7 +343,7 @@ find_next: continue; } - if (use_browser) { + if (use_browser > 0) { key = hist_entry__tui_annotate(he); if (is_exit_key(key)) break; diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 397290a0a76e..a66f4272b994 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -1060,7 +1060,7 @@ static void event__process_sample(const event_t *self, pr_err("Can't annotate %s", sym->name); if (sym_filter_entry->map->dso->origin == DSO__ORIG_KERNEL) { pr_err(": No vmlinux file was found in the path:\n"); - vmlinux_path__fprintf(stderr); + machine__fprintf_vmlinux_path(machine, stderr); } else pr_err(".\n"); exit(1); diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c index dd824cf3b628..6cddff2bc970 100644 --- a/tools/perf/util/debug.c +++ b/tools/perf/util/debug.c @@ -22,7 +22,7 @@ int eprintf(int level, const char *fmt, ...) if (verbose >= level) { va_start(args, fmt); - if (use_browser) + if (use_browser > 0) ret = browser__show_help(fmt, args); else ret = vfprintf(stderr, fmt, args); diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c index d54c540f49db..cf182ca132fe 100644 --- a/tools/perf/util/newt.c +++ b/tools/perf/util/newt.c @@ -1139,6 +1139,7 @@ void setup_browser(void) struct newtPercentTreeColors *c = &defaultPercentTreeColors; if (!isatty(1) || !use_browser || dump_trace) { + use_browser = 0; setup_pager(); return; } diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index aaa51ba147df..7fd6b151feb5 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -1695,9 +1695,20 @@ int dso__load_vmlinux_path(struct dso *self, struct map *map, symbol_filter_t filter) { int i, err = 0; + char *filename; pr_debug("Looking at the vmlinux_path (%d entries long)\n", - vmlinux_path__nr_entries); + vmlinux_path__nr_entries + 1); + + filename = dso__build_id_filename(self, NULL, 0); + if (filename != NULL) { + err = dso__load_vmlinux(self, map, filename, filter); + if (err > 0) { + dso__set_long_name(self, filename); + goto out; + } + free(filename); + } for (i = 0; i < vmlinux_path__nr_entries; ++i) { err = dso__load_vmlinux(self, map, vmlinux_path[i], filter); @@ -1706,7 +1717,7 @@ int dso__load_vmlinux_path(struct dso *self, struct map *map, break; } } - +out: return err; } @@ -2102,13 +2113,21 @@ out_fail: return -1; } -size_t vmlinux_path__fprintf(FILE *fp) +size_t machine__fprintf_vmlinux_path(struct machine *self, FILE *fp) { int i; size_t printed = 0; + struct dso *kdso = self->vmlinux_maps[MAP__FUNCTION]->dso; + + if (kdso->has_build_id) { + char filename[PATH_MAX]; + if (dso__build_id_filename(kdso, filename, sizeof(filename))) + printed += fprintf(fp, "[0] %s\n", filename); + } for (i = 0; i < vmlinux_path__nr_entries; ++i) - printed += fprintf(fp, "[%d] %s\n", i, vmlinux_path[i]); + printed += fprintf(fp, "[%d] %s\n", + i + kdso->has_build_id, vmlinux_path[i]); return printed; } diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 5d25b5eb1456..5e02d2c17154 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -216,6 +216,6 @@ int machines__create_guest_kernel_maps(struct rb_root *self); int symbol__init(void); bool symbol_type__is_a(char symbol_type, enum map_type map_type); -size_t vmlinux_path__fprintf(FILE *fp); +size_t machine__fprintf_vmlinux_path(struct machine *self, FILE *fp); #endif /* __PERF_SYMBOL */ |