perf script: Add option resolving vmlinux path
authorAkihiro Nagai <akihiro.nagai.hw@hitachi.com>
Mon, 30 Jan 2012 04:43:20 +0000 (13:43 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 30 Jan 2012 20:13:07 +0000 (18:13 -0200)
Add the option get the path of [kernel.kallsyms].
Specify '--show-kernel-path' option to use this function.
This patch enables other applications to use this output easily.

Without --show-kernel-path  option

ffffffff81467612 irq_return ([kernel.kallsyms])
ffffffff81467612 irq_return ([kernel.kallsyms])
    7f24fc02a6b3 _start (/lib64/ld-2.14.so)
[snip]

With --show-kernel-path option

ffffffff81467612 irq_return (/lib/modules/3.2.0+/build/vmlinux)
ffffffff81467612 irq_return (/lib/modules/3.2.0+/build/vmlinux)
    7f24fc02a6b3 _start (/lib64/ld-2.14.so)
[snip]

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: yrl.pp-manager.tt@hitachi.com
Link: http://lkml.kernel.org/r/20120130044320.2384.73322.stgit@linux3
Signed-off-by: Akihiro Nagai <akihiro.nagai.hw@hitachi.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-script.txt
tools/perf/builtin-script.c
tools/perf/util/map.c
tools/perf/util/symbol.h

index 228c7bb0f0dd153139c4bbe8ab29417ca39e6481..e9cbfcddfa3f608ee19b2366802f7f405f78f535 100644 (file)
@@ -200,6 +200,9 @@ OPTIONS
        It currently includes: cpu and numa topology of the host system.
        It can only be used with the perf script report mode.
 
+--show-kernel-path::
+       Try to resolve the path of [kernel.kallsyms]
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-script-perl[1],
index 752d4018d06dc8b31948fdd3b19d24299d7d9f6e..d4ce733b9eba161973e78c602be024652dd67578 100644 (file)
@@ -1155,6 +1155,9 @@ static const struct option options[] = {
                   "only display events for these comms"),
        OPT_BOOLEAN('I', "show-info", &show_full_info,
                    "display extended information from perf.data file"),
+       OPT_BOOLEAN('\0', "show-kernel-path", &symbol_conf.show_kernel_path,
+                   "Show the path of [kernel.kallsyms]"),
+
        OPT_END()
 };
 
index 11079607105bb8e2c364ae0ee2f3ce9beb643992..dea6d1c1a95471018cdde36d0a4c23e20c8f64a1 100644 (file)
@@ -216,9 +216,12 @@ size_t map__fprintf_dsoname(struct map *map, FILE *fp)
 {
        const char *dsoname;
 
-       if (map && map->dso && map->dso->name)
-               dsoname = map->dso->name;
-       else
+       if (map && map->dso && (map->dso->name || map->dso->long_name)) {
+               if (symbol_conf.show_kernel_path && map->dso->long_name)
+                       dsoname = map->dso->long_name;
+               else if (map->dso->name)
+                       dsoname = map->dso->name;
+       } else
                dsoname = "[unknown]";
 
        return fprintf(fp, "%s", dsoname);
index ba909c9970e2d22b73272ae2e7e2722b3e57e18b..2a683d4fc9181fa4e05d34887b79d8f867411445 100644 (file)
@@ -70,6 +70,7 @@ struct symbol_conf {
        unsigned short  priv_size;
        unsigned short  nr_events;
        bool            try_vmlinux_path,
+                       show_kernel_path,
                        use_modules,
                        sort_by_name,
                        show_nr_samples,