15530f5f35830ab84a42a69e01f7762666813b75dbart#ifndef _UNIFIED_ANNOTATIONS_H_ 25530f5f35830ab84a42a69e01f7762666813b75dbart#define _UNIFIED_ANNOTATIONS_H_ 35530f5f35830ab84a42a69e01f7762666813b75dbart 45530f5f35830ab84a42a69e01f7762666813b75dbart 55530f5f35830ab84a42a69e01f7762666813b75dbart#include "../../drd/drd.h" 65530f5f35830ab84a42a69e01f7762666813b75dbart 75530f5f35830ab84a42a69e01f7762666813b75dbart 85530f5f35830ab84a42a69e01f7762666813b75dbart/* 9a7103ba0cf607f349bd6f2ba5becce83e9633fc8bart * Define annotation macros such that these can be intercepted by DRD, Helgrind 10a7103ba0cf607f349bd6f2ba5becce83e9633fc8bart * and ThreadSanitizer. See also 115530f5f35830ab84a42a69e01f7762666813b75dbart * http://code.google.com/p/data-race-test/source/browse/trunk/dynamic_annotations/dynamic_annotations.h 125530f5f35830ab84a42a69e01f7762666813b75dbart */ 13a7103ba0cf607f349bd6f2ba5becce83e9633fc8bart#define U_ANNOTATE_NEW_MEMORY(addr, size) ANNOTATE_NEW_MEMORY(addr, size) 14e059791b6122a37ed3d780735f298d438e6a0d55bart#define U_ANNOTATE_HAPPENS_BEFORE(addr) U_AnnotateHappensBefore(addr) 15e059791b6122a37ed3d780735f298d438e6a0d55bart#define U_ANNOTATE_HAPPENS_AFTER(addr) U_AnnotateHappensAfter(addr) 16a7103ba0cf607f349bd6f2ba5becce83e9633fc8bart#define U_ANNOTATE_HAPPENS_DONE(addr) \ 175530f5f35830ab84a42a69e01f7762666813b75dbart do { \ 18a7103ba0cf607f349bd6f2ba5becce83e9633fc8bart ANNOTATE_HAPPENS_DONE(addr); \ 195530f5f35830ab84a42a69e01f7762666813b75dbart } while(0) 205530f5f35830ab84a42a69e01f7762666813b75dbart 215530f5f35830ab84a42a69e01f7762666813b75dbart 225530f5f35830ab84a42a69e01f7762666813b75dbart#ifdef __cplusplus 235530f5f35830ab84a42a69e01f7762666813b75dbartextern "C" { 245530f5f35830ab84a42a69e01f7762666813b75dbart#endif 255530f5f35830ab84a42a69e01f7762666813b75dbart#if 0 265530f5f35830ab84a42a69e01f7762666813b75dbart} 275530f5f35830ab84a42a69e01f7762666813b75dbart#endif 285530f5f35830ab84a42a69e01f7762666813b75dbart 295530f5f35830ab84a42a69e01f7762666813b75dbart 305530f5f35830ab84a42a69e01f7762666813b75dbartvoid __attribute__((weak,noinline)) 315530f5f35830ab84a42a69e01f7762666813b75dbartAnnotateCondVarSignal(const char *file, int line, const volatile void *cv) 325530f5f35830ab84a42a69e01f7762666813b75dbart{ 335530f5f35830ab84a42a69e01f7762666813b75dbart asm(""); 345530f5f35830ab84a42a69e01f7762666813b75dbart} 355530f5f35830ab84a42a69e01f7762666813b75dbart 365530f5f35830ab84a42a69e01f7762666813b75dbartvoid __attribute__((weak,noinline)) 375530f5f35830ab84a42a69e01f7762666813b75dbartAnnotateCondVarWait(const char *file, int line, const volatile void *cv, 385530f5f35830ab84a42a69e01f7762666813b75dbart const volatile void *lock) 395530f5f35830ab84a42a69e01f7762666813b75dbart{ 405530f5f35830ab84a42a69e01f7762666813b75dbart asm(""); 415530f5f35830ab84a42a69e01f7762666813b75dbart} 425530f5f35830ab84a42a69e01f7762666813b75dbart 43e059791b6122a37ed3d780735f298d438e6a0d55bartstatic __inline__ void U_AnnotateHappensBefore(void* addr) 44e059791b6122a37ed3d780735f298d438e6a0d55bart{ 45e059791b6122a37ed3d780735f298d438e6a0d55bart ANNOTATE_HAPPENS_BEFORE(addr); 46e059791b6122a37ed3d780735f298d438e6a0d55bart AnnotateCondVarSignal(__FILE__, __LINE__, addr); 47e059791b6122a37ed3d780735f298d438e6a0d55bart} 48e059791b6122a37ed3d780735f298d438e6a0d55bart 49e059791b6122a37ed3d780735f298d438e6a0d55bartstatic __inline__ void U_AnnotateHappensAfter(void *addr) 50e059791b6122a37ed3d780735f298d438e6a0d55bart{ 51e059791b6122a37ed3d780735f298d438e6a0d55bart ANNOTATE_HAPPENS_AFTER(addr); 52e059791b6122a37ed3d780735f298d438e6a0d55bart AnnotateCondVarWait(__FILE__, __LINE__, addr, NULL); 53e059791b6122a37ed3d780735f298d438e6a0d55bart} 54e059791b6122a37ed3d780735f298d438e6a0d55bart 555530f5f35830ab84a42a69e01f7762666813b75dbart 565530f5f35830ab84a42a69e01f7762666813b75dbart#if 0 575530f5f35830ab84a42a69e01f7762666813b75dbart{ 585530f5f35830ab84a42a69e01f7762666813b75dbart#endif 595530f5f35830ab84a42a69e01f7762666813b75dbart#ifdef __cplusplus 605530f5f35830ab84a42a69e01f7762666813b75dbart} 615530f5f35830ab84a42a69e01f7762666813b75dbart#endif 625530f5f35830ab84a42a69e01f7762666813b75dbart 635530f5f35830ab84a42a69e01f7762666813b75dbart 645530f5f35830ab84a42a69e01f7762666813b75dbart#endif /* _UNIFIED_ANNOTATIONS_H_ */ 65