Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114#!/bin/bash# 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=0perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)perfout=$(mktemp /tmp/__perf_test.perf.out.XXXXX)testprog="perf test -w noploop"# disassembly format: "percent : offset: instruction (operands ...)"disasm_regex="[0-9]*\.[0-9]* *: *\w*: *\w*"
cleanup() { rm -rf "${perfdata}" "${perfout}" rm -rf "${perfdata}".old
trap - EXIT TERM INT}
trap_cleanup() { echo "Unexpected signal in ${FUNCNAME[1]}" cleanup exit 1}trap trap_cleanup EXIT TERM INT
test_basic() { mode=$1 echo "${mode} perf annotate test" if [ "x${mode}" == "xBasic" ] then perf record -o "${perfdata}" ${testprog} 2> /dev/null else perf record -o - ${testprog} 2> /dev/null > "${perfdata}" fi if [ "x$?" != "x0" ] then echo "${mode} annotate [Failed: perf record]" err=1 return fi
# Generate the annotated output file if [ "x${mode}" == "xBasic" ] then perf annotate --no-demangle -i "${perfdata}" --stdio --percent-limit 10 2> /dev/null > "${perfout}" else perf annotate --no-demangle -i - --stdio 2> /dev/null --percent-limit 10 < "${perfdata}" > "${perfout}" fi
# check if it has the target symbol if ! grep -q "${testsym}" "${perfout}" then echo "${mode} annotate [Failed: missing target symbol]" cat "${perfout}" err=1 return fi
# check if it has the disassembly lines if ! grep -q "${disasm_regex}" "${perfout}" then echo "${mode} annotate [Failed: missing disasm output from default disassembler]" err=1 return fi
# check again with a target symbol name if [ "x${mode}" == "xBasic" ] then perf annotate --no-demangle -i "${perfdata}" "${testsym}" 2> /dev/null > "${perfout}" else perf annotate --no-demangle -i - "${testsym}" 2> /dev/null < "${perfdata}" > "${perfout}" fi
if ! head -250 "${perfout}"| grep -q -m 3 "${disasm_regex}" then echo "${mode} annotate [Failed: missing disasm output when specifying the target symbol]" err=1 return fi
# check one more with external objdump tool (forced by --objdump option) if [ "x${mode}" == "xBasic" ] then perf annotate --no-demangle -i "${perfdata}" --percent-limit 10 --objdump=objdump 2> /dev/null > "${perfout}" else perf annotate --no-demangle -i - "${testsym}" --percent-limit 10 --objdump=objdump 2> /dev/null < "${perfdata}" > "${perfout}" fi if ! grep -q -m 3 "${disasm_regex}" "${perfout}" then echo "${mode} annotate [Failed: missing disasm output from non default disassembler (using --objdump)]" err=1 return fi echo "${mode} annotate test [Success]"}
test_basic Basictest_basic Pipe
cleanupexit $err