perf symbols: Allow symbol alias when loading map for symbol name
authorNamhyung Kim <namhyung@kernel.org>
Fri, 6 Mar 2015 07:31:27 +0000 (16:31 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 12 Mar 2015 15:39:54 +0000 (12:39 -0300)
When perf probe tries to add a probe in a binary using symbol name, it
sometimes failed since some symbols were discard during loading dso.

When it resolves an address to symbol, it'd be better to have just one
symbol at given address.  But for finding address from symbol, it'd be
better to keep all names (including aliases).

So allow tools to state that they want to allow aliases via
symbol_conf.allow_aliases.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Naohiro Aota <naota@elisp.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20150306073127.6904.3232.stgit@localhost.localdomain
[ Original patch passwd allow_alias to many functions, use symbol_conf.allow_aliases instead ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/probe-event.c
tools/perf/util/symbol-elf.c
tools/perf/util/symbol.h

index c379ea0edfd53e10e84a036ac33a9fef4e024838..9feba0e3343e4ed0a0fd7a0a15f182cc143750b8 100644 (file)
@@ -80,6 +80,7 @@ static int init_symbol_maps(bool user_only)
        int ret;
 
        symbol_conf.sort_by_name = true;
+       symbol_conf.allow_aliases = true;
        ret = symbol__init(NULL);
        if (ret < 0) {
                pr_debug("Failed to init symbol map.\n");
index ada16762fac244f2f29c664d07f04ac18e3bcd7e..62742e46c01036278e424fe477f9fab58df7835f 100644 (file)
@@ -1048,7 +1048,8 @@ new_symbol:
         * For misannotated, zeroed, ASM function sizes.
         */
        if (nr > 0) {
-               symbols__fixup_duplicate(&dso->symbols[map->type]);
+               if (!symbol_conf.allow_aliases)
+                       symbols__fixup_duplicate(&dso->symbols[map->type]);
                symbols__fixup_end(&dso->symbols[map->type]);
                if (kmap) {
                        /*
index 1650dcb3a67bc3fddff40c93c6fdf6a1122d185a..efdaaa544041458c075bcc77d7403ac8a572dcb2 100644 (file)
@@ -87,6 +87,7 @@ struct symbol_conf {
                        ignore_vmlinux_buildid,
                        show_kernel_path,
                        use_modules,
+                       allow_aliases,
                        sort_by_name,
                        show_nr_samples,
                        show_total_period,