Home | History | Annotate | Download | only in go
      1 #!/bin/bash
      2 set -e
      3 
      4 SRCS="
      5 	tsan_go.cc
      6 	../rtl/tsan_clock.cc
      7 	../rtl/tsan_flags.cc
      8 	../rtl/tsan_md5.cc
      9 	../rtl/tsan_mutex.cc
     10 	../rtl/tsan_report.cc
     11 	../rtl/tsan_rtl.cc
     12 	../rtl/tsan_rtl_mutex.cc
     13 	../rtl/tsan_rtl_report.cc
     14 	../rtl/tsan_rtl_thread.cc
     15 	../rtl/tsan_stat.cc
     16 	../rtl/tsan_suppressions.cc
     17 	../rtl/tsan_sync.cc
     18 	../../sanitizer_common/sanitizer_allocator.cc
     19 	../../sanitizer_common/sanitizer_common.cc
     20 	../../sanitizer_common/sanitizer_flags.cc
     21 	../../sanitizer_common/sanitizer_libc.cc
     22 	../../sanitizer_common/sanitizer_printf.cc
     23 	../../sanitizer_common/sanitizer_suppressions.cc
     24 	../../sanitizer_common/sanitizer_thread_registry.cc
     25 "
     26 
     27 if [ "`uname -a | grep Linux`" != "" ]; then
     28 	SUFFIX="linux_amd64"
     29 	OSCFLAGS="-fPIC -ffreestanding"
     30 	OSLDFLAGS="-lpthread -fPIC -fpie"
     31 	SRCS+="
     32 		../rtl/tsan_platform_linux.cc
     33 		../../sanitizer_common/sanitizer_posix.cc
     34 		../../sanitizer_common/sanitizer_posix_libcdep.cc
     35 		../../sanitizer_common/sanitizer_linux.cc
     36 		../../sanitizer_common/sanitizer_linux_libcdep.cc
     37 	"
     38 elif [ "`uname -a | grep Darwin`" != "" ]; then
     39 	SUFFIX="darwin_amd64"
     40 	OSCFLAGS="-fPIC"
     41 	OSLDFLAGS="-lpthread -fPIC -fpie"
     42 	SRCS+="
     43 		../rtl/tsan_platform_mac.cc
     44 		../../sanitizer_common/sanitizer_posix.cc
     45 		../../sanitizer_common/sanitizer_mac.cc
     46 		../../sanitizer_common/sanitizer_posix_libcdep.cc
     47 	"
     48 elif [ "`uname -a | grep MINGW`" != "" ]; then
     49 	SUFFIX="windows_amd64"
     50 	OSCFLAGS="-Wno-error=attributes -Wno-attributes"
     51 	OSLDFLAGS=""
     52 	SRCS+="
     53 		../rtl/tsan_platform_windows.cc
     54 		../../sanitizer_common/sanitizer_win.cc
     55 	"
     56 else
     57 	echo Unknown platform
     58 	exit 1
     59 fi
     60 
     61 SRCS+=$ADD_SRCS
     62 
     63 rm -f gotsan.cc
     64 for F in $SRCS; do
     65 	cat $F >> gotsan.cc
     66 done
     67 
     68 FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -m64 -Wall -Werror -Wno-maybe-uninitialized -fno-exceptions -fno-rtti -DTSAN_GO -DSANITIZER_GO -DTSAN_SHADOW_COUNT=4 $OSCFLAGS"
     69 if [ "$DEBUG" == "" ]; then
     70 	FLAGS+=" -DTSAN_DEBUG=0 -O3 -fomit-frame-pointer"
     71 else
     72 	FLAGS+=" -DTSAN_DEBUG=1 -g"
     73 fi
     74 
     75 echo gcc gotsan.cc -S -o tmp.s $FLAGS $CFLAGS
     76 gcc gotsan.cc -S -o tmp.s $FLAGS $CFLAGS
     77 cat tmp.s $ASMS > gotsan.s
     78 echo as gotsan.s -o race_$SUFFIX.syso
     79 as gotsan.s -o race_$SUFFIX.syso
     80 
     81 gcc test.c race_$SUFFIX.syso -m64 -o test $OSLDFLAGS
     82 GORACE="exitcode=0 atexit_sleep_ms=0" ./test
     83