brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · d9e5640 Raw
257 lines · bash
1#!/bin/sh2 3set -e4 5if [ "`uname -a | grep Linux`" != "" ]; then6	HOST_GOOS="linux"7	if [ "`uname -a | grep ppc64le`" != "" ]; then8		HOST_GOARCH="ppc64le"9	elif [ "`uname -a | grep x86_64`" != "" ]; then10		HOST_GOARCH="amd64"11	elif [ "`uname -a | grep aarch64`" != "" ]; then12		HOST_GOARCH="arm64"13	elif [ "`uname -a | grep loongarch64`" != "" ]; then14		HOST_GOARCH="loong64"15	elif [ "`uname -a | grep -i mips64`" != "" ]; then16		if [ "`lscpu | grep -i Little`" != "" ]; then17			HOST_GOARCH="mips64le"18		else19			HOST_GOARCH="mips64"20		fi21  	elif [ "`uname -a | grep riscv64`" != "" ]; then22		HOST_GOARCH="riscv64"23	elif [ "`uname -a | grep s390x`" != "" ]; then24		HOST_GOARCH="s390x"25	fi26elif [ "`uname -a | grep FreeBSD`" != "" ]; then27	HOST_GOOS="freebsd"28	HOST_GOARCH="amd64"29elif [ "`uname -a | grep NetBSD`" != "" ]; then30	HOST_GOOS="netbsd"31	HOST_GOARCH="amd64"32elif [ "`uname -a | grep Darwin`" != "" ]; then33	HOST_GOOS="darwin"34	if [ "`uname -a | grep x86_64`" != "" ]; then35		HOST_GOARCH="amd64"36	elif [ "`uname -a | grep arm64`" != "" ]; then37		HOST_GOARCH="arm64"38	fi39elif [ "`uname -a | grep MINGW`" != "" ]; then40	HOST_GOOS="windows"41	HOST_GOARCH="amd64"42fi43 44GOOS=${GOOS:-$HOST_GOOS}45GOARCH=${GOARCH:-$HOST_GOARCH}46SUFFIX="${GOOS}_${GOARCH}"47 48SRCS="49	tsan_go.cpp50	../rtl/tsan_external.cpp51	../rtl/tsan_flags.cpp52	../rtl/tsan_interface_atomic.cpp53	../rtl/tsan_md5.cpp54	../rtl/tsan_report.cpp55	../rtl/tsan_rtl.cpp56	../rtl/tsan_rtl_access.cpp57	../rtl/tsan_rtl_mutex.cpp58	../rtl/tsan_rtl_report.cpp59	../rtl/tsan_rtl_thread.cpp60	../rtl/tsan_rtl_proc.cpp61	../rtl/tsan_stack_trace.cpp62	../rtl/tsan_suppressions.cpp63	../rtl/tsan_sync.cpp64	../rtl/tsan_vector_clock.cpp65	../../sanitizer_common/sanitizer_allocator.cpp66	../../sanitizer_common/sanitizer_common.cpp67	../../sanitizer_common/sanitizer_common_libcdep.cpp68	../../sanitizer_common/sanitizer_deadlock_detector2.cpp69	../../sanitizer_common/sanitizer_file.cpp70	../../sanitizer_common/sanitizer_flag_parser.cpp71	../../sanitizer_common/sanitizer_flags.cpp72	../../sanitizer_common/sanitizer_libc.cpp73	../../sanitizer_common/sanitizer_mutex.cpp74	../../sanitizer_common/sanitizer_printf.cpp75	../../sanitizer_common/sanitizer_suppressions.cpp76	../../sanitizer_common/sanitizer_thread_registry.cpp77	../../sanitizer_common/sanitizer_stack_store.cpp78	../../sanitizer_common/sanitizer_stackdepot.cpp79	../../sanitizer_common/sanitizer_stacktrace.cpp80	../../sanitizer_common/sanitizer_symbolizer.cpp81	../../sanitizer_common/sanitizer_symbolizer_report.cpp82	../../sanitizer_common/sanitizer_termination.cpp83"84 85if [ "$GOOS" = "linux" ]; then86	OSCFLAGS="-fPIC -Wno-maybe-uninitialized"87	OSLDFLAGS="-lpthread -fPIC -fpie"88	SRCS="89		$SRCS90		../rtl/tsan_platform_linux.cpp91		../../sanitizer_common/sanitizer_posix.cpp92		../../sanitizer_common/sanitizer_posix_libcdep.cpp93		../../sanitizer_common/sanitizer_procmaps_common.cpp94		../../sanitizer_common/sanitizer_procmaps_linux.cpp95		../../sanitizer_common/sanitizer_linux.cpp96		../../sanitizer_common/sanitizer_linux_libcdep.cpp97		../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp98		../../sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp99		"100	if [ "$GOARCH" = "ppc64le" ]; then101		ARCHCFLAGS="-m64 -mcpu=power8 -fno-function-sections"102	elif [ "$GOARCH" = "amd64" ]; then103		if [ "$GOAMD64" = "v3" ]; then104			ARCHCFLAGS="-m64 -msse4.2"105		else106			ARCHCFLAGS="-m64 -msse3"107		fi108		OSCFLAGS="$OSCFLAGS -ffreestanding -Wno-unused-const-variable -Wno-unknown-warning-option"109	elif [ "$GOARCH" = "arm64" ]; then110		ARCHCFLAGS=""111	elif [ "$GOARCH" = "mips64le" ]; then112		ARCHCFLAGS="-mips64 -EL"113	elif [ "$GOARCH" = "mips64" ]; then114		ARCHCFLAGS="-mips64 -EB"115	elif [ "$GOARCH" = "riscv64" ]; then116		if [ "$GORISCV64" = "rva23u64" ]; then117			ARCHCFLAGS="-march=rv64gcv"118		else119			ARCHCFLAGS="-march=rv64gc"120		fi121	elif [ "$GOARCH" = "s390x" ]; then122		SRCS="$SRCS ../../sanitizer_common/sanitizer_linux_s390.cpp"123		ARCHCFLAGS=""124	fi125elif [ "$GOOS" = "freebsd" ]; then126	# The resulting object still depends on libc.127	# We removed this dependency for Go runtime for other OSes,128	# and we should remove it for FreeBSD as well, but there is no pressing need.129	DEPENDS_ON_LIBC=1130	OSCFLAGS="-fno-strict-aliasing -fPIC -Werror"131	ARCHCFLAGS="-m64"132	OSLDFLAGS="-lpthread -fPIC -fpie"133	SRCS="134		$SRCS135		../rtl/tsan_platform_linux.cpp136		../../sanitizer_common/sanitizer_posix.cpp137		../../sanitizer_common/sanitizer_posix_libcdep.cpp138		../../sanitizer_common/sanitizer_procmaps_bsd.cpp139		../../sanitizer_common/sanitizer_procmaps_common.cpp140		../../sanitizer_common/sanitizer_linux.cpp141		../../sanitizer_common/sanitizer_linux_libcdep.cpp142		../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp143		../../sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp144	"145elif [ "$GOOS" = "netbsd" ]; then146	# The resulting object still depends on libc.147	# We removed this dependency for Go runtime for other OSes,148	# and we should remove it for NetBSD as well, but there is no pressing need.149	DEPENDS_ON_LIBC=1150	OSCFLAGS="-fno-strict-aliasing -fPIC -Werror"151	ARCHCFLAGS="-m64"152	OSLDFLAGS="-lpthread -fPIC -fpie"153	SRCS="154		$SRCS155		../rtl/tsan_platform_linux.cpp156		../../sanitizer_common/sanitizer_posix.cpp157		../../sanitizer_common/sanitizer_posix_libcdep.cpp158		../../sanitizer_common/sanitizer_procmaps_bsd.cpp159		../../sanitizer_common/sanitizer_procmaps_common.cpp160		../../sanitizer_common/sanitizer_linux.cpp161		../../sanitizer_common/sanitizer_linux_libcdep.cpp162		../../sanitizer_common/sanitizer_netbsd.cpp163		../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp164		../../sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp165	"166elif [ "$GOOS" = "darwin" ]; then167	OSCFLAGS="-fPIC -Wno-unused-const-variable -Wno-unknown-warning-option -mmacosx-version-min=10.7"168	OSLDFLAGS="-lpthread -fPIC -fpie -mmacosx-version-min=10.7"169	SRCS="170		$SRCS171		../rtl/tsan_platform_mac.cpp172		../../sanitizer_common/sanitizer_mac.cpp173		../../sanitizer_common/sanitizer_mac_libcdep.cpp174		../../sanitizer_common/sanitizer_posix.cpp175		../../sanitizer_common/sanitizer_posix_libcdep.cpp176		../../sanitizer_common/sanitizer_procmaps_mac.cpp177	"178	if [ "$GOARCH" = "amd64" ]; then179		ARCHCFLAGS="-m64"180	elif [ "$GOARCH" = "arm64" ]; then181		ARCHCFLAGS=""182	fi183elif [ "$GOOS" = "windows" ]; then184	OSCFLAGS="-Wno-error=attributes -Wno-attributes -Wno-unused-const-variable -Wno-unknown-warning-option"185	ARCHCFLAGS="-m64"186	OSLDFLAGS=""187	SRCS="188		$SRCS189		../rtl/tsan_platform_windows.cpp190		../../sanitizer_common/sanitizer_win.cpp191	"192else193	echo Unknown platform194	exit 1195fi196 197CC=${CC:-gcc}198IN_TMPDIR=${IN_TMPDIR:-0}199SILENT=${SILENT:-0}200 201if [ $IN_TMPDIR != "0" ]; then202  DIR=$(mktemp -qd /tmp/gotsan.XXXXXXXXXX)203  cleanup() {204    rm -rf $DIR205  }206  trap cleanup EXIT207else208  DIR=.209fi210 211SRCS="$SRCS $ADD_SRCS"212for F in $SRCS; do213	echo "#line 1 \"$F\""214	cat $F215done > $DIR/gotsan.cpp216 217FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -std=c++17 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO=1 -DSANITIZER_DEADLOCK_DETECTOR_VERSION=2 $OSCFLAGS $ARCHCFLAGS $EXTRA_CFLAGS"218DEBUG_FLAGS="$FLAGS -DSANITIZER_DEBUG=1 -g"219FLAGS="$FLAGS -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer"220 221if [ "$DEBUG" = "" ]; then222	# Do a build test with debug flags.223	$CC $DIR/gotsan.cpp -c -o $DIR/race_debug_$SUFFIX.syso $DEBUG_FLAGS $CFLAGS224else225	FLAGS="$DEBUG_FLAGS"226fi227 228if [ "$SILENT" != "1" ]; then229  echo $CC gotsan.cpp -c -o $DIR/race_$SUFFIX.syso $FLAGS $CFLAGS230fi231$CC $DIR/gotsan.cpp -c -o $DIR/race_$SUFFIX.syso $FLAGS $CFLAGS232 233$CC $OSCFLAGS $ARCHCFLAGS test.c $DIR/race_$SUFFIX.syso -g -o $DIR/test $OSLDFLAGS $LDFLAGS234 235# Verify that no libc specific code is present.236if [ "$DEPENDS_ON_LIBC" != "1" ]; then237	if nm $DIR/race_$SUFFIX.syso | grep -q __libc_; then238		printf -- '%s seems to link to libc\n' "race_$SUFFIX.syso"239		exit 1240	fi241fi242 243if [ "$SKIP_TEST" = "1" ]; then244	exit 0245fi246 247if [ "`uname -a | grep NetBSD`" != "" ]; then248  # Turn off ASLR in the test binary.249  /usr/sbin/paxctl +a $DIR/test250fi251export GORACE="exitcode=0 atexit_sleep_ms=0"252if [ "$SILENT" != "1" ]; then253  $DIR/test254else255  $DIR/test 2>/dev/null256fi257