#!/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. 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; do check $f rsp 1 check $f push 2 check $f pop 2 done for f in write2 write4 write8; do check $f rsp 1 check $f push 3 check $f pop 3 done for f in read1 read2 read4 read8; do check $f rsp 1 check $f push 5 check $f pop 5 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