Home | History | Annotate | Download | only in tsan
      1 #!/bin/bash
      2 #
      3 # Script that checks that critical functions in TSan runtime have correct number
      4 # of push/pop/rsp instructions to verify that runtime is efficient enough.
      5 
      6 set -u
      7 
      8 if [[ "$#" != 1 ]]; then
      9   echo "Usage: $0 /path/to/binary/built/with/tsan"
     10   exit 1
     11 fi
     12 
     13 SCRIPTDIR=$(dirname $0)
     14 RES=$(${SCRIPTDIR}/analyze_libtsan.sh $1)
     15 PrintRes() {
     16   printf "%s\n" "$RES"
     17 }
     18 
     19 PrintRes
     20 
     21 check() {
     22   res=$(PrintRes | egrep "$1 .* $2 $3; ")
     23   if [ "$res" == "" ]; then
     24     echo FAILED $1 must contain $2 $3
     25     exit 1
     26   fi
     27 }
     28 
     29 for f in write1; do
     30   check $f rsp 1
     31   check $f push 2
     32   check $f pop 2
     33 done
     34 
     35 for f in write2 write4 write8; do
     36   check $f rsp 1
     37   check $f push 3
     38   check $f pop 3
     39 done
     40 
     41 for f in read1 read2 read4 read8; do
     42   check $f rsp 1
     43   check $f push 5
     44   check $f pop 5
     45 done
     46 
     47 for f in func_entry func_exit; do
     48   check $f rsp 0
     49   check $f push 0
     50   check $f pop 0
     51   check $f call 1  # TraceSwitch()
     52 done
     53 
     54 echo LGTM
     55