]> git.proxmox.com Git - rustc.git/blob - src/compiler-rt/lib/tsan/check_analyze.sh
New upstream version 1.19.0+dfsg3
[rustc.git] / src / compiler-rt / lib / tsan / check_analyze.sh
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