3 #ifndef CDSLIB_COMPILER_FEATURE_TSAN_H
4 #define CDSLIB_COMPILER_FEATURE_TSAN_H
6 // Thread Sanitizer annotations.
7 // From https://groups.google.com/d/msg/thread-sanitizer/SsrHB7FTnTk/mNTGNLQj-9cJ
9 #ifdef CDS_THREAD_SANITIZER_ENABLED
10 # define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr) AnnotateHappensBefore(__FILE__, __LINE__, (void*)(addr))
\r
11 # define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr) AnnotateHappensAfter(__FILE__, __LINE__, (void*)(addr))
\r
13 # define CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN AnnotateIgnoreReadsBegin(__FILE__, __LINE__)
\r
14 # define CDS_TSAN_ANNOTATE_IGNORE_READS_END AnnotateIgnoreReadsEnd(__FILE__, __LINE__)
\r
15 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
\r
16 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_END AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
\r
17 # define CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN \
\r
18 CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN; \
\r
19 CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN
\r
20 # define CDS_TSAN_ANNOTATE_IGNORE_RW_END \
\r
21 CDS_TSAN_ANNOTATE_IGNORE_WRITES_END;\
\r
22 CDS_TSAN_ANNOTATE_IGNORE_READS_END
\r
26 void AnnotateHappensBefore(const char *f, int l, void *addr);
\r
27 void AnnotateHappensAfter(const char *f, int l, void *addr);
\r
29 void AnnotateIgnoreReadsBegin(const char *f, int l);
\r
30 void AnnotateIgnoreReadsEnd(const char *f, int l);
\r
31 void AnnotateIgnoreWritesBegin(const char *f, int l);
\r
32 void AnnotateIgnoreWritesEnd(const char *f, int l);
\r
35 # define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr)
\r
36 # define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr)
38 # define CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN
\r
39 # define CDS_TSAN_ANNOTATE_IGNORE_READS_END
\r
40 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN
\r
41 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_END
\r
42 # define CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN
\r
43 # define CDS_TSAN_ANNOTATE_IGNORE_RW_END
\r
46 #endif // #ifndef CDSLIB_COMPILER_FEATURE_TSAN_H