bart | 5530f5f | 2010-03-07 10:42:15 +0000 | [diff] [blame] | 1 | #ifndef _UNIFIED_ANNOTATIONS_H_ |
| 2 | #define _UNIFIED_ANNOTATIONS_H_ |
| 3 | |
| 4 | |
| 5 | #include "../../drd/drd.h" |
| 6 | |
| 7 | |
| 8 | /* |
bart | a7103ba | 2010-09-02 09:38:55 +0000 | [diff] [blame] | 9 | * Define annotation macros such that these can be intercepted by DRD, Helgrind |
| 10 | * and ThreadSanitizer. See also |
bart | 5530f5f | 2010-03-07 10:42:15 +0000 | [diff] [blame] | 11 | * http://code.google.com/p/data-race-test/source/browse/trunk/dynamic_annotations/dynamic_annotations.h |
| 12 | */ |
bart | a7103ba | 2010-09-02 09:38:55 +0000 | [diff] [blame] | 13 | #define U_ANNOTATE_NEW_MEMORY(addr, size) ANNOTATE_NEW_MEMORY(addr, size) |
bart | e059791 | 2010-09-11 10:00:22 +0000 | [diff] [blame] | 14 | #define U_ANNOTATE_HAPPENS_BEFORE(addr) U_AnnotateHappensBefore(addr) |
| 15 | #define U_ANNOTATE_HAPPENS_AFTER(addr) U_AnnotateHappensAfter(addr) |
bart | a7103ba | 2010-09-02 09:38:55 +0000 | [diff] [blame] | 16 | #define U_ANNOTATE_HAPPENS_DONE(addr) \ |
bart | 5530f5f | 2010-03-07 10:42:15 +0000 | [diff] [blame] | 17 | do { \ |
bart | a7103ba | 2010-09-02 09:38:55 +0000 | [diff] [blame] | 18 | ANNOTATE_HAPPENS_DONE(addr); \ |
bart | 5530f5f | 2010-03-07 10:42:15 +0000 | [diff] [blame] | 19 | } while(0) |
| 20 | |
| 21 | |
| 22 | #ifdef __cplusplus |
| 23 | extern "C" { |
| 24 | #endif |
| 25 | #if 0 |
| 26 | } |
| 27 | #endif |
| 28 | |
| 29 | |
| 30 | void __attribute__((weak,noinline)) |
| 31 | AnnotateCondVarSignal(const char *file, int line, const volatile void *cv) |
| 32 | { |
| 33 | asm(""); |
| 34 | } |
| 35 | |
| 36 | void __attribute__((weak,noinline)) |
| 37 | AnnotateCondVarWait(const char *file, int line, const volatile void *cv, |
| 38 | const volatile void *lock) |
| 39 | { |
| 40 | asm(""); |
| 41 | } |
| 42 | |
bart | e059791 | 2010-09-11 10:00:22 +0000 | [diff] [blame] | 43 | static __inline__ void U_AnnotateHappensBefore(void* addr) |
| 44 | { |
| 45 | ANNOTATE_HAPPENS_BEFORE(addr); |
| 46 | AnnotateCondVarSignal(__FILE__, __LINE__, addr); |
| 47 | } |
| 48 | |
| 49 | static __inline__ void U_AnnotateHappensAfter(void *addr) |
| 50 | { |
| 51 | ANNOTATE_HAPPENS_AFTER(addr); |
| 52 | AnnotateCondVarWait(__FILE__, __LINE__, addr, NULL); |
| 53 | } |
| 54 | |
bart | 5530f5f | 2010-03-07 10:42:15 +0000 | [diff] [blame] | 55 | |
| 56 | #if 0 |
| 57 | { |
| 58 | #endif |
| 59 | #ifdef __cplusplus |
| 60 | } |
| 61 | #endif |
| 62 | |
| 63 | |
| 64 | #endif /* _UNIFIED_ANNOTATIONS_H_ */ |