1 #!/bin/bash !! 1 #!/bin/sh 2 # perf annotate basic tests 2 # perf annotate basic tests 3 # SPDX-License-Identifier: GPL-2.0 3 # SPDX-License-Identifier: GPL-2.0 4 4 5 set -e 5 set -e 6 6 7 shelldir=$(dirname "$0") 7 shelldir=$(dirname "$0") 8 8 9 # shellcheck source=lib/perf_has_symbol.sh 9 # shellcheck source=lib/perf_has_symbol.sh 10 . "${shelldir}"/lib/perf_has_symbol.sh 10 . "${shelldir}"/lib/perf_has_symbol.sh 11 11 12 testsym="noploop" 12 testsym="noploop" 13 13 14 skip_test_missing_symbol ${testsym} 14 skip_test_missing_symbol ${testsym} 15 15 16 err=0 16 err=0 17 perfdata=$(mktemp /tmp/__perf_test.perf.data.X 17 perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX) 18 perfout=$(mktemp /tmp/__perf_test.perf.out.XXX 18 perfout=$(mktemp /tmp/__perf_test.perf.out.XXXXX) 19 testprog="perf test -w noploop" 19 testprog="perf test -w noploop" 20 # disassembly format: "percent : offset: instr 20 # disassembly format: "percent : offset: instruction (operands ...)" 21 disasm_regex="[0-9]*\.[0-9]* *: *\w*: *\w*" 21 disasm_regex="[0-9]*\.[0-9]* *: *\w*: *\w*" 22 22 23 cleanup() { 23 cleanup() { 24 rm -rf "${perfdata}" "${perfout}" 24 rm -rf "${perfdata}" "${perfout}" 25 rm -rf "${perfdata}".old 25 rm -rf "${perfdata}".old 26 26 27 trap - EXIT TERM INT 27 trap - EXIT TERM INT 28 } 28 } 29 29 30 trap_cleanup() { 30 trap_cleanup() { 31 echo "Unexpected signal in ${FUNCNAME[1]}" << 32 cleanup 31 cleanup 33 exit 1 32 exit 1 34 } 33 } 35 trap trap_cleanup EXIT TERM INT 34 trap trap_cleanup EXIT TERM INT 36 35 37 test_basic() { 36 test_basic() { 38 echo "Basic perf annotate test" 37 echo "Basic perf annotate test" 39 if ! perf record -o "${perfdata}" ${testprog 38 if ! perf record -o "${perfdata}" ${testprog} 2> /dev/null 40 then 39 then 41 echo "Basic annotate [Failed: perf record] 40 echo "Basic annotate [Failed: perf record]" 42 err=1 41 err=1 43 return 42 return 44 fi 43 fi 45 44 46 # Generate the annotated output file 45 # Generate the annotated output file 47 perf annotate -i "${perfdata}" --stdio 2> /d 46 perf annotate -i "${perfdata}" --stdio 2> /dev/null > "${perfout}" 48 47 49 # check if it has the target symbol 48 # check if it has the target symbol 50 if ! grep "${testsym}" "${perfout}" 49 if ! grep "${testsym}" "${perfout}" 51 then 50 then 52 echo "Basic annotate [Failed: missing targ 51 echo "Basic annotate [Failed: missing target symbol]" 53 err=1 52 err=1 54 return 53 return 55 fi 54 fi 56 55 57 # check if it has the disassembly lines 56 # check if it has the disassembly lines 58 if ! grep "${disasm_regex}" "${perfout}" 57 if ! grep "${disasm_regex}" "${perfout}" 59 then 58 then 60 echo "Basic annotate [Failed: missing disa 59 echo "Basic annotate [Failed: missing disasm output from default disassembler]" 61 err=1 60 err=1 62 return 61 return 63 fi 62 fi 64 63 65 # check again with a target symbol name 64 # check again with a target symbol name 66 if ! perf annotate -i "${perfdata}" "${tests 65 if ! perf annotate -i "${perfdata}" "${testsym}" 2> /dev/null | \ 67 grep -m 3 "${disasm_regex}" 66 grep -m 3 "${disasm_regex}" 68 then 67 then 69 echo "Basic annotate [Failed: missing disa 68 echo "Basic annotate [Failed: missing disasm output when specifying the target symbol]" 70 err=1 69 err=1 71 return 70 return 72 fi 71 fi 73 72 74 # check one more with external objdump tool 73 # check one more with external objdump tool (forced by --objdump option) 75 if ! perf annotate -i "${perfdata}" --objdum 74 if ! perf annotate -i "${perfdata}" --objdump=objdump 2> /dev/null | \ 76 grep -m 3 "${disasm_regex}" 75 grep -m 3 "${disasm_regex}" 77 then 76 then 78 echo "Basic annotate [Failed: missing disa 77 echo "Basic annotate [Failed: missing disasm output from non default disassembler (using --objdump)]" 79 err=1 78 err=1 80 return 79 return 81 fi 80 fi 82 echo "Basic annotate test [Success]" 81 echo "Basic annotate test [Success]" 83 } 82 } 84 83 85 test_basic 84 test_basic 86 85 87 cleanup 86 cleanup 88 exit $err 87 exit $err
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.