From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>,
Ian Rogers <irogers@google.com>,
Kan Liang <kan.liang@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
linux-perf-users@vger.kernel.org
Subject: [PATCH] perf test: Add a new test for perf annotate
Date: Tue, 23 Apr 2024 17:12:31 -0700 [thread overview]
Message-ID: <20240424001231.849972-1-namhyung@kernel.org> (raw)
Add a basic perf annotate test
$ ./perf test annotate -vv
76: perf annotate basic tests:
--- start ---
test child forked, pid 846989
fbcd0-fbd55 l noploop
perf does have symbol 'noploop'
Basic perf annotate test
: 0 0xfbcd0 <noploop>:
0.00 : fbcd0: pushq %rbp
0.00 : fbcd1: movq %rsp, %rbp
0.00 : fbcd4: pushq %r12
0.00 : fbcd6: pushq %rbx
0.00 : fbcd7: movl $1, %ebx
0.00 : fbcdc: subq $0x10, %rsp
0.00 : fbce0: movq %fs:0x28, %rax
0.00 : fbce9: movq %rax, -0x18(%rbp)
0.00 : fbced: xorl %eax, %eax
0.00 : fbcef: testl %edi, %edi
0.00 : fbcf1: jle 0xfbd04
0.00 : fbcf3: movq (%rsi), %rdi
0.00 : fbcf6: movl $0xa, %edx
0.00 : fbcfb: xorl %esi, %esi
0.00 : fbcfd: callq 0x41920
0.00 : fbd02: movl %eax, %ebx
0.00 : fbd04: leaq -0x7b(%rip), %r12 # fbc90 <sighandler>
0.00 : fbd0b: movl $2, %edi
0.00 : fbd10: movq %r12, %rsi
0.00 : fbd13: callq 0x40a00
0.00 : fbd18: movl $0xe, %edi
0.00 : fbd1d: movq %r12, %rsi
0.00 : fbd20: callq 0x40a00
0.00 : fbd25: movl %ebx, %edi
0.00 : fbd27: callq 0x407c0
0.10 : fbd2c: movl 0x89785e(%rip), %eax # 993590 <done>
0.00 : fbd32: testl %eax, %eax
99.90 : fbd34: je 0xfbd2c
0.00 : fbd36: movq -0x18(%rbp), %rax
0.00 : fbd3a: subq %fs:0x28, %rax
0.00 : fbd43: jne 0xfbd50
0.00 : fbd45: addq $0x10, %rsp
0.00 : fbd49: xorl %eax, %eax
0.00 : fbd4b: popq %rbx
0.00 : fbd4c: popq %r12
0.00 : fbd4e: popq %rbp
0.00 : fbd4f: retq
0.00 : fbd50: callq 0x407e0
0.00 : fbcd0: pushq %rbp
0.00 : fbcd1: movq %rsp, %rbp
0.00 : fbcd4: pushq %r12
0.00 : fbcd0: push %rbp
0.00 : fbcd1: mov %rsp,%rbp
0.00 : fbcd4: push %r12
Basic annotate test [Success]
---- end(0) ----
76: perf annotate basic tests : Ok
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/tests/shell/annotate.sh | 83 ++++++++++++++++++++++++++++++
1 file changed, 83 insertions(+)
create mode 100755 tools/perf/tests/shell/annotate.sh
diff --git a/tools/perf/tests/shell/annotate.sh b/tools/perf/tests/shell/annotate.sh
new file mode 100755
index 000000000000..7820d13eebae
--- /dev/null
+++ b/tools/perf/tests/shell/annotate.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+# perf annotate basic tests
+# SPDX-License-Identifier: GPL-2.0
+
+set -e
+
+shelldir=$(dirname "$0")
+
+# shellcheck source=lib/perf_has_symbol.sh
+. "${shelldir}"/lib/perf_has_symbol.sh
+
+testsym="noploop"
+
+skip_test_missing_symbol ${testsym}
+
+err=0
+perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
+testprog="perf test -w noploop"
+# disassembly format: "percent : offset: instruction (operands ...)"
+disasm_regex="[0-9]*\.[0-9]* *: *\w*: *\w*"
+
+cleanup() {
+ rm -rf "${perfdata}"
+ rm -rf "${perfdata}".old
+
+ trap - EXIT TERM INT
+}
+
+trap_cleanup() {
+ cleanup
+ exit 1
+}
+trap trap_cleanup EXIT TERM INT
+
+test_basic() {
+ echo "Basic perf annotate test"
+ if ! perf record -o "${perfdata}" ${testprog} 2> /dev/null
+ then
+ echo "Basic annotate [Failed record]"
+ err=1
+ return
+ fi
+
+ # check if it has the target symbol
+ if ! perf annotate -i "${perfdata}" 2> /dev/null | grep "${testsym}"
+ then
+ echo "Basic annotate [Failed missing symbol]"
+ err=1
+ return
+ fi
+
+ # check if it has the disassembly lines
+ if ! perf annotate -i "${perfdata}" 2> /dev/null | grep "${disasm_regex}"
+ then
+ echo "Basic annotate [Failed missing disasm output]"
+ err=1
+ return
+ fi
+
+ # check again with a target symbol name
+ if ! perf annotate -i "${perfdata}" "${testsym}" 2> /dev/null | \
+ grep -m 3 "${disasm_regex}"
+ then
+ echo "Basic annotate [Failed missing disasm output]"
+ err=1
+ return
+ fi
+
+ # check one more with external objdump tool (forced by --objdump option)
+ if ! perf annotate -i "${perfdata}" --objdump=objdump 2> /dev/null | \
+ grep -m 3 "${disasm_regex}"
+ then
+ echo "Basic annotate [Failed missing disasm output from objdump]"
+ err=1
+ return
+ fi
+ echo "Basic annotate test [Success]"
+}
+
+test_basic
+
+cleanup
+exit $err
--
2.44.0.769.g3c40516874-goog
next reply other threads:[~2024-04-24 0:12 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-24 0:12 Namhyung Kim [this message]
2024-04-24 18:09 ` [PATCH] perf test: Add a new test for perf annotate Ian Rogers
2024-04-24 21:02 ` Arnaldo Carvalho de Melo
2024-04-24 22:48 ` Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240424001231.849972-1-namhyung@kernel.org \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).