xref: /linux/tools/perf/tests/shell/trace_btf_enum.sh (revision 16cd1c2657762c62a00ac78eecaa25868f7e601b)
1#!/bin/sh
2# perf trace enum augmentation tests
3# SPDX-License-Identifier: GPL-2.0
4
5err=0
6set -e
7
8syscall="landlock_add_rule"
9non_syscall="timer:hrtimer_setup,timer:hrtimer_start"
10
11TESTPROG="perf test -w landlock"
12
13# shellcheck source=lib/probe.sh
14. "$(dirname $0)"/lib/probe.sh
15skip_if_no_perf_trace || exit 2
16[ "$(id -u)" = 0 ] || exit 2
17
18check_vmlinux() {
19  echo "Checking if vmlinux exists"
20  if ! ls /sys/kernel/btf/vmlinux 1>/dev/null 2>&1
21  then
22    echo "trace+enum test [Skipped missing vmlinux BTF support]"
23    err=2
24  fi
25}
26
27trace_landlock() {
28  echo "Tracing syscall ${syscall}"
29
30  # test flight just to see if landlock_add_rule is available
31  if ! perf trace $TESTPROG 2>&1 | grep -q landlock
32  then
33    echo "No landlock system call found, skipping to non-syscall tracing."
34    return
35  fi
36
37  if perf trace -e $syscall $TESTPROG 2>&1 | \
38     grep -q -E ".*landlock_add_rule\(ruleset_fd: 11, rule_type: (LANDLOCK_RULE_PATH_BENEATH|LANDLOCK_RULE_NET_PORT), rule_attr: 0x[a-f0-9]+, flags: 45\) = -1.*"
39  then
40    err=0
41  else
42    err=1
43  fi
44}
45
46trace_non_syscall() {
47  echo "Tracing non-syscall tracepoint ${non-syscall}"
48  if perf trace -e $non_syscall --max-events=1 2>&1 | \
49     grep -q -E '.*timer:hrtimer_.*\(.*mode: HRTIMER_MODE_.*\)$'
50  then
51    err=0
52  else
53    err=1
54  fi
55}
56
57check_vmlinux
58
59if [ $err = 0 ]; then
60  trace_landlock
61fi
62
63if [ $err = 0 ]; then
64  trace_non_syscall
65fi
66
67exit $err
68