Index: base/third_party/dynamic_annotations/dynamic_annotations.c |
=================================================================== |
--- base/third_party/dynamic_annotations/dynamic_annotations.c (revision 84779) |
+++ base/third_party/dynamic_annotations/dynamic_annotations.c (working copy) |
@@ -1,4 +1,4 @@ |
-/* Copyright (c) 2008-2009, Google Inc. |
+/* Copyright (c) 2011, Google Inc. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
@@ -22,9 +22,6 @@ |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- * |
- * --- |
- * Author: Kostya Serebryany |
*/ |
#ifdef _MSC_VER |
@@ -50,82 +47,172 @@ |
#if DYNAMIC_ANNOTATIONS_ENABLED == 1 |
+/* Identical code folding(-Wl,--icf=all) countermeasures. |
+ This makes all Annotate* functions different, which prevents the linker from |
+ folding them. */ |
+#ifdef __COUNTER__ |
+#define DYNAMIC_ANNOTATIONS_IMPL \ |
+ volatile short lineno = (__LINE__ << 8) + __COUNTER__; (void)lineno; |
+#else |
+#define DYNAMIC_ANNOTATIONS_IMPL \ |
+ volatile short lineno = (__LINE__ << 8); (void)lineno; |
+#endif |
+ |
+/* WARNING: always add new annotations to the end of the list. |
+ Otherwise, lineno (see above) numbers for different Annotate* functions may |
+ conflict. */ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockCreate)( |
- const char *file, int line, const volatile void *lock){} |
+ const char *file, int line, const volatile void *lock) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockDestroy)( |
- const char *file, int line, const volatile void *lock){} |
+ const char *file, int line, const volatile void *lock) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockAcquired)( |
- const char *file, int line, const volatile void *lock, long is_w){} |
+ const char *file, int line, const volatile void *lock, long is_w) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateRWLockReleased)( |
- const char *file, int line, const volatile void *lock, long is_w){} |
+ const char *file, int line, const volatile void *lock, long is_w) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierInit)( |
const char *file, int line, const volatile void *barrier, long count, |
- long reinitialization_allowed) {} |
+ long reinitialization_allowed) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierWaitBefore)( |
- const char *file, int line, const volatile void *barrier) {} |
+ const char *file, int line, const volatile void *barrier) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierWaitAfter)( |
- const char *file, int line, const volatile void *barrier) {} |
+ const char *file, int line, const volatile void *barrier) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateBarrierDestroy)( |
- const char *file, int line, const volatile void *barrier) {} |
+ const char *file, int line, const volatile void *barrier) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarWait)( |
const char *file, int line, const volatile void *cv, |
- const volatile void *lock){} |
+ const volatile void *lock) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarSignal)( |
- const char *file, int line, const volatile void *cv){} |
+ const char *file, int line, const volatile void *cv) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateCondVarSignalAll)( |
- const char *file, int line, const volatile void *cv){} |
+ const char *file, int line, const volatile void *cv) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateHappensBefore)( |
+ const char *file, int line, const volatile void *obj) |
+{DYNAMIC_ANNOTATIONS_IMPL}; |
+ |
+void DYNAMIC_ANNOTATIONS_NAME(AnnotateHappensAfter)( |
+ const char *file, int line, const volatile void *obj) |
+{DYNAMIC_ANNOTATIONS_IMPL}; |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotatePublishMemoryRange)( |
- const char *file, int line, const volatile void *address, long size){} |
+ const char *file, int line, const volatile void *address, long size) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateUnpublishMemoryRange)( |
- const char *file, int line, const volatile void *address, long size){} |
+ const char *file, int line, const volatile void *address, long size) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQCreate)( |
- const char *file, int line, const volatile void *pcq){} |
+ const char *file, int line, const volatile void *pcq) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQDestroy)( |
- const char *file, int line, const volatile void *pcq){} |
+ const char *file, int line, const volatile void *pcq) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQPut)( |
- const char *file, int line, const volatile void *pcq){} |
+ const char *file, int line, const volatile void *pcq) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotatePCQGet)( |
- const char *file, int line, const volatile void *pcq){} |
+ const char *file, int line, const volatile void *pcq) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateNewMemory)( |
- const char *file, int line, const volatile void *mem, long size){} |
+ const char *file, int line, const volatile void *mem, long size) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateExpectRace)( |
const char *file, int line, const volatile void *mem, |
- const char *description){} |
+ const char *description) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateFlushExpectedRaces)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateBenignRace)( |
const char *file, int line, const volatile void *mem, |
- const char *description){} |
+ const char *description) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateBenignRaceSized)( |
const char *file, int line, const volatile void *mem, long size, |
- const char *description){} |
+ const char *description) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateMutexIsUsedAsCondVar)( |
- const char *file, int line, const volatile void *mu){} |
+ const char *file, int line, const volatile void *mu) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateMutexIsNotPHB)( |
- const char *file, int line, const volatile void *mu){} |
+ const char *file, int line, const volatile void *mu) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateTraceMemory)( |
- const char *file, int line, const volatile void *arg){} |
+ const char *file, int line, const volatile void *arg) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateThreadName)( |
- const char *file, int line, const char *name){} |
+ const char *file, int line, const char *name) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreReadsBegin)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreReadsEnd)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreWritesBegin)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreWritesEnd)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreSyncBegin)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateIgnoreSyncEnd)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateEnableRaceDetection)( |
- const char *file, int line, int enable){} |
+ const char *file, int line, int enable) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateNoOp)( |
- const char *file, int line, const volatile void *arg){} |
+ const char *file, int line, const volatile void *arg) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
+ |
void DYNAMIC_ANNOTATIONS_NAME(AnnotateFlushState)( |
- const char *file, int line){} |
+ const char *file, int line) |
+{DYNAMIC_ANNOTATIONS_IMPL} |
#endif /* DYNAMIC_ANNOTATIONS_ENABLED == 1 */ |