linux/tools/perf/tests
Wang Nan b93b096782 perf test: Fix dwarf unwind using libunwind.
Perf tool fails to unwind user stack if the event raises in a shared
object. This patch improves tests/dwarf-unwind.c to demonstrate the
problem by utilizing commonly used glibc function "bsearch". If perf is
not statically linked, the testcase will try to unwind a mixed call
trace.

By debugging libunwind I found that there is a bug in unwind-libunwind:
it always passes 0 as segbase to libunwind, cause libunwind unable to
locate debug_frame entry fir first level ip address (I add some more
debugging output into libunwind to make things clear):

               >_Uarm_dwarf_find_debug_frame: start_ip = 10be98, end_ip = 10c2a4
               >_Uarm_dwarf_find_debug_frame: found debug_frame table `/lib/libc-2.18.so': segbase=0x0, len=7, gp=0x0, table_data=0x449388
               >_Uarm_dwarf_search_unwind_table: call lookup:ip = b6cd3bcc, segbase = 0, rel_ip = b6cd3bcc
               >lookup: e->start_ip_offset = bcf18 (rel_ip = b6cd3bcc)
               >lookup: e->start_ip_offset = 6d314 (rel_ip = b6cd3bcc)
               >lookup: e->start_ip_offset = 33d0c (rel_ip = b6cd3bcc)
                ...
               >lookup: e->start_ip_offset = 15d0c (rel_ip = b6cd3bcc)
               >lookup: e->start_ip_offset = 15c40 (rel_ip = b6cd3bcc)
 >_Uarm_dwarf_search_unwind_table: IP b6cd3bcc inside range b6c12000-b6d4c000, but no explicit unwind info found
                >put_rs_cache: unmasking signals/interrupts and releasing lock
               >_Uarm_dwarf_step: returning -10
 >_Uarm_step: dwarf_step()=-10

This patch passes map->start as segbase to dwarf_find_debug_frame(), so
di will be initialized correctly.

In addition, dso and executable are different when setting segbase. This
patch first check whether the elf is executable, and pass segbase only
for shared object.

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Li Zefan <lizefan@huawei.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1421203007-75799-1-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-01-16 17:49:29 -03:00
..
attr perf tests: Fix attr tests size values to cope with machine state on interrupt ABI changes 2014-12-09 11:02:43 -03:00
attr.c tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
attr.py perf tests: Make attr script test event cpu 2013-03-15 13:06:00 -03:00
bp_signal_overflow.c perf tools: Enable close-on-exec flag on perf file descriptor 2014-07-18 09:09:34 +02:00
bp_signal.c perf tools: Enable close-on-exec flag on perf file descriptor 2014-07-18 09:09:34 +02:00
builtin-test.c perf test: fix typo in python test 2014-11-19 12:33:47 -03:00
code-reading.c perf tests: Use thread->mg->machine 2014-10-29 10:32:47 -02:00
dso-data.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
dwarf-unwind.c perf test: Fix dwarf unwind using libunwind. 2015-01-16 17:49:29 -03:00
evsel-roundtrip-name.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
evsel-tp-sched.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
fdarray.c tools lib fd array: Allow associating an integer cookie with each entry 2014-09-25 16:46:55 -03:00
hists_common.c perf tests: Add a test case for cumulating callchains 2014-06-01 14:35:11 +02:00
hists_common.h perf tests: Define and use symbolic names for fake symbols 2014-06-01 14:35:11 +02:00
hists_cumulate.c perf hists: Fix children sort key behavior 2015-01-08 11:26:56 -03:00
hists_filter.c perf report: Show progress bar for output resorting 2014-12-23 12:01:37 -03:00
hists_link.c perf evsel: Add hists helper 2014-10-09 13:13:41 -03:00
hists_output.c perf report: Show progress bar for output resorting 2014-12-23 12:01:37 -03:00
keep-tracking.c tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
make perf tests: Show the inner make output when an error happens 2014-06-09 12:14:22 -03:00
mmap-basic.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
mmap-thread-lookup.c perf tools: A thread's machine can be found via thread->mg->machine 2014-10-29 10:32:46 -02:00
open-syscall-all-cpus.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
open-syscall-tp-fields.c perf evlist: Introduce poll method for common code idiom 2014-09-25 16:46:55 -03:00
open-syscall.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
parse-events.c perf test: Add test case for pmu event new style format 2014-10-15 16:10:24 -03:00
parse-no-sample-id-all.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
perf-record.c perf evlist: Introduce poll method for common code idiom 2014-09-25 16:46:55 -03:00
perf-targz-src-pkg perf tools: Add test for building detached source tarballs 2014-01-13 10:06:26 -03:00
perf-time-to-tsc.c perf tools: Move rdtsc() function 2014-07-23 11:48:11 -03:00
pmu.c perf tools: Let default config be defined for a PMU 2014-09-17 17:08:08 -03:00
python-use.c perf tests: Check python path on attr and binding test 2013-01-24 16:40:10 -03:00
rdpmc.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
sample-parsing.c perf/tests: Add interrupted state sample parsing test 2014-11-16 11:42:01 +01:00
sw-clock.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
switch-tracking.c perf tests: Add a test for tracking with sched_switch 2014-08-22 13:10:35 -03:00
task-exit.c perf evlist: Introduce poll method for common code idiom 2014-09-25 16:46:55 -03:00
tests.h tools lib api: Adopt fdarray class from perf's evlist 2014-09-25 16:46:55 -03:00
thread-mg-share.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
vmlinux-kallsyms.c perf tests: No need to set up ref_reloc_sym 2014-01-31 17:21:52 -03:00