summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2019-10-07 23:11:07 +0000
committerVitaly Buka <vitalybuka@google.com>2019-10-07 23:11:07 +0000
commit8ea8db5364fa341ce6dc7538be9311a725321848 (patch)
tree595cb8f6ddc0146af4a5958558c3c2a73e7210cf
parent634be25039e35525c078b512e6a8f98678198f80 (diff)
downloadcompiler-rt-8ea8db5364fa341ce6dc7538be9311a725321848.tar.gz
[tsan, go] fix Go windows build
Summary: Don't use weak exports when building tsan into a shared library for Go. gcc can't handle the pragmas used to make the weak references. Include files that have been added since the last update to build.bat. (We should really find a better way to list all the files needed.) Add windows version defines (WINVER and _WIN32_WINNT) to get AcquireSRWLockExclusive and ReleaseSRWLockExclusive defined. Define GetProcessMemoryInfo to use the kernel32 version. This is kind of a hack, the windows header files should do this translation for us. I think we're not in the right family partition (we're using Desktop, but that translation only happens for App and System partitions???), but hacking the family partition seems equally gross and I have no idea what the consequences of that might be. Patch by Keith Randall. Reviewers: dvyukov, vitalybuka Reviewed By: vitalybuka Subscribers: jfb, delcypher, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D68599 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@373984 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/sanitizer_common/sanitizer_win_defs.h12
-rw-r--r--lib/tsan/go/build.bat6
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/sanitizer_common/sanitizer_win_defs.h b/lib/sanitizer_common/sanitizer_win_defs.h
index bcd94a08d..bfe38a332 100644
--- a/lib/sanitizer_common/sanitizer_win_defs.h
+++ b/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
diff --git a/lib/tsan/go/build.bat b/lib/tsan/go/build.bat
index 138380203..bf502873b 100644
--- a/lib/tsan/go/build.bat
+++ b/lib/tsan/go/build.bat
@@ -31,6 +31,9 @@ type ^
..\..\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 ^
@@ -46,6 +49,9 @@ gcc ^
-fno-exceptions ^
-fno-rtti ^
-DSANITIZER_GO=1 ^
+ -DWINVER=0x0600 ^
+ -D_WIN32_WINNT=0x0600 ^
+ -DGetProcessMemoryInfo=K32GetProcessMemoryInfo ^
-Wno-error=attributes ^
-Wno-attributes ^
-Wno-format ^