Skip to content

Commit

Permalink
[tsan, go] fix Go windows build
Browse files Browse the repository at this point in the history
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

llvm-svn: 373984
  • Loading branch information
vitalybuka committed Oct 7, 2019
1 parent 2059105 commit 2fdec42
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
12 changes: 12 additions & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_win_defs.h
Expand Up @@ -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
Expand Down Expand Up @@ -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
6 changes: 6 additions & 0 deletions compiler-rt/lib/tsan/go/build.bat
Expand Up @@ -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 ^
Expand All @@ -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 ^
Expand Down

0 comments on commit 2fdec42

Please sign in to comment.