linux/tools/perf
Masami Hiramatsu 9b118acae3 perf probe: Fix to handle aliased symbols in glibc
Fix perf probe to handle aliased symbols correctly in glibc.  In the
glibc, several symbols are defined as an alias of __libc_XXX, e.g.
malloc is an alias of __libc_malloc.

In such cases, dwarf has no subroutine instances of the alias functions
(e.g. no "malloc" instance), but the map has that symbol and its
address.

Thus, if we search the alieased symbol in debuginfo, we always fail to
find it, but it is in the map.

To solve this problem, this fails back to address-based alternative
search, which searches the symbol in the map, translates its address to
alternative (correct) function name by using debuginfo, and retry to
find the alternative function point from debuginfo.

This adds fail-back process to --vars, --lines and --add options. So,
now you can use those on malloc@libc :)

Without this patch;
  -----
  # ./perf probe -x /usr/lib64/libc-2.17.so -V malloc
  Failed to find the address of malloc
    Error: Failed to show vars.
  # ./perf probe -x /usr/lib64/libc-2.17.so -a "malloc bytes"
  Probe point 'malloc' not found in debuginfo.
    Error: Failed to add events.
  -----

With this patch;
  -----
  # ./perf probe -x /usr/lib64/libc-2.17.so -V malloc
  Available variables at malloc
          @<__libc_malloc+0>
                  size_t  bytes
  # ./perf probe -x /usr/lib64/libc-2.17.so -a "malloc bytes"
  Added new event:
    probe_libc:malloc    (on malloc in /usr/lib64/libc-2.17.so with bytes)

  You can now use it in all perf tools, such as:

          perf record -e probe_libc:malloc -aR sleep 1
  -----

Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Naohiro Aota <naota@elisp.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20150306073120.6904.13779.stgit@localhost.localdomain
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-03-12 12:39:52 -03:00
..
arch perf build: Add arch sparc objects building 2015-02-12 13:22:01 -03:00
bench Merge 'tip/perf/urgent' into perf/core to pick fixes 2015-03-02 11:45:49 -03:00
config perf tools: Initialize cpu set in pthread_attr_setaffinity_np feature test 2015-03-02 12:48:16 -03:00
Documentation perf record: Document --group option 2015-03-02 12:04:45 -03:00
python perf python: Remove duplicate TID bit from mask 2013-08-07 17:35:25 -03:00
scripts perf build: Add scripts objects building 2015-02-12 11:49:53 -03:00
tests perf build: Add tests objects building 2015-02-12 11:40:32 -03:00
ui perf tools: Reference count struct thread 2015-03-03 00:17:08 -03:00
util perf probe: Fix to handle aliased symbols in glibc 2015-03-12 12:39:52 -03:00
.gitignore perf tools: Add PERF-FEATURES to the .gitignore file 2015-03-02 12:06:20 -03:00
Build perf tools: Add new 'perf data' command 2015-02-25 12:42:25 -03:00
builtin-annotate.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-bench.c perf bench: Add --repeat option 2014-06-19 16:13:15 -03:00
builtin-buildid-cache.c perf buildid-cache: Show usage with incorrect params 2015-02-27 15:52:40 -03:00
builtin-buildid-list.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-data.c perf data: Fix sentinel setting for data_cmds array 2015-02-27 10:43:18 -03:00
builtin-diff.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-evlist.c perf tools: Modify error code for when perf_session__new() fails 2014-09-26 12:32:58 -03:00
builtin-help.c perf help: Use strerror_r instead of strerror 2014-08-15 13:08:26 -03:00
builtin-inject.c perf tools: tool->finished_round() doesn't need perf_session 2015-03-12 12:39:49 -03:00
builtin-kmem.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-kvm.c perf tools: tool->finished_round() doesn't need perf_session 2015-03-12 12:39:49 -03:00
builtin-list.c perf list: Extend raw-dump to certain kind of events 2015-02-27 15:52:24 -03:00
builtin-lock.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-mem.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-probe.c perf probe: Add --quiet option to suppress output result message 2014-10-29 10:32:49 -02:00
builtin-record.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-report.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-sched.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-script.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-stat.c perf stat: Report unsupported events properly 2015-03-02 11:51:17 -03:00
builtin-timechart.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-top.c perf evlist: Adopt events_stats from perf_session 2015-02-22 22:22:57 -03:00
builtin-trace.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin.h perf tools: Add new 'perf data' command 2015-02-25 12:42:25 -03:00
command-list.txt perf tools: Add new 'perf data' command 2015-02-25 12:42:25 -03:00
CREDITS
design.txt perf tools: Update some code references in design.txt 2014-03-18 18:17:06 -03:00
Makefile perf tools: Compare JOBS to 0 after grep 2015-03-02 11:51:00 -03:00
Makefile.perf perf tools: Add feature check for libbabeltrace 2015-02-25 12:42:24 -03:00
MANIFEST tools build: Add new build support 2015-02-11 18:30:03 -03:00
perf-archive.sh perf archive: Make 'f' the last parameter for tar 2012-09-17 13:10:42 -03:00
perf-completion.sh perf tools: Fix the bash completion problem of 'perf --*' 2015-02-27 15:52:28 -03:00
perf-read-vdso.c perf tools: Build programs to copy 32-bit compatibility 2014-10-29 10:32:48 -02:00
perf-sys.h perf tools: Avoid build splat for syscall numbers with uclibc 2015-01-16 17:49:29 -03:00
perf-with-kcore.sh perf tools: Add perf-with-kcore script 2014-09-17 17:08:08 -03:00
perf.c perf tools: Fix the bash completion problem of 'perf --*' 2015-02-27 15:52:28 -03:00
perf.h perf record: Support recording running/enabled time 2015-02-25 12:42:23 -03:00