mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
perf test: cs-etm: Test Coresight disassembly script
Run a few samples through the disassembly script and check to see that at least one branch instruction is printed. Signed-off-by: James Clark <james.clark@linaro.org> Reviewed-by: Leo Yan <leo.yan@arm.com> Tested-by: Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com> Cc: Ben Gainey <ben.gainey@arm.com> Cc: Suzuki K Poulose <suzuki.poulose@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Mike Leach <mike.leach@linaro.org> Cc: Ruidong Tian <tianruidong@linux.alibaba.com> Cc: Leo Yan <leo.yan@linux.dev> Cc: Benjamin Gray <bgray@linux.ibm.com> Cc: linux-arm-kernel@lists.infradead.org Cc: coresight@lists.linaro.org Cc: John Garry <john.g.garry@oracle.com> Cc: scclevenger@os.amperecomputing.com Link: https://lore.kernel.org/r/20240916135743.1490403-8-james.clark@linaro.org Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
66dd3b539e
commit
eb0a59e9e1
65
tools/perf/tests/shell/test_arm_coresight_disasm.sh
Executable file
65
tools/perf/tests/shell/test_arm_coresight_disasm.sh
Executable file
|
|
@ -0,0 +1,65 @@
|
|||
#!/bin/sh
|
||||
# Check Arm CoreSight disassembly script completes without errors
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# The disassembly script reconstructs ranges of instructions and gives these to objdump to
|
||||
# decode. objdump doesn't like ranges that go backwards, but these are a good indication
|
||||
# that decoding has gone wrong either in OpenCSD, Perf or in the range reconstruction in
|
||||
# the script. Test all 3 parts are working correctly by running the script.
|
||||
|
||||
skip_if_no_cs_etm_event() {
|
||||
perf list | grep -q 'cs_etm//' && return 0
|
||||
|
||||
# cs_etm event doesn't exist
|
||||
return 2
|
||||
}
|
||||
|
||||
skip_if_no_cs_etm_event || exit 2
|
||||
|
||||
# Assume an error unless we reach the very end
|
||||
set -e
|
||||
glb_err=1
|
||||
|
||||
perfdata_dir=$(mktemp -d /tmp/__perf_test.perf.data.XXXXX)
|
||||
perfdata=${perfdata_dir}/perf.data
|
||||
file=$(mktemp /tmp/temporary_file.XXXXX)
|
||||
# Relative path works whether it's installed or running from repo
|
||||
script_path=$(dirname "$0")/../../scripts/python/arm-cs-trace-disasm.py
|
||||
|
||||
cleanup_files()
|
||||
{
|
||||
set +e
|
||||
rm -rf ${perfdata_dir}
|
||||
rm -f ${file}
|
||||
trap - EXIT TERM INT
|
||||
exit $glb_err
|
||||
}
|
||||
|
||||
trap cleanup_files EXIT TERM INT
|
||||
|
||||
# Ranges start and end on branches, so check for some likely branch instructions
|
||||
sep="\s\|\s"
|
||||
branch_search="\sbl${sep}b${sep}b.ne${sep}b.eq${sep}cbz\s"
|
||||
|
||||
## Test kernel ##
|
||||
if [ -e /proc/kcore ]; then
|
||||
echo "Testing kernel disassembly"
|
||||
perf record -o ${perfdata} -e cs_etm//k --kcore -- touch $file > /dev/null 2>&1
|
||||
perf script -i ${perfdata} -s python:${script_path} -- \
|
||||
-d --stop-sample=30 2> /dev/null > ${file}
|
||||
grep -q -e ${branch_search} ${file}
|
||||
echo "Found kernel branches"
|
||||
else
|
||||
# kcore is required for correct kernel decode due to runtime code patching
|
||||
echo "No kcore, skipping kernel test"
|
||||
fi
|
||||
|
||||
## Test user ##
|
||||
echo "Testing userspace disassembly"
|
||||
perf record -o ${perfdata} -e cs_etm//u -- touch $file > /dev/null 2>&1
|
||||
perf script -i ${perfdata} -s python:${script_path} -- \
|
||||
-d --stop-sample=30 2> /dev/null > ${file}
|
||||
grep -q -e ${branch_search} ${file}
|
||||
echo "Found userspace branches"
|
||||
|
||||
glb_err=0
|
||||
Loading…
Reference in New Issue
Block a user