1#!/bin/bash -e 2# CoreSight deterministic workload decode (exclusive) 3 4# SPDX-License-Identifier: GPL-2.0 5 6# If CoreSight is not available, skip the test 7perf list pmu | grep -q cs_etm || exit 2 8 9tmpdir=$(mktemp -d /tmp/__perf_test.coresight_deterministic.XXXXX) 10 11cleanup() { 12 rm -rf "${tmpdir}" 13 trap - EXIT TERM INT 14} 15 16trap_cleanup() { 17 cleanup 18 exit 1 19} 20trap trap_cleanup EXIT TERM INT 21 22cf="$tmpdir/ctl" 23af="$tmpdir/ack" 24mkfifo "$cf" "$af" 25 26# Start disabled and use the control FIFO to only record the workload and not 27# startup. 28perf record -o "$tmpdir/data" -e cs_etm//u -D -1 --control fifo:"$cf","$af" -- \ 29 perf test --record-ctl fifo:"$cf","$af" -w deterministic > /dev/null 2>&1 30 31perf script -i "$tmpdir/data" --itrace=i1i -F ip,srcline | \ 32 grep "deterministic.c" | uniq > "$tmpdir/script" 2>/dev/null 33 34 35# Remove brace lines and call sites as they may not be hit or may have 36# extra hits after returning, depending on the compiler. 37sed -i \ 38 -e '/deterministic.c:8$/d' \ 39 -e '/deterministic.c:12$/d' \ 40 -e '/deterministic.c:15$/d' \ 41 -e '/deterministic.c:19$/d' \ 42 -e '/deterministic.c:23$/d' \ 43 -e '/deterministic.c:28$/d' \ 44 -e '/deterministic.c:34$/d' \ 45 -e '/deterministic.c:36$/d' \ 46 -e '/deterministic.c:37$/d' \ 47 "$tmpdir/script" 48 49cat > "$tmpdir/expected" << EOF 50 deterministic.c:24 51 deterministic.c:25 52 deterministic.c:26 53 deterministic.c:9 54 deterministic.c:10 55 deterministic.c:11 56 deterministic.c:30 57 deterministic.c:31 58 deterministic.c:32 59 deterministic.c:16 60 deterministic.c:17 61 deterministic.c:18 62EOF 63 64if ! diff -q "$tmpdir/script" "$tmpdir/expected"; then 65 echo "FAIL: line numbers don't match expected: " 66 head -n 100 "$tmpdir/script" 67 cleanup 68 exit 1 69fi 70 71cleanup 72exit 0 73