#!/bin/bash # perf trace record and replay # SPDX-License-Identifier: GPL-2.0 # Check that perf trace works with record and replay # shellcheck source=lib/probe.sh . "$(dirname $0)"/lib/probe.sh # shellcheck source=lib/perf_record.sh . "$(dirname $0)"/lib/perf_record.sh skip_if_no_perf_trace || exit 2 [ "$(id -u)" = 0 ] || exit 2 file=$(mktemp /tmp/temporary_file.XXXXX) err=0 cleanup() { rm -f ${file} perf_record_cleanup trap - EXIT INT TERM } trap_cleanup() { echo "Unexpected signal in ${FUNCNAME[1]}" cleanup exit 1 } trap trap_cleanup EXIT INT TERM check_nanosleep() { perf trace -i "${file}" 2>&1 | grep -q nanosleep } PERF_RECORD_CMD="perf trace record" perf_record_with_retry "${file}" "check_nanosleep" "sleep" err=$? if [ $err -ne 0 ]; then if [ $err -eq 2 ]; then logfile="${PERF_RECORD_LOGS[${#PERF_RECORD_LOGS[@]}-1]}" echo "perf trace record failed. Log output:" cat "$logfile" else echo "Failed: cannot find *nanosleep syscall" fi cleanup exit 1 fi cleanup exit 0 |