Index: compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp =================================================================== --- compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp +++ compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp @@ -25,7 +25,7 @@ const char *SecondaryAllocatorName = "LargeMmapAllocator"; // ThreadSanitizer for Go uses libc malloc/free. -#if SANITIZER_GO || defined(SANITIZER_USE_MALLOC) +#if defined(SANITIZER_USE_MALLOC) # if SANITIZER_LINUX && !SANITIZER_ANDROID extern "C" void *__libc_malloc(uptr size); # if !SANITIZER_GO Index: compiler-rt/lib/sanitizer_common/sanitizer_common.cpp =================================================================== --- compiler-rt/lib/sanitizer_common/sanitizer_common.cpp +++ compiler-rt/lib/sanitizer_common/sanitizer_common.cpp @@ -274,6 +274,7 @@ return name_len; } +#if !SANITIZER_GO void PrintCmdline() { char **argv = GetArgv(); if (!argv) return; @@ -282,6 +283,7 @@ Printf("%s ", argv[i]); Printf("\n\n"); } +#endif // Malloc hooks. static const int kMaxMallocFreeHooks = 5; Index: compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp =================================================================== --- compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -26,7 +26,7 @@ #include "sanitizer_placement_new.h" #include "sanitizer_procmaps.h" -#if SANITIZER_LINUX +#if SANITIZER_LINUX && !SANITIZER_GO #include #endif @@ -552,7 +552,8 @@ #endif } -#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD +#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD && \ + !SANITIZER_GO extern "C" { SANITIZER_WEAK_ATTRIBUTE extern void *__libc_stack_end; } @@ -584,7 +585,7 @@ } #endif -#if !SANITIZER_OPENBSD +#if !SANITIZER_OPENBSD && !SANITIZER_GO static void GetArgsAndEnv(char ***argv, char ***envp) { #if SANITIZER_FREEBSD // On FreeBSD, retrieving the argument and environment arrays is done via the @@ -1071,7 +1072,8 @@ #if !SANITIZER_ANDROID uptr GetPageSize() { -#if SANITIZER_LINUX && (defined(__x86_64__) || defined(__i386__)) +#if SANITIZER_LINUX && (defined(__x86_64__) || defined(__i386__)) && \ + defined(EXEC_PAGESIZE) return EXEC_PAGESIZE; #elif SANITIZER_FREEBSD || SANITIZER_NETBSD // Use sysctl as sysconf can trigger interceptors internally. Index: compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp =================================================================== --- compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp +++ compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -807,7 +807,7 @@ } #endif // SANITIZER_LINUX && !SANITIZER_GO -#if !SANITIZER_OPENBSD +#if !SANITIZER_OPENBSD && !SANITIZER_GO void ReExec() { const char *pathname = "/proc/self/exe"; Index: compiler-rt/lib/tsan/go/buildgo.sh =================================================================== --- compiler-rt/lib/tsan/go/buildgo.sh +++ compiler-rt/lib/tsan/go/buildgo.sh @@ -168,6 +168,12 @@ $CC $OSCFLAGS $ARCHCFLAGS test.c $DIR/race_$SUFFIX.syso -g -o $DIR/test $OSLDFLAGS $LDFLAGS +# Verify that no glibc specific code is present +if nm race_$SUFFIX.syso | grep -q __libc_; then + printf -- '%s seems to link to libc\n' "race_$SUFFIX.syso" + exit 1 +fi + export GORACE="exitcode=0 atexit_sleep_ms=0" if [ "$SILENT" != "1" ]; then $DIR/test