1#!/bin/sh 2 3set -e 4 5SRCS=" 6 tsan_go.cc 7 ../rtl/tsan_clock.cc 8 ../rtl/tsan_external.cc 9 ../rtl/tsan_flags.cc 10 ../rtl/tsan_interface_atomic.cc 11 ../rtl/tsan_md5.cc 12 ../rtl/tsan_mutex.cc 13 ../rtl/tsan_report.cc 14 ../rtl/tsan_rtl.cc 15 ../rtl/tsan_rtl_mutex.cc 16 ../rtl/tsan_rtl_report.cc 17 ../rtl/tsan_rtl_thread.cc 18 ../rtl/tsan_rtl_proc.cc 19 ../rtl/tsan_stack_trace.cc 20 ../rtl/tsan_stat.cc 21 ../rtl/tsan_suppressions.cc 22 ../rtl/tsan_sync.cc 23 ../../sanitizer_common/sanitizer_allocator.cc 24 ../../sanitizer_common/sanitizer_common.cc 25 ../../sanitizer_common/sanitizer_common_libcdep.cc 26 ../../sanitizer_common/sanitizer_deadlock_detector2.cc 27 ../../sanitizer_common/sanitizer_file.cc 28 ../../sanitizer_common/sanitizer_flag_parser.cc 29 ../../sanitizer_common/sanitizer_flags.cc 30 ../../sanitizer_common/sanitizer_libc.cc 31 ../../sanitizer_common/sanitizer_persistent_allocator.cc 32 ../../sanitizer_common/sanitizer_printf.cc 33 ../../sanitizer_common/sanitizer_suppressions.cc 34 ../../sanitizer_common/sanitizer_thread_registry.cc 35 ../../sanitizer_common/sanitizer_stackdepot.cc 36 ../../sanitizer_common/sanitizer_stacktrace.cc 37 ../../sanitizer_common/sanitizer_symbolizer.cc 38 ../../sanitizer_common/sanitizer_symbolizer_report.cc 39 ../../sanitizer_common/sanitizer_termination.cc 40" 41 42if [ "`uname -a | grep Linux`" != "" ]; then 43 OSCFLAGS="-fPIC -Wno-maybe-uninitialized" 44 OSLDFLAGS="-lpthread -fPIC -fpie" 45 SRCS=" 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_common.cc 51 ../../sanitizer_common/sanitizer_procmaps_linux.cc 52 ../../sanitizer_common/sanitizer_linux.cc 53 ../../sanitizer_common/sanitizer_linux_libcdep.cc 54 ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc 55 " 56 if [ "`uname -a | grep ppc64le`" != "" ]; then 57 SUFFIX="linux_ppc64le" 58 ARCHCFLAGS="-m64" 59 elif [ "`uname -a | grep x86_64`" != "" ]; then 60 SUFFIX="linux_amd64" 61 ARCHCFLAGS="-m64" 62 OSCFLAGS="$OSCFLAGS -ffreestanding -Wno-unused-const-variable -Werror -Wno-unknown-warning-option" 63 elif [ "`uname -a | grep aarch64`" != "" ]; then 64 SUFFIX="linux_arm64" 65 ARCHCFLAGS="" 66 fi 67elif [ "`uname -a | grep FreeBSD`" != "" ]; then 68 SUFFIX="freebsd_amd64" 69 OSCFLAGS="-fno-strict-aliasing -fPIC -Werror" 70 ARCHCFLAGS="-m64" 71 OSLDFLAGS="-lpthread -fPIC -fpie" 72 SRCS=" 73 $SRCS 74 ../rtl/tsan_platform_linux.cc 75 ../../sanitizer_common/sanitizer_posix.cc 76 ../../sanitizer_common/sanitizer_posix_libcdep.cc 77 ../../sanitizer_common/sanitizer_procmaps_bsd.cc 78 ../../sanitizer_common/sanitizer_procmaps_common.cc 79 ../../sanitizer_common/sanitizer_linux.cc 80 ../../sanitizer_common/sanitizer_linux_libcdep.cc 81 ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc 82 " 83elif [ "`uname -a | grep NetBSD`" != "" ]; then 84 SUFFIX="netbsd_amd64" 85 OSCFLAGS="-fno-strict-aliasing -fPIC -Werror" 86 ARCHCFLAGS="-m64" 87 OSLDFLAGS="-lpthread -fPIC -fpie" 88 SRCS=" 89 $SRCS 90 ../rtl/tsan_platform_linux.cc 91 ../../sanitizer_common/sanitizer_posix.cc 92 ../../sanitizer_common/sanitizer_posix_libcdep.cc 93 ../../sanitizer_common/sanitizer_procmaps_bsd.cc 94 ../../sanitizer_common/sanitizer_procmaps_common.cc 95 ../../sanitizer_common/sanitizer_linux.cc 96 ../../sanitizer_common/sanitizer_linux_libcdep.cc 97 ../../sanitizer_common/sanitizer_netbsd.cc 98 ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc 99 " 100elif [ "`uname -a | grep Darwin`" != "" ]; then 101 SUFFIX="darwin_amd64" 102 OSCFLAGS="-fPIC -Wno-unused-const-variable -Wno-unknown-warning-option -mmacosx-version-min=10.7" 103 ARCHCFLAGS="-m64" 104 OSLDFLAGS="-lpthread -fPIC -fpie -mmacosx-version-min=10.7" 105 SRCS=" 106 $SRCS 107 ../rtl/tsan_platform_mac.cc 108 ../../sanitizer_common/sanitizer_mac.cc 109 ../../sanitizer_common/sanitizer_posix.cc 110 ../../sanitizer_common/sanitizer_posix_libcdep.cc 111 ../../sanitizer_common/sanitizer_procmaps_mac.cc 112 " 113elif [ "`uname -a | grep MINGW`" != "" ]; then 114 SUFFIX="windows_amd64" 115 OSCFLAGS="-Wno-error=attributes -Wno-attributes -Wno-unused-const-variable -Wno-unknown-warning-option" 116 ARCHCFLAGS="-m64" 117 OSLDFLAGS="" 118 SRCS=" 119 $SRCS 120 ../rtl/tsan_platform_windows.cc 121 ../../sanitizer_common/sanitizer_win.cc 122 " 123else 124 echo Unknown platform 125 exit 1 126fi 127 128CC=${CC:-gcc} 129IN_TMPDIR=${IN_TMPDIR:-0} 130SILENT=${SILENT:-0} 131 132if [ $IN_TMPDIR != "0" ]; then 133 DIR=$(mktemp -qd /tmp/gotsan.XXXXXXXXXX) 134 cleanup() { 135 rm -rf $DIR 136 } 137 trap cleanup EXIT 138else 139 DIR=. 140fi 141 142SRCS="$SRCS $ADD_SRCS" 143 144rm -f $DIR/gotsan.cc 145for F in $SRCS; do 146 cat $F >> $DIR/gotsan.cc 147done 148 149FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -std=c++11 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO=1 -DSANITIZER_DEADLOCK_DETECTOR_VERSION=2 $OSCFLAGS $ARCHCFLAGS" 150if [ "$DEBUG" = "" ]; then 151 FLAGS="$FLAGS -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer" 152 if [ "$SUFFIX" = "linux_ppc64le" ]; then 153 FLAGS="$FLAGS -mcpu=power8 -fno-function-sections" 154 elif [ "$SUFFIX" = "linux_amd64" ]; then 155 FLAGS="$FLAGS -msse3" 156 fi 157else 158 FLAGS="$FLAGS -DSANITIZER_DEBUG=1 -g" 159fi 160 161if [ "$SILENT" != "1" ]; then 162 echo $CC gotsan.cc -c -o $DIR/race_$SUFFIX.syso $FLAGS $CFLAGS 163fi 164$CC $DIR/gotsan.cc -c -o $DIR/race_$SUFFIX.syso $FLAGS $CFLAGS 165 166$CC $OSCFLAGS $ARCHCFLAGS test.c $DIR/race_$SUFFIX.syso -g -o $DIR/test $OSLDFLAGS $LDFLAGS 167 168export GORACE="exitcode=0 atexit_sleep_ms=0" 169if [ "$SILENT" != "1" ]; then 170 $DIR/test 171else 172 $DIR/test 2>/dev/null 173fi 174