xref: /linux/tools/perf/tests/shell/trace_btf_general.sh (revision 7685b334d1e4927cc73b62c65293ba65748d9c52)
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