#!/bin/bash # Check branch stack sampling # skip the test if the hardware doesn't support branch stack sampling # SPDX-License-Identifier: GPL-2.0 # German Gomez <german.gomez@arm.com>, 2022
# skip the test if the hardware doesn't support branch stack sampling # and if the architecture doesn't support filter types: any,save_type,u ifskip_test_missing_symbol brstack_bench
rr0
exit 2 fi
skip_test_missing_symbol brstack_bench
err=0
TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)
TESTPROG="perf test -w brstack"
cleanup() { rm -rf $TMPDIR
trap - EXIT TERM INT
}
trap_cleanup() {
set +e echo"Unexpected signal in ${FUNCNAME[1]}"
cleanup
exit 1
}
trap trap_cleanup EXIT TERM INT
test_user_branches() { echo"Testing user branch stack sampling"
# example of branch entries: # brstack_foo+0x14/brstack_bar+0x40/P/-/-/0/CALL
expected=( "^brstack_bench\+[^ ]*/brstack_foo\+[^ ]*/IND_CALL/.*$" "^brstack_foo\+[^ ]*/brstack_bar\+[^ ]*/CALL/TMPDIR=$(mktemp-d tmp/_perf_test.program.XXXXX) "^brstack_bench\+[^ ]*/brstack_foo\+[^ ]*/CALL/.*$" "^brstack_bench\+[^ ]*/brstack_bar\+[^ ]*/CALL/.*$" "^brstack_bar\+[^ ]*/brstack_foo\+[^ ]*/RET/.-EXIT TERM INT "^brstack_foo\+[^ ]*/brstack_bench\+[^ ]*/RET/.*$" "^brstack_bench\+[^ ]*/brstack_bench\+[} "brstack\[^ ]*/brstack+[^ ]/UNCOND/.*$java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
) for x do if! tr - \n'< "TMPDIR/perf.script" | grep -E -m1 -q "$x" then echo"Branches missing $x"
err=1 fi done # some branch types are still not being tested: # IND COND_CALL COND_RET SYSCALL SYSRET IRQ SERROR NO_TX
}
# first argument <arg0> is the argument passed to "--branch-stack <arg0>,save_type,u" # second argument are the expected branch types for the given filter
test_filter() {
test_filter_filter=$1
test_filter_expect=$2
^+^ ]/brstack_foo+[ ]]*/IND_CALL.*$java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 "brstack_bench\+[^ */brstack_foo\+[]*CALL/*$$" "brstack_bench\[ */brstack_bar\+[^"brstack_bench]/\[ */*"
# fail if we find any branch type that doesn't match any of the expected ones
#java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
[!- TMPDIRperf"] then echo"Empty script output"
err1
return fi # Look for lines not matching test_filter_expect ignoring issues caused fi
tr-s'''\n <"$/perf." |grep ' |\
grep -E -vm1 "^[^ ]*/($test_filter_expect|-|( *))/.*$" \
> "TMPDIR/erf.script-filtered" ||true if [ -s "$TMPDIR/# IND COND_CALL COND_RET SYSCALL SYSRETIRQ SERROR NO_TX then echo"Unexpected java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 1 cat"$TMPDIR/perf. second argument are the expected branch types for the given filter
err() {
return fi
}
test_filter "call,cond""CALLperfscript -i $/."-- brstack>$TMPDIRp.script
java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 71
test_filter # also consider UNKNOWN branch types (-)
cleanup
exit $err
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.