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
11 #ifdef CDS_THREAD_SANITIZER_ENABLED
12 # define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr) AnnotateHappensBefore(__FILE__, __LINE__, reinterpret_cast<void*>(addr))
13 # define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr) AnnotateHappensAfter(__FILE__, __LINE__, reinterpret_cast<void*>(addr))
15 # define CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN AnnotateIgnoreReadsBegin(__FILE__, __LINE__)
16 # define CDS_TSAN_ANNOTATE_IGNORE_READS_END AnnotateIgnoreReadsEnd(__FILE__, __LINE__)
17 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
18 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_END AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
19 # define CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN \
20 CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN; \
21 CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN
22 # define CDS_TSAN_ANNOTATE_IGNORE_RW_END \
23 CDS_TSAN_ANNOTATE_IGNORE_WRITES_END;\
24 CDS_TSAN_ANNOTATE_IGNORE_READS_END
25 # define CDS_TSAN_ANNOTATE_NEW_MEMORY( addr, sz ) AnnotateNewMemory( (char *) __FILE__, __LINE__, reinterpret_cast<void *>(addr), sz )
29 void AnnotateHappensBefore(const char *f, int l, void *addr);
30 void AnnotateHappensAfter(const char *f, int l, void *addr);
32 void AnnotateIgnoreReadsBegin(const char *f, int l);
33 void AnnotateIgnoreReadsEnd(const char *f, int l);
34 void AnnotateIgnoreWritesBegin(const char *f, int l);
35 void AnnotateIgnoreWritesEnd(const char *f, int l);
37 void AnnotateNewMemory(char *f, int l, void * mem, size_t size);
41 #else // CDS_THREAD_SANITIZER_ENABLED
43 # define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr)
44 # define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr)
46 # define CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN
47 # define CDS_TSAN_ANNOTATE_IGNORE_READS_END
48 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN
49 # define CDS_TSAN_ANNOTATE_IGNORE_WRITES_END
50 # define CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN
51 # define CDS_TSAN_ANNOTATE_IGNORE_RW_END
53 # define CDS_TSAN_ANNOTATE_NEW_MEMORY( addr, sz )
58 #endif // #ifndef CDSLIB_COMPILER_FEATURE_TSAN_H