File Index
Files and directories
Sign in
FILE

script_dlfilter.sh

File preview with syntax highlighting.

linux-6.19.14/tools/perf/tests/shell/script_dlfilter.sh BASH
  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.