perf annotate: Treat 'call' instruction as stack operation
authorNamhyung Kim <namhyung@kernel.org>
Mon, 9 Sep 2024 21:42:50 +0000 (14:42 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 10 Sep 2024 20:32:47 +0000 (17:32 -0300)
I found some portion of mem-store events sampled on CALL instruction
which has no memory access.  But it actually saves a return address
into stack.  It should be considered as a stack operation like RET
instruction.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20240909214251.3033827-1-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/annotate.c

index 4990c70b1794d7a9bc716c4620e3c1f1c3ee088b..1a347a711dcf5c62d0b625e24e2dfa22ac5dd9b7 100644 (file)
@@ -2474,6 +2474,7 @@ static bool is_stack_operation(struct arch *arch, struct disasm_line *dl)
        if (arch__is(arch, "x86")) {
                if (!strncmp(dl->ins.name, "push", 4) ||
                    !strncmp(dl->ins.name, "pop", 3) ||
+                   !strncmp(dl->ins.name, "call", 4) ||
                    !strncmp(dl->ins.name, "ret", 3))
                        return true;
        }