perf session: Print branch stack entry type in --dump-raw-trace
authorJames Clark <james.clark@arm.com>
Mon, 7 Mar 2022 17:19:15 +0000 (17:19 +0000)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 7 Mar 2022 17:51:19 +0000 (14:51 -0300)
This can help with debugging issues. It only prints when -j save_type
is used otherwise an empty string is printed.

Before the change:

  101603801707130 0xa70 [0x630]: PERF_RECORD_SAMPLE(IP, 0x2): 1108/1108: 0xffff9c1df24c period: 10694 addr: 0
  ... branch stack: nr:64
  .....  0: 0000ffff9c26029c -> 0000ffff9c26f340 0 cycles  P   0
  .....  1: 0000ffff9c2601bc -> 0000ffff9c26f340 0 cycles  P   0

After the change:

  101603801707130 0xa70 [0x630]: PERF_RECORD_SAMPLE(IP, 0x2): 1108/1108: 0xffff9c1df24c period: 10694 addr: 0
  ... branch stack: nr:64
  .....  0: 0000ffff9c26029c -> 0000ffff9c26f340 0 cycles  P   0 CALL
  .....  1: 0000ffff9c2601bc -> 0000ffff9c26f340 0 cycles  P   0 IND_CALL

Signed-off-by: James Clark <james.clark@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: German Gomez <german.gomez@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20220307171917.2555829-3-james.clark@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/session.c

index f54282d..3b8dfe6 100644 (file)
@@ -1159,14 +1159,15 @@ static void branch_stack__printf(struct perf_sample *sample, bool callstack)
                struct branch_entry *e = &entries[i];
 
                if (!callstack) {
-                       printf("..... %2"PRIu64": %016" PRIx64 " -> %016" PRIx64 " %hu cycles %s%s%s%s %x\n",
+                       printf("..... %2"PRIu64": %016" PRIx64 " -> %016" PRIx64 " %hu cycles %s%s%s%s %x %s\n",
                                i, e->from, e->to,
                                (unsigned short)e->flags.cycles,
                                e->flags.mispred ? "M" : " ",
                                e->flags.predicted ? "P" : " ",
                                e->flags.abort ? "A" : " ",
                                e->flags.in_tx ? "T" : " ",
-                               (unsigned)e->flags.reserved);
+                               (unsigned)e->flags.reserved,
+                               e->flags.type ? branch_type_name(e->flags.type) : "");
                } else {
                        printf("..... %2"PRIu64": %016" PRIx64 "\n",
                                i, i > 0 ? e->from : e->to);