10255338dSHoward Chu#!/bin/bash 20255338dSHoward Chu# perf trace BTF general tests 30255338dSHoward Chu# SPDX-License-Identifier: GPL-2.0 40255338dSHoward Chu 50255338dSHoward Chuerr=0 60255338dSHoward Chuset -e 70255338dSHoward Chu 8*58f4f294SJames Clark# shellcheck source=lib/probe.sh 90255338dSHoward Chu. "$(dirname $0)"/lib/probe.sh 100255338dSHoward Chu 110255338dSHoward Chufile1=$(mktemp /tmp/file1_XXXX) 120255338dSHoward Chufile2=$(echo $file1 | sed 's/file1/file2/g') 130255338dSHoward Chu 140255338dSHoward Chubuffer="buffer content" 150255338dSHoward Chuperf_config_tmp=$(mktemp /tmp/.perfconfig_XXXXX) 160255338dSHoward Chu 170255338dSHoward Chutrap cleanup EXIT TERM INT HUP 180255338dSHoward Chu 190255338dSHoward Chucheck_vmlinux() { 200255338dSHoward Chu echo "Checking if vmlinux BTF exists" 210255338dSHoward Chu if [ ! -f /sys/kernel/btf/vmlinux ] 220255338dSHoward Chu then 230255338dSHoward Chu echo "Skipped due to missing vmlinux BTF" 240255338dSHoward Chu return 2 250255338dSHoward Chu fi 260255338dSHoward Chu return 0 270255338dSHoward Chu} 280255338dSHoward Chu 290255338dSHoward Chutrace_test_string() { 300255338dSHoward Chu echo "Testing perf trace's string augmentation" 310255338dSHoward Chu if ! perf trace -e renameat* --max-events=1 -- mv ${file1} ${file2} 2>&1 | \ 320255338dSHoward Chu grep -q -E "^mv/[0-9]+ renameat(2)?\(.*, \"${file1}\", .*, \"${file2}\", .*\) += +[0-9]+$" 330255338dSHoward Chu then 340255338dSHoward Chu echo "String augmentation test failed" 350255338dSHoward Chu err=1 360255338dSHoward Chu fi 370255338dSHoward Chu} 380255338dSHoward Chu 390255338dSHoward Chutrace_test_buffer() { 400255338dSHoward Chu echo "Testing perf trace's buffer augmentation" 410255338dSHoward Chu # echo will insert a newline (\10) at the end of the buffer 420255338dSHoward Chu if ! perf trace -e write --max-events=1 -- echo "${buffer}" 2>&1 | \ 430255338dSHoward Chu grep -q -E "^echo/[0-9]+ write\([0-9]+, ${buffer}.*, [0-9]+\) += +[0-9]+$" 440255338dSHoward Chu then 450255338dSHoward Chu echo "Buffer augmentation test failed" 460255338dSHoward Chu err=1 470255338dSHoward Chu fi 480255338dSHoward Chu} 490255338dSHoward Chu 500255338dSHoward Chutrace_test_struct_btf() { 510255338dSHoward Chu echo "Testing perf trace's struct augmentation" 520255338dSHoward Chu if ! perf trace -e clock_nanosleep --force-btf --max-events=1 -- sleep 1 2>&1 | \ 530255338dSHoward Chu grep -q -E "^sleep/[0-9]+ clock_nanosleep\(0, 0, \{1,\}, 0x[0-9a-f]+\) += +[0-9]+$" 540255338dSHoward Chu then 550255338dSHoward Chu echo "BTF struct augmentation test failed" 560255338dSHoward Chu err=1 570255338dSHoward Chu fi 580255338dSHoward Chu} 590255338dSHoward Chu 600255338dSHoward Chucleanup() { 610255338dSHoward Chu rm -rf ${file1} ${file2} ${perf_config_tmp} 620255338dSHoward Chu} 630255338dSHoward Chu 640255338dSHoward Chutrap_cleanup() { 650255338dSHoward Chu echo "Unexpected signal in ${FUNCNAME[1]}" 660255338dSHoward Chu cleanup 670255338dSHoward Chu exit 1 680255338dSHoward Chu} 690255338dSHoward Chu 700255338dSHoward Chu# don't overwrite user's perf config 710255338dSHoward Chutrace_config() { 720255338dSHoward Chu export PERF_CONFIG=${perf_config_tmp} 730255338dSHoward Chu perf config trace.show_arg_names=false trace.show_duration=false \ 740255338dSHoward Chu trace.show_timestamp=false trace.args_alignment=0 750255338dSHoward Chu} 760255338dSHoward Chu 770255338dSHoward Chuskip_if_no_perf_trace || exit 2 780255338dSHoward Chucheck_vmlinux || exit 2 790255338dSHoward Chu 800255338dSHoward Chutrace_config 810255338dSHoward Chu 820255338dSHoward Chutrace_test_string 830255338dSHoward Chu 840255338dSHoward Chuif [ $err = 0 ]; then 850255338dSHoward Chu trace_test_buffer 860255338dSHoward Chufi 870255338dSHoward Chu 880255338dSHoward Chuif [ $err = 0 ]; then 890255338dSHoward Chu trace_test_struct_btf 900255338dSHoward Chufi 910255338dSHoward Chu 920255338dSHoward Chucleanup 930255338dSHoward Chu 940255338dSHoward Chuexit $err 95