perf tools: Improve thread_stack__event() for trace begin / end
authorAdrian Hunter <adrian.hunter@intel.com>
Thu, 20 Sep 2018 13:00:45 +0000 (16:00 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 20 Sep 2018 18:16:17 +0000 (15:16 -0300)
commit4d60e5e36aa6f11b4d9eadc5d2b94128f24870c7
treecdd74e3a541925cdfb47f0e440d84c1fe2d45760
parentff645daf30cafb6fa74bee9a73733700bac2aff7
perf tools: Improve thread_stack__event() for trace begin / end

thread_stack__event() is used to create call stacks, by keeping track of
calls and returns. Improve the handling of trace begin / end to allow
for a trace that ends in a call.

Previously, the Intel PT decoder would indicate begin / end by a branch
from / to zero. That hides useful information, in particular when a
trace ends with a call. Before remedying that, enhance the thread stack
so that it does not expect to see the 'return' for a 'call' that ends
the trace.

Committer notes:

Added this:

                return thread_stack__push(thread->ts, ret_addr,
-                                         flags && PERF_IP_FLAG_TRACE_END);
+                                         flags & PERF_IP_FLAG_TRACE_END);

To fix problem spotted by:

debian:9:            clang version 3.8.1-24 (tags/RELEASE_381/final)
debian:experimental: clang version 6.0.1-6 (tags/RELEASE_601/final)

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/20180920130048.31432-4-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/thread-stack.c