1 set -e 2 3 SRCS=" 4 tsan_go.cc 5 ../rtl/tsan_clock.cc 6 ../rtl/tsan_flags.cc 7 ../rtl/tsan_md5.cc 8 ../rtl/tsan_mutex.cc 9 ../rtl/tsan_report.cc 10 ../rtl/tsan_rtl.cc 11 ../rtl/tsan_rtl_mutex.cc 12 ../rtl/tsan_rtl_report.cc 13 ../rtl/tsan_rtl_thread.cc 14 ../rtl/tsan_stack_trace.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_deadlock_detector2.cc 21 ../../sanitizer_common/sanitizer_flags.cc 22 ../../sanitizer_common/sanitizer_libc.cc 23 ../../sanitizer_common/sanitizer_persistent_allocator.cc 24 ../../sanitizer_common/sanitizer_printf.cc 25 ../../sanitizer_common/sanitizer_suppressions.cc 26 ../../sanitizer_common/sanitizer_thread_registry.cc 27 ../../sanitizer_common/sanitizer_stackdepot.cc 28 " 29 30 if [ "`uname -a | grep Linux`" != "" ]; then 31 SUFFIX="linux_amd64" 32 OSCFLAGS="-fPIC -ffreestanding -Wno-maybe-uninitialized -Wno-unused-const-variable -Werror -Wno-unknown-warning-option" 33 OSLDFLAGS="-lpthread -fPIC -fpie" 34 SRCS+=" 35 ../rtl/tsan_platform_linux.cc 36 ../../sanitizer_common/sanitizer_posix.cc 37 ../../sanitizer_common/sanitizer_posix_libcdep.cc 38 ../../sanitizer_common/sanitizer_procmaps_linux.cc 39 ../../sanitizer_common/sanitizer_linux.cc 40 ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc 41 " 42 elif [ "`uname -a | grep FreeBSD`" != "" ]; then 43 SUFFIX="freebsd_amd64" 44 OSCFLAGS="-fno-strict-aliasing -fPIC -Werror" 45 OSLDFLAGS="-lpthread -fPIC -fpie" 46 SRCS+=" 47 ../rtl/tsan_platform_linux.cc 48 ../../sanitizer_common/sanitizer_posix.cc 49 ../../sanitizer_common/sanitizer_posix_libcdep.cc 50 ../../sanitizer_common/sanitizer_procmaps_linux.cc 51 ../../sanitizer_common/sanitizer_linux.cc 52 ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc 53 " 54 elif [ "`uname -a | grep Darwin`" != "" ]; then 55 SUFFIX="darwin_amd64" 56 OSCFLAGS="-fPIC -Wno-unused-const-variable -Wno-unknown-warning-option" 57 OSLDFLAGS="-lpthread -fPIC -fpie" 58 SRCS+=" 59 ../rtl/tsan_platform_mac.cc 60 ../../sanitizer_common/sanitizer_mac.cc 61 ../../sanitizer_common/sanitizer_posix.cc 62 ../../sanitizer_common/sanitizer_posix_libcdep.cc 63 ../../sanitizer_common/sanitizer_procmaps_mac.cc 64 " 65 elif [ "`uname -a | grep MINGW`" != "" ]; then 66 SUFFIX="windows_amd64" 67 OSCFLAGS="-Wno-error=attributes -Wno-attributes -Wno-unused-const-variable -Wno-unknown-warning-option" 68 OSLDFLAGS="" 69 SRCS+=" 70 ../rtl/tsan_platform_windows.cc 71 ../../sanitizer_common/sanitizer_win.cc 72 " 73 else 74 echo Unknown platform 75 exit 1 76 fi 77 78 SRCS+=$ADD_SRCS 79 80 rm -f gotsan.cc 81 for F in $SRCS; do 82 cat $F >> gotsan.cc 83 done 84 85 FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -m64 -Wall -fno-exceptions -fno-rtti -DTSAN_GO -DSANITIZER_GO -DTSAN_SHADOW_COUNT=4 -DSANITIZER_DEADLOCK_DETECTOR_VERSION=2 $OSCFLAGS" 86 if [ "$DEBUG" == "" ]; then 87 FLAGS+=" -DTSAN_DEBUG=0 -O3 -msse3 -fomit-frame-pointer" 88 else 89 FLAGS+=" -DTSAN_DEBUG=1 -g" 90 fi 91 92 CC=${CC:-gcc} 93 94 echo $CC gotsan.cc -c -o race_$SUFFIX.syso $FLAGS $CFLAGS 95 $CC gotsan.cc -c -o race_$SUFFIX.syso $FLAGS $CFLAGS 96 97 $CC test.c race_$SUFFIX.syso -m64 -o test $OSLDFLAGS 98 GORACE="exitcode=0 atexit_sleep_ms=0" ./test 99