#ifndef _UNIFIED_ANNOTATIONS_H_ #define _UNIFIED_ANNOTATIONS_H_ #include "../../drd/drd.h" /* * Define annotation macros such that these can be intercepted by DRD, Helgrind * and ThreadSanitizer. See also * http://code.google.com/p/data-race-test/source/browse/trunk/dynamic_annotations/dynamic_annotations.h */ #define U_ANNOTATE_NEW_MEMORY(addr, size) ANNOTATE_NEW_MEMORY(addr, size) #define U_ANNOTATE_HAPPENS_BEFORE(addr) U_AnnotateHappensBefore(addr) #define U_ANNOTATE_HAPPENS_AFTER(addr) U_AnnotateHappensAfter(addr) #define U_ANNOTATE_HAPPENS_DONE(addr) \ do { \ ANNOTATE_HAPPENS_DONE(addr); \ } while(0) #ifdef __cplusplus extern "C" { #endif #if 0 } #endif void __attribute__((weak,noinline)) AnnotateCondVarSignal(const char *file, int line, const volatile void *cv) { asm(""); } void __attribute__((weak,noinline)) AnnotateCondVarWait(const char *file, int line, const volatile void *cv, const volatile void *lock) { asm(""); } static __inline__ void U_AnnotateHappensBefore(void* addr) { ANNOTATE_HAPPENS_BEFORE(addr); AnnotateCondVarSignal(__FILE__, __LINE__, addr); } static __inline__ void U_AnnotateHappensAfter(void *addr) { ANNOTATE_HAPPENS_AFTER(addr); AnnotateCondVarWait(__FILE__, __LINE__, addr, NULL); } #if 0 { #endif #ifdef __cplusplus } #endif #endif /* _UNIFIED_ANNOTATIONS_H_ */