You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.3 KiB
55 lines
1.3 KiB
#!/bin/bash
|
|
#
|
|
# Script that checks that critical functions in TSan runtime have correct number
|
|
# of push/pop/rsp instructions to verify that runtime is efficient enough.
|
|
#
|
|
# This test can fail when backend code generation changes the output for various
|
|
# tsan interceptors. When such a change happens, you can ensure that the
|
|
# performance has not regressed by running the following benchmarks before and
|
|
# after the breaking change to verify that the values in this file are safe to
|
|
# update:
|
|
# ./projects/compiler-rt/lib/tsan/tests/rtl/TsanRtlTest-x86_64-Test
|
|
# --gtest_also_run_disabled_tests --gtest_filter=DISABLED_BENCH.Mop*
|
|
|
|
set -u
|
|
|
|
if [[ "$#" != 1 ]]; then
|
|
echo "Usage: $0 /path/to/binary/built/with/tsan"
|
|
exit 1
|
|
fi
|
|
|
|
SCRIPTDIR=$(dirname $0)
|
|
RES=$(${SCRIPTDIR}/analyze_libtsan.sh $1)
|
|
PrintRes() {
|
|
printf "%s\n" "$RES"
|
|
}
|
|
|
|
PrintRes
|
|
|
|
check() {
|
|
res=$(PrintRes | egrep "$1 .* $2 $3; ")
|
|
if [ "$res" == "" ]; then
|
|
echo FAILED $1 must contain $2 $3
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
for f in write1 write2 write4 write8; do
|
|
check $f rsp 1
|
|
check $f push 2
|
|
done
|
|
|
|
for f in read1 read2 read4 read8; do
|
|
check $f rsp 1
|
|
check $f push 3
|
|
done
|
|
|
|
for f in func_entry func_exit; do
|
|
check $f rsp 0
|
|
check $f push 0
|
|
check $f pop 0
|
|
check $f call 1 # TraceSwitch()
|
|
done
|
|
|
|
echo LGTM
|