FILE
script_dlfilter.sh
File preview with syntax highlighting.
linux-6.19.14/tools/perf/tests/shell/script_dlfilter.sh
1#!/bin/bash 2# perf script --dlfilter tests 3# SPDX-License-Identifier: GPL-2.0 4 5set -e 6 7shelldir=$(dirname "$0") 8# shellcheck source=lib/setup_python.sh 9. "${shelldir}"/lib/setup_python.sh 10 11# skip if there's no compiler 12if ! [ -x "$(command -v cc)" ]; then 13 echo "failed: no compiler, install gcc" 14 exit 2 15fi 16 17err=0 18perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX) 19dlfilter_c=$(mktemp /tmp/__perf_test.dlfilter.test.c.XXXXX) 20dlfilter_so=$(mktemp /tmp/__perf_test.dlfilter.so.XXXXX) 21 22cleanup() { 23 rm -f "${perfdata}" 24 rm -f "${dlfilter_c}" 25 rm -f "${dlfilter_so}" 26 rm -f "${dlfilter_so}.o" 27 28 trap - EXIT TERM INT 29} 30 31trap_cleanup() { 32 echo "Unexpected signal in ${FUNCNAME[1]}" 33 cleanup 34 exit 1 35} 36trap trap_cleanup EXIT TERM INT 37 38cat <<EOF > "${dlfilter_c}" 39#include <perf/perf_dlfilter.h> 40#include <string.h> 41#include <stdio.h> 42 43struct perf_dlfilter_fns perf_dlfilter_fns; 44 45int filter_event(void *data, const struct perf_dlfilter_sample *sample, void *ctx) 46{ 47 const struct perf_dlfilter_al *al; 48 49 if (!sample->ip) 50 return 0; 51 52 al = perf_dlfilter_fns.resolve_ip(ctx); 53 if (!al || !al->sym || strcmp(al->sym, "test_loop")) 54 return 1; 55 56 return 0; 57} 58EOF 59 60test_dlfilter() { 61 echo "Basic --dlfilter test" 62 # Generate perf.data file 63 if ! perf record -o "${perfdata}" perf test -w thloop 1 2> /dev/null 64 then 65 echo "Basic --dlfilter test [Failed record]" 66 err=1 67 return 68 fi 69 70 # Build the dlfilter 71 if ! cc -c -I tools/perf/include -fpic -x c "${dlfilter_c}" -o "${dlfilter_so}.o" 72 then 73 echo "Basic --dlfilter test [Failed to build dlfilter object]" 74 err=1 75 return 76 fi 77 78 if ! cc -shared -o "${dlfilter_so}" "${dlfilter_so}.o" 79 then 80 echo "Basic --dlfilter test [Failed to link dlfilter shared object]" 81 err=1 82 return 83 fi 84 85 # Check that the output contains "test_loop" and nothing else 86 if ! perf script -i "${perfdata}" --dlfilter "${dlfilter_so}" | grep -q "test_loop" 87 then 88 echo "Basic --dlfilter test [Failed missing output]" 89 err=1 90 return 91 fi 92 93 # The filter should filter out everything except test_loop, so ensure no other symbols are present 94 # This is a simple check; we could be more rigorous 95 if perf script -i "${perfdata}" --dlfilter "${dlfilter_so}" | grep -v "test_loop" | grep -q "perf" 96 then 97 echo "Basic --dlfilter test [Failed filtering]" 98 err=1 99 return 100 fi 101 102 echo "Basic --dlfilter test [Success]" 103} 104 105test_dlfilter 106cleanup 107exit $err
~/
Read-only file preview.