[PATCH 0/4] perf tools: introduce --map-adjustment.

Wang Nan
2015-04-01T10:34:35Z

This series of patches introduce a --map-adjustment argument for
dealing with private dynamic linkers.

Some programs write their private dynamic loader instead of glibc ld for
different reasons. They mmap() executable memory area, assemble code
from different '.so' and '.o' files then do the relocation and code
fixing by itself. Since the memory area is not file-backended, perf is
unable to handle symbol information in those files.

Actually, it is not hard for us to create a /tmp/perf-%d.map file from
those ELF objects then utilize the JIT interface. However, without this
series of patches, dwarf unwind information is lost. We are unable to
unwind stack recorded by --call-graph=dwarf if they are compiled without
frame pointer. In addition, we are unable to use annotation to analysis
instruction level histogram.

This series of patches solve this problem by introducing
'--map-adjustment' argument and let users directly hint perf-report
about the private mapping which known to be copied from ELF files.

Patch 1/4: fix a bug in unwind hooks.
Patch 2/4: extracts common code from machine__process_mmap2_event and
machine__process_mmap_event, create machine_map_new().
Patch 3/4: the main part of this series. The usage of the newly
introduced argument is described in the commit message of
that patch. It also update document for the argument.
Patch 4/4: Allows libunwind to try to read from user provided dso even
the required address is not actually mapped.

Wang Nan (4):
perf tools: unwind: ensure unwind hooks return negative errorno.
perf tools: introduce machine_map_new to merge mmap/mmap2 processing
code.
perf tools: report: introduce --map-adjustment argument.
perf tools: unwinding: try to read from map_adj for a unmapped
address.

tools/perf/Documentation/perf-report.txt | 11 +
tools/perf/builtin-report.c | 2 +
tools/perf/util/machine.c | 355 ++++++++++++++++++++++++++++++-
tools/perf/util/machine.h | 3 +
tools/perf/util/unwind-libunwind.c | 28 ++-
5 files changed, 383 insertions(+), 16 deletions(-)

--
1.8.3.4