Index: lib/sanitizer_common/sanitizer_win_defs.h =================================================================== --- lib/sanitizer_common/sanitizer_win_defs.h +++ lib/sanitizer_common/sanitizer_win_defs.h @@ -43,6 +43,8 @@ #define STRINGIFY_(A) #A #define STRINGIFY(A) STRINGIFY_(A) +#if !SANITIZER_GO + // ----------------- A workaround for the absence of weak symbols -------------- // We don't have a direct equivalent of weak symbols when using MSVC, but we can // use the /alternatename directive to tell the linker to default a specific @@ -158,5 +160,15 @@ // return a >= b; // } // + +#else // SANITIZER_GO + +// Go neither needs nor wants weak references. +// The shenanigans above don't work for gcc. +# define WIN_WEAK_EXPORT_DEF(ReturnType, Name, ...) \ + extern "C" ReturnType Name(__VA_ARGS__) + +#endif // SANITIZER_GO + #endif // SANITIZER_WINDOWS #endif // SANITIZER_WIN_DEFS_H Index: lib/tsan/go/build.bat =================================================================== --- lib/tsan/go/build.bat +++ lib/tsan/go/build.bat @@ -1,4 +1,61 @@ -type tsan_go.cpp ..\rtl\tsan_interface_atomic.cpp ..\rtl\tsan_clock.cpp ..\rtl\tsan_flags.cpp ..\rtl\tsan_md5.cpp ..\rtl\tsan_mutex.cpp ..\rtl\tsan_report.cpp ..\rtl\tsan_rtl.cpp ..\rtl\tsan_rtl_mutex.cpp ..\rtl\tsan_rtl_report.cpp ..\rtl\tsan_rtl_thread.cpp ..\rtl\tsan_rtl_proc.cpp ..\rtl\tsan_stat.cpp ..\rtl\tsan_suppressions.cpp ..\rtl\tsan_sync.cpp ..\rtl\tsan_stack_trace.cpp ..\..\sanitizer_common\sanitizer_allocator.cpp ..\..\sanitizer_common\sanitizer_common.cpp ..\..\sanitizer_common\sanitizer_flags.cpp ..\..\sanitizer_common\sanitizer_stacktrace.cpp ..\..\sanitizer_common\sanitizer_libc.cpp ..\..\sanitizer_common\sanitizer_printf.cpp ..\..\sanitizer_common\sanitizer_suppressions.cpp ..\..\sanitizer_common\sanitizer_thread_registry.cpp ..\rtl\tsan_platform_windows.cpp ..\..\sanitizer_common\sanitizer_win.cpp ..\..\sanitizer_common\sanitizer_deadlock_detector1.cpp ..\..\sanitizer_common\sanitizer_stackdepot.cpp ..\..\sanitizer_common\sanitizer_persistent_allocator.cpp ..\..\sanitizer_common\sanitizer_flag_parser.cpp ..\..\sanitizer_common\sanitizer_symbolizer.cpp ..\..\sanitizer_common\sanitizer_termination.cpp > gotsan.cpp - -gcc -c -o race_windows_amd64.syso gotsan.cpp -I..\rtl -I..\.. -I..\..\sanitizer_common -I..\..\..\include -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO=1 -Wno-error=attributes -Wno-attributes -Wno-format -Wno-maybe-uninitialized -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer -std=c++11 +type ^ + tsan_go.cpp ^ + ..\rtl\tsan_interface_atomic.cpp ^ + ..\rtl\tsan_clock.cpp ^ + ..\rtl\tsan_flags.cpp ^ + ..\rtl\tsan_md5.cpp ^ + ..\rtl\tsan_mutex.cpp ^ + ..\rtl\tsan_report.cpp ^ + ..\rtl\tsan_rtl.cpp ^ + ..\rtl\tsan_rtl_mutex.cpp ^ + ..\rtl\tsan_rtl_report.cpp ^ + ..\rtl\tsan_rtl_thread.cpp ^ + ..\rtl\tsan_rtl_proc.cpp ^ + ..\rtl\tsan_stat.cpp ^ + ..\rtl\tsan_suppressions.cpp ^ + ..\rtl\tsan_sync.cpp ^ + ..\rtl\tsan_stack_trace.cpp ^ + ..\..\sanitizer_common\sanitizer_allocator.cpp ^ + ..\..\sanitizer_common\sanitizer_common.cpp ^ + ..\..\sanitizer_common\sanitizer_flags.cpp ^ + ..\..\sanitizer_common\sanitizer_stacktrace.cpp ^ + ..\..\sanitizer_common\sanitizer_libc.cpp ^ + ..\..\sanitizer_common\sanitizer_printf.cpp ^ + ..\..\sanitizer_common\sanitizer_suppressions.cpp ^ + ..\..\sanitizer_common\sanitizer_thread_registry.cpp ^ + ..\rtl\tsan_platform_windows.cpp ^ + ..\..\sanitizer_common\sanitizer_win.cpp ^ + ..\..\sanitizer_common\sanitizer_deadlock_detector1.cpp ^ + ..\..\sanitizer_common\sanitizer_stackdepot.cpp ^ + ..\..\sanitizer_common\sanitizer_persistent_allocator.cpp ^ + ..\..\sanitizer_common\sanitizer_flag_parser.cpp ^ + ..\..\sanitizer_common\sanitizer_symbolizer.cpp ^ + ..\..\sanitizer_common\sanitizer_termination.cpp ^ + ..\..\sanitizer_common\sanitizer_file.cpp ^ + ..\..\sanitizer_common\sanitizer_symbolizer_report.cpp ^ + ..\rtl\tsan_external.cpp ^ + > gotsan.cpp +gcc ^ + -c ^ + -o race_windows_amd64.syso ^ + gotsan.cpp ^ + -I..\rtl ^ + -I..\.. ^ + -I..\..\sanitizer_common ^ + -I..\..\..\include ^ + -m64 ^ + -Wall ^ + -fno-exceptions ^ + -fno-rtti ^ + -DSANITIZER_GO=1 ^ + -DWINVER=0x0600 -D_WIN32_WINNT=0x0600 ^ + -DGetProcessMemoryInfo=K32GetProcessMemoryInfo ^ + -Wno-error=attributes ^ + -Wno-attributes ^ + -Wno-format ^ + -Wno-maybe-uninitialized ^ + -DSANITIZER_DEBUG=0 ^ + -O3 ^ + -fomit-frame-pointer ^ + -std=c++11