]> git.baikalelectronics.ru Git - kernel.git/commit
perf unwind: Fix libunwind when tid != pid
authorJohn Keeping <john@metanate.com>
Thu, 15 Aug 2019 10:01:45 +0000 (11:01 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 16 Aug 2019 15:25:57 +0000 (12:25 -0300)
commit9a55ad2a10e035bb85b92997560c30b6503c0619
treece74ca54458a9af2ba6a96d09175b682a2c9c86c
parent412ca51843d41aff0009958f05e1df04ad812bf6
perf unwind: Fix libunwind when tid != pid

Commit 2936209946b7 ("perf map: Synthesize maps only for thread group
leader") changed the recording side so that we no longer get mmap events
for threads other than the thread group leader (when synthesising these
events for threads which exist before perf is started).

When a file recorded after this change is loaded, the lack of mmap
records mean that unwinding is not set up for any other threads.

This can be seen in a simple record/report scenario:

perf record --call-graph=dwarf -t $TID
perf report

If $TID is a process ID then the report will show call graphs, but if
$TID is a secondary thread the output is as if --call-graph=none was
specified.

Following the rationale in that commit, move the libunwind fields into
struct map_groups and update the libunwind functions to take this
instead of the struct thread.  This is only required for
unwind__finish_access which must now be called from map_groups__delete
and the others are changed for symmetry.

Note that unwind__get_entries keeps the thread argument since it is
required for symbol lookup and the libdw unwind provider uses the thread
ID.

Signed-off-by: John Keeping <john@metanate.com>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Fixes: 2936209946b7 ("perf map: Synthesize maps only for thread group leader")
Link: http://lkml.kernel.org/r/20190815100146.28842-2-john@metanate.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/map.c
tools/perf/util/map_groups.h
tools/perf/util/thread.c
tools/perf/util/thread.h
tools/perf/util/unwind-libunwind-local.c
tools/perf/util/unwind-libunwind.c
tools/perf/util/unwind.h