diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-06-03 17:35:55 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-06-04 06:07:52 -0400 |
commit | e7dadc0089da730a1ba2638a1a03533be0c67f11 (patch) | |
tree | fe85a16eb85cf4c2750fddb347a3fd1f69e1c6e3 /tools | |
parent | da3fd1a0010ccc9fe6fd5ae2b9e85e1aacc03e4d (diff) |
perf symbols: Set the DSO long name when using symbol_conf.vmlinux_name
We need to set the long name to the name specified via, for instance,
'perf annotate --vmlinux /path/to/vmlinux', if not it will remain as
'[kernel.kallsyms]' and that will make annotate fail when passing this
as the vmlinux name in the call to objdump.
The way this is setup grew unwieldly and dso__load_vmlinux is the
function that should allocate space for the long name, with callers not
assuming that filenames should be allocated somehow by then (strdup,
dso__build_id_filename, etc).
For now this is the minimalistic patch, a proper fix for .36 will be
made.
Reported-by: Stephane Eranian <eranian@google.com>
Tested-by: Stephane Eranian <eranian@google.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
LKML-Reference: <20100604003900.GD10469@ghostprotocols.net>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/util/symbol.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 7fd6b151feb5..b63e5713849f 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -1745,7 +1745,12 @@ static int dso__load_kernel_sym(struct dso *self, struct map *map, | |||
1745 | if (symbol_conf.vmlinux_name != NULL) { | 1745 | if (symbol_conf.vmlinux_name != NULL) { |
1746 | err = dso__load_vmlinux(self, map, | 1746 | err = dso__load_vmlinux(self, map, |
1747 | symbol_conf.vmlinux_name, filter); | 1747 | symbol_conf.vmlinux_name, filter); |
1748 | goto out_try_fixup; | 1748 | if (err > 0) { |
1749 | dso__set_long_name(self, | ||
1750 | strdup(symbol_conf.vmlinux_name)); | ||
1751 | goto out_fixup; | ||
1752 | } | ||
1753 | return err; | ||
1749 | } | 1754 | } |
1750 | 1755 | ||
1751 | if (vmlinux_path != NULL) { | 1756 | if (vmlinux_path != NULL) { |
@@ -1806,7 +1811,6 @@ do_kallsyms: | |||
1806 | pr_debug("Using %s for symbols\n", kallsyms_filename); | 1811 | pr_debug("Using %s for symbols\n", kallsyms_filename); |
1807 | free(kallsyms_allocated_filename); | 1812 | free(kallsyms_allocated_filename); |
1808 | 1813 | ||
1809 | out_try_fixup: | ||
1810 | if (err > 0) { | 1814 | if (err > 0) { |
1811 | out_fixup: | 1815 | out_fixup: |
1812 | if (kallsyms_filename != NULL) | 1816 | if (kallsyms_filename != NULL) |