1#!/bin/bash 2# perf trace BTF general tests 3# SPDX-License-Identifier: GPL-2.0 4 5err=0 6set -e 7 8# shellcheck source=lib/probe.sh 9. "$(dirname $0)"/lib/probe.sh 10 11file1=$(mktemp /tmp/file1_XXXX) 12file2=$(echo $file1 | sed 's/file1/file2/g') 13 14buffer="buffer content" 15perf_config_tmp=$(mktemp /tmp/.perfconfig_XXXXX) 16 17trap cleanup EXIT TERM INT HUP 18 19check_vmlinux() { 20 echo "Checking if vmlinux BTF exists" 21 if [ ! -f /sys/kernel/btf/vmlinux ] 22 then 23 echo "Skipped due to missing vmlinux BTF" 24 return 2 25 fi 26 return 0 27} 28 29trace_test_string() { 30 echo "Testing perf trace's string augmentation" 31 if ! perf trace -e renameat* --max-events=1 -- mv ${file1} ${file2} 2>&1 | \ 32 grep -q -E "^mv/[0-9]+ renameat(2)?\(.*, \"${file1}\", .*, \"${file2}\", .*\) += +[0-9]+$" 33 then 34 echo "String augmentation test failed" 35 err=1 36 fi 37} 38 39trace_test_buffer() { 40 echo "Testing perf trace's buffer augmentation" 41 # echo will insert a newline (\10) at the end of the buffer 42 if ! perf trace -e write --max-events=1 -- echo "${buffer}" 2>&1 | \ 43 grep -q -E "^echo/[0-9]+ write\([0-9]+, ${buffer}.*, [0-9]+\) += +[0-9]+$" 44 then 45 echo "Buffer augmentation test failed" 46 err=1 47 fi 48} 49 50trace_test_struct_btf() { 51 echo "Testing perf trace's struct augmentation" 52 if ! perf trace -e clock_nanosleep --force-btf --max-events=1 -- sleep 1 2>&1 | \ 53 grep -q -E "^sleep/[0-9]+ clock_nanosleep\(0, 0, \{1,\}, 0x[0-9a-f]+\) += +[0-9]+$" 54 then 55 echo "BTF struct augmentation test failed" 56 err=1 57 fi 58} 59 60cleanup() { 61 rm -rf ${file1} ${file2} ${perf_config_tmp} 62} 63 64trap_cleanup() { 65 echo "Unexpected signal in ${FUNCNAME[1]}" 66 cleanup 67 exit 1 68} 69 70# don't overwrite user's perf config 71trace_config() { 72 export PERF_CONFIG=${perf_config_tmp} 73 perf config trace.show_arg_names=false trace.show_duration=false \ 74 trace.show_timestamp=false trace.args_alignment=0 75} 76 77skip_if_no_perf_trace || exit 2 78check_vmlinux || exit 2 79 80trace_config 81 82trace_test_string 83 84if [ $err = 0 ]; then 85 trace_test_buffer 86fi 87 88if [ $err = 0 ]; then 89 trace_test_struct_btf 90fi 91 92cleanup 93 94exit $err 95