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