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