Index: base/third_party/dynamic_annotations/dynamic_annotations.h |
=================================================================== |
--- base/third_party/dynamic_annotations/dynamic_annotations.h (revision 73451) |
+++ base/third_party/dynamic_annotations/dynamic_annotations.h (working copy) |
@@ -53,6 +53,33 @@ |
#ifndef __DYNAMIC_ANNOTATIONS_H__ |
#define __DYNAMIC_ANNOTATIONS_H__ |
+#ifndef DYNAMIC_ANNOTATIONS_PREFIX |
+# define DYNAMIC_ANNOTATIONS_PREFIX |
+#endif |
+ |
+#ifndef DYNAMIC_ANNOTATIONS_PROVIDE_RUNNING_ON_VALGRIND |
+# define DYNAMIC_ANNOTATIONS_PROVIDE_RUNNING_ON_VALGRIND 1 |
+#endif |
+ |
+#ifdef DYNAMIC_ANNOTATIONS_WANT_ATTRIBUTE_WEAK |
+# ifdef __GNUC__ |
+# define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK __attribute__((weak)) |
+# else |
+/* TODO(glider): for Windows support we may want to change this macro in order |
+ to prepend __declspec(selectany) to the annotations' declarations. */ |
+# error weak annotations are not supported for your compiler |
+# endif |
+#else |
+# define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK |
+#endif |
+ |
+/* The following preprocessor magic prepends the value of |
+ DYNAMIC_ANNOTATIONS_PREFIX to annotation function names. */ |
+#define DYNAMIC_ANNOTATIONS_GLUE0(A, B) A##B |
+#define DYNAMIC_ANNOTATIONS_GLUE(A, B) DYNAMIC_ANNOTATIONS_GLUE0(A, B) |
+#define DYNAMIC_ANNOTATIONS_NAME(name) \ |
+ DYNAMIC_ANNOTATIONS_GLUE(DYNAMIC_ANNOTATIONS_PREFIX, name) |
+ |
#ifndef DYNAMIC_ANNOTATIONS_ENABLED |
# define DYNAMIC_ANNOTATIONS_ENABLED 0 |
#endif |
@@ -100,40 +127,36 @@ |
/* Report that wait on the condition variable at address "cv" has succeeded |
and the lock at address "lock" is held. */ |
#define ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \ |
- AnnotateCondVarWait(__FILE__, __LINE__, cv, lock) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarWait)(__FILE__, __LINE__, cv, lock) |
/* Report that wait on the condition variable at "cv" has succeeded. Variant |
w/o lock. */ |
#define ANNOTATE_CONDVAR_WAIT(cv) \ |
- AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarWait)(__FILE__, __LINE__, cv, NULL) |
/* Report that we are about to signal on the condition variable at address |
"cv". */ |
#define ANNOTATE_CONDVAR_SIGNAL(cv) \ |
- AnnotateCondVarSignal(__FILE__, __LINE__, cv) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarSignal)(__FILE__, __LINE__, cv) |
/* Report that we are about to signal_all on the condition variable at address |
"cv". */ |
#define ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \ |
- AnnotateCondVarSignalAll(__FILE__, __LINE__, cv) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarSignalAll)(__FILE__, __LINE__, cv) |
/* Annotations for user-defined synchronization mechanisms. */ |
#define ANNOTATE_HAPPENS_BEFORE(obj) ANNOTATE_CONDVAR_SIGNAL(obj) |
#define ANNOTATE_HAPPENS_AFTER(obj) ANNOTATE_CONDVAR_WAIT(obj) |
- /* Report that the bytes in the range [pointer, pointer+size) are about |
- to be published safely. The race checker will create a happens-before |
- arc from the call ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) to |
- subsequent accesses to this memory. |
- Note: this annotation may not work properly if the race detector uses |
- sampling, i.e. does not observe all memory accesses. |
- */ |
+ /* DEPRECATED. Don't use it. */ |
#define ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \ |
- AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotatePublishMemoryRange)(__FILE__, __LINE__, \ |
+ pointer, size) |
/* DEPRECATED. Don't use it. */ |
#define ANNOTATE_UNPUBLISH_MEMORY_RANGE(pointer, size) \ |
- AnnotateUnpublishMemoryRange(__FILE__, __LINE__, pointer, size) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateUnpublishMemoryRange)(__FILE__, __LINE__, \ |
+ pointer, size) |
/* DEPRECATED. Don't use it. */ |
#define ANNOTATE_SWAP_MEMORY_RANGE(pointer, size) \ |
@@ -150,11 +173,19 @@ |
happens-before detectors this is a no-op. For more details see |
http://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */ |
#define ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \ |
- AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateMutexIsUsedAsCondVar)(__FILE__, __LINE__, \ |
+ mu) |
+ /* Opposite to ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX. |
+ Instruct the tool to NOT create h-b arcs between Unlock and Lock, even in |
+ pure happens-before mode. For a hybrid mode this is a no-op. */ |
+ #define ANNOTATE_NOT_HAPPENS_BEFORE_MUTEX(mu) \ |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateMutexIsNotPHB)(__FILE__, __LINE__, mu) |
+ |
/* Deprecated. Use ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX. */ |
#define ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) \ |
- AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateMutexIsUsedAsCondVar)(__FILE__, __LINE__, \ |
+ mu) |
/* ------------------------------------------------------------- |
Annotations useful when defining memory allocators, or when memory that |
@@ -165,7 +196,8 @@ |
is about to be reused, or when a the locking discipline for a variable |
changes. */ |
#define ANNOTATE_NEW_MEMORY(address, size) \ |
- AnnotateNewMemory(__FILE__, __LINE__, address, size) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateNewMemory)(__FILE__, __LINE__, address, \ |
+ size) |
/* ------------------------------------------------------------- |
Annotations useful when defining FIFO queues that transfer data between |
@@ -176,21 +208,21 @@ |
should be used only for FIFO queues. For non-FIFO queues use |
ANNOTATE_HAPPENS_BEFORE (for put) and ANNOTATE_HAPPENS_AFTER (for get). */ |
#define ANNOTATE_PCQ_CREATE(pcq) \ |
- AnnotatePCQCreate(__FILE__, __LINE__, pcq) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQCreate)(__FILE__, __LINE__, pcq) |
/* Report that the queue at address "pcq" is about to be destroyed. */ |
#define ANNOTATE_PCQ_DESTROY(pcq) \ |
- AnnotatePCQDestroy(__FILE__, __LINE__, pcq) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQDestroy)(__FILE__, __LINE__, pcq) |
/* Report that we are about to put an element into a FIFO queue at address |
"pcq". */ |
#define ANNOTATE_PCQ_PUT(pcq) \ |
- AnnotatePCQPut(__FILE__, __LINE__, pcq) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQPut)(__FILE__, __LINE__, pcq) |
/* Report that we've just got an element from a FIFO queue at address |
"pcq". */ |
#define ANNOTATE_PCQ_GET(pcq) \ |
- AnnotatePCQGet(__FILE__, __LINE__, pcq) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQGet)(__FILE__, __LINE__, pcq) |
/* ------------------------------------------------------------- |
Annotations that suppress errors. It is usually better to express the |
@@ -202,13 +234,14 @@ |
point where "pointer" has been allocated, preferably close to the point |
where the race happens. See also ANNOTATE_BENIGN_RACE_STATIC. */ |
#define ANNOTATE_BENIGN_RACE(pointer, description) \ |
- AnnotateBenignRaceSized(__FILE__, __LINE__, pointer, \ |
- sizeof(*(pointer)), description) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateBenignRaceSized)(__FILE__, __LINE__, \ |
+ pointer, sizeof(*(pointer)), description) |
/* Same as ANNOTATE_BENIGN_RACE(address, description), but applies to |
the memory range [address, address+size). */ |
#define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \ |
- AnnotateBenignRaceSized(__FILE__, __LINE__, address, size, description) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateBenignRaceSized)(__FILE__, __LINE__, \ |
+ address, size, description) |
/* Request the analysis tool to ignore all reads in the current thread |
until ANNOTATE_IGNORE_READS_END is called. |
@@ -216,19 +249,19 @@ |
other reads and all writes. |
See also ANNOTATE_UNPROTECTED_READ. */ |
#define ANNOTATE_IGNORE_READS_BEGIN() \ |
- AnnotateIgnoreReadsBegin(__FILE__, __LINE__) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreReadsBegin)(__FILE__, __LINE__) |
/* Stop ignoring reads. */ |
#define ANNOTATE_IGNORE_READS_END() \ |
- AnnotateIgnoreReadsEnd(__FILE__, __LINE__) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreReadsEnd)(__FILE__, __LINE__) |
/* Similar to ANNOTATE_IGNORE_READS_BEGIN, but ignore writes. */ |
#define ANNOTATE_IGNORE_WRITES_BEGIN() \ |
- AnnotateIgnoreWritesBegin(__FILE__, __LINE__) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreWritesBegin)(__FILE__, __LINE__) |
/* Stop ignoring writes. */ |
#define ANNOTATE_IGNORE_WRITES_END() \ |
- AnnotateIgnoreWritesEnd(__FILE__, __LINE__) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreWritesEnd)(__FILE__, __LINE__) |
/* Start ignoring all memory accesses (reads and writes). */ |
#define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ |
@@ -247,29 +280,30 @@ |
/* Similar to ANNOTATE_IGNORE_READS_BEGIN, but ignore synchronization events: |
RWLOCK* and CONDVAR*. */ |
#define ANNOTATE_IGNORE_SYNC_BEGIN() \ |
- AnnotateIgnoreSyncBegin(__FILE__, __LINE__) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreSyncBegin)(__FILE__, __LINE__) |
/* Stop ignoring sync events. */ |
#define ANNOTATE_IGNORE_SYNC_END() \ |
- AnnotateIgnoreSyncEnd(__FILE__, __LINE__) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreSyncEnd)(__FILE__, __LINE__) |
/* Enable (enable!=0) or disable (enable==0) race detection for all threads. |
This annotation could be useful if you want to skip expensive race analysis |
during some period of program execution, e.g. during initialization. */ |
#define ANNOTATE_ENABLE_RACE_DETECTION(enable) \ |
- AnnotateEnableRaceDetection(__FILE__, __LINE__, enable) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateEnableRaceDetection)(__FILE__, __LINE__, \ |
+ enable) |
/* ------------------------------------------------------------- |
Annotations useful for debugging. */ |
/* Request to trace every access to "address". */ |
#define ANNOTATE_TRACE_MEMORY(address) \ |
- AnnotateTraceMemory(__FILE__, __LINE__, address) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateTraceMemory)(__FILE__, __LINE__, address) |
/* Report the current thread name to a race detector. */ |
#define ANNOTATE_THREAD_NAME(name) \ |
- AnnotateThreadName(__FILE__, __LINE__, name) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateThreadName)(__FILE__, __LINE__, name) |
/* ------------------------------------------------------------- |
Annotations useful when implementing locks. They are not |
@@ -278,20 +312,22 @@ |
/* Report that a lock has been created at address "lock". */ |
#define ANNOTATE_RWLOCK_CREATE(lock) \ |
- AnnotateRWLockCreate(__FILE__, __LINE__, lock) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockCreate)(__FILE__, __LINE__, lock) |
/* Report that the lock at address "lock" is about to be destroyed. */ |
#define ANNOTATE_RWLOCK_DESTROY(lock) \ |
- AnnotateRWLockDestroy(__FILE__, __LINE__, lock) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockDestroy)(__FILE__, __LINE__, lock) |
/* Report that the lock at address "lock" has been acquired. |
is_w=1 for writer lock, is_w=0 for reader lock. */ |
#define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ |
- AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockAcquired)(__FILE__, __LINE__, lock, \ |
+ is_w) |
/* Report that the lock at address "lock" is about to be released. */ |
#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ |
- AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockReleased)(__FILE__, __LINE__, lock, \ |
+ is_w) |
/* ------------------------------------------------------------- |
Annotations useful when implementing barriers. They are not |
@@ -302,20 +338,23 @@ |
If 'reinitialization_allowed' is true, initialization is allowed to happen |
multiple times w/o calling barrier_destroy() */ |
#define ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \ |
- AnnotateBarrierInit(__FILE__, __LINE__, barrier, count, \ |
- reinitialization_allowed) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierInit)(__FILE__, __LINE__, barrier, \ |
+ count, reinitialization_allowed) |
/* Report that we are about to enter barrier_wait("barrier"). */ |
#define ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \ |
- AnnotateBarrierWaitBefore(__FILE__, __LINE__, barrier) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierWaitBefore)(__FILE__, __LINE__, \ |
+ barrier) |
/* Report that we just exited barrier_wait("barrier"). */ |
#define ANNOTATE_BARRIER_WAIT_AFTER(barrier) \ |
- AnnotateBarrierWaitAfter(__FILE__, __LINE__, barrier) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierWaitAfter)(__FILE__, __LINE__, \ |
+ barrier) |
/* Report that the "barrier" has been destroyed. */ |
#define ANNOTATE_BARRIER_DESTROY(barrier) \ |
- AnnotateBarrierDestroy(__FILE__, __LINE__, barrier) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierDestroy)(__FILE__, __LINE__, \ |
+ barrier) |
/* ------------------------------------------------------------- |
Annotations useful for testing race detectors. */ |
@@ -323,16 +362,20 @@ |
/* Report that we expect a race on the variable at "address". |
Use only in unit tests for a race detector. */ |
#define ANNOTATE_EXPECT_RACE(address, description) \ |
- AnnotateExpectRace(__FILE__, __LINE__, address, description) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateExpectRace)(__FILE__, __LINE__, address, \ |
+ description) |
+ #define ANNOTATE_FLUSH_EXPECTED_RACES() \ |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateFlushExpectedRaces)(__FILE__, __LINE__) |
+ |
/* A no-op. Insert where you like to test the interceptors. */ |
#define ANNOTATE_NO_OP(arg) \ |
- AnnotateNoOp(__FILE__, __LINE__, arg) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateNoOp)(__FILE__, __LINE__, arg) |
/* Force the race detector to flush its state. The actual effect depends on |
* the implementation of the detector. */ |
#define ANNOTATE_FLUSH_STATE() \ |
- AnnotateFlushState(__FILE__, __LINE__) |
+ DYNAMIC_ANNOTATIONS_NAME(AnnotateFlushState)(__FILE__, __LINE__) |
#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ |
@@ -360,6 +403,7 @@ |
#define ANNOTATE_PCQ_GET(pcq) /* empty */ |
#define ANNOTATE_NEW_MEMORY(address, size) /* empty */ |
#define ANNOTATE_EXPECT_RACE(address, description) /* empty */ |
+ #define ANNOTATE_FLUSH_EXPECTED_RACES(address, description) /* empty */ |
#define ANNOTATE_BENIGN_RACE(address, description) /* empty */ |
#define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) /* empty */ |
#define ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) /* empty */ |
@@ -384,72 +428,106 @@ |
#ifdef __cplusplus |
extern "C" { |
#endif |
-void AnnotateRWLockCreate(const char *file, int line, |
- const volatile void *lock); |
-void AnnotateRWLockDestroy(const char *file, int line, |
- const volatile void *lock); |
-void AnnotateRWLockAcquired(const char *file, int line, |
- const volatile void *lock, long is_w); |
-void AnnotateRWLockReleased(const char *file, int line, |
- const volatile void *lock, long is_w); |
-void AnnotateBarrierInit(const char *file, int line, |
- const volatile void *barrier, long count, |
- long reinitialization_allowed); |
-void AnnotateBarrierWaitBefore(const char *file, int line, |
- const volatile void *barrier); |
-void AnnotateBarrierWaitAfter(const char *file, int line, |
- const volatile void *barrier); |
-void AnnotateBarrierDestroy(const char *file, int line, |
- const volatile void *barrier); |
-void AnnotateCondVarWait(const char *file, int line, |
- const volatile void *cv, |
- const volatile void *lock); |
-void AnnotateCondVarSignal(const char *file, int line, |
- const volatile void *cv); |
-void AnnotateCondVarSignalAll(const char *file, int line, |
- const volatile void *cv); |
-void AnnotatePublishMemoryRange(const char *file, int line, |
- const volatile void *address, |
- long size); |
-void AnnotateUnpublishMemoryRange(const char *file, int line, |
- const volatile void *address, |
- long size); |
-void AnnotatePCQCreate(const char *file, int line, |
- const volatile void *pcq); |
-void AnnotatePCQDestroy(const char *file, int line, |
- const volatile void *pcq); |
-void AnnotatePCQPut(const char *file, int line, |
- const volatile void *pcq); |
-void AnnotatePCQGet(const char *file, int line, |
- const volatile void *pcq); |
-void AnnotateNewMemory(const char *file, int line, |
- const volatile void *address, |
- long size); |
-void AnnotateExpectRace(const char *file, int line, |
- const volatile void *address, |
- const char *description); |
-void AnnotateBenignRace(const char *file, int line, |
- const volatile void *address, |
- const char *description); |
-void AnnotateBenignRaceSized(const char *file, int line, |
- const volatile void *address, |
- long size, |
- const char *description); |
-void AnnotateMutexIsUsedAsCondVar(const char *file, int line, |
- const volatile void *mu); |
-void AnnotateTraceMemory(const char *file, int line, |
- const volatile void *arg); |
-void AnnotateThreadName(const char *file, int line, |
- const char *name); |
-void AnnotateIgnoreReadsBegin(const char *file, int line); |
-void AnnotateIgnoreReadsEnd(const char *file, int line); |
-void AnnotateIgnoreWritesBegin(const char *file, int line); |
-void AnnotateIgnoreWritesEnd(const char *file, int line); |
-void AnnotateEnableRaceDetection(const char *file, int line, int enable); |
-void AnnotateNoOp(const char *file, int line, |
- const volatile void *arg); |
-void AnnotateFlushState(const char *file, int line); |
+ |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockCreate)( |
+ const char *file, int line, |
+ const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockDestroy)( |
+ const char *file, int line, |
+ const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockAcquired)( |
+ const char *file, int line, |
+ const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockReleased)( |
+ const char *file, int line, |
+ const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierInit)( |
+ const char *file, int line, const volatile void *barrier, long count, |
+ long reinitialization_allowed) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierWaitBefore)( |
+ const char *file, int line, |
+ const volatile void *barrier) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierWaitAfter)( |
+ const char *file, int line, |
+ const volatile void *barrier) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierDestroy)( |
+ const char *file, int line, |
+ const volatile void *barrier) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarWait)( |
+ const char *file, int line, const volatile void *cv, |
+ const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarSignal)( |
+ const char *file, int line, |
+ const volatile void *cv) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarSignalAll)( |
+ const char *file, int line, |
+ const volatile void *cv) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotatePublishMemoryRange)( |
+ const char *file, int line, |
+ const volatile void *address, long size) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateUnpublishMemoryRange)( |
+ const char *file, int line, |
+ const volatile void *address, long size) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQCreate)( |
+ const char *file, int line, |
+ const volatile void *pcq) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQDestroy)( |
+ const char *file, int line, |
+ const volatile void *pcq) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQPut)( |
+ const char *file, int line, |
+ const volatile void *pcq) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQGet)( |
+ const char *file, int line, |
+ const volatile void *pcq) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateNewMemory)( |
+ const char *file, int line, |
+ const volatile void *mem, long size) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateExpectRace)( |
+ const char *file, int line, const volatile void *mem, |
+ const char *description) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateFlushExpectedRaces)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateBenignRace)( |
+ const char *file, int line, const volatile void *mem, |
+ const char *description) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateBenignRaceSized)( |
+ const char *file, int line, const volatile void *mem, long size, |
+ const char *description) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateMutexIsUsedAsCondVar)( |
+ const char *file, int line, |
+ const volatile void *mu) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateMutexIsNotPHB)( |
+ const char *file, int line, |
+ const volatile void *mu) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateTraceMemory)( |
+ const char *file, int line, |
+ const volatile void *arg) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateThreadName)( |
+ const char *file, int line, |
+ const char *name) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreReadsBegin)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreReadsEnd)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreWritesBegin)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreWritesEnd)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreSyncBegin)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreSyncEnd)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateEnableRaceDetection)( |
+ const char *file, int line, int enable) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateNoOp)( |
+ const char *file, int line, |
+ const volatile void *arg) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateFlushState)( |
+ const char *file, int line) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; |
+ |
+#if DYNAMIC_ANNOTATIONS_PROVIDE_RUNNING_ON_VALGRIND == 1 |
/* Return non-zero value if running under valgrind. |
If "valgrind.h" is included into dynamic_annotations.c, |
@@ -466,6 +544,7 @@ |
change its return value. |
*/ |
int RunningOnValgrind(void); |
+#endif /* DYNAMIC_ANNOTATIONS_PROVIDE_RUNNING_ON_VALGRIND == 1 */ |
#ifdef __cplusplus |
} |