| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef ABSL_BASE_INTERNAL_DYNAMIC_ANNOTATIONS_H_ |
| #define ABSL_BASE_INTERNAL_DYNAMIC_ANNOTATIONS_H_ |
|
|
| #include <stddef.h> |
|
|
| #include "absl/base/config.h" |
|
|
| |
| |
|
|
| #ifndef DYNAMIC_ANNOTATIONS_ENABLED |
| #define DYNAMIC_ANNOTATIONS_ENABLED 0 |
| #endif |
|
|
| #if defined(__clang__) && !defined(SWIG) |
| #define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1 |
| #endif |
|
|
| #if DYNAMIC_ANNOTATIONS_ENABLED != 0 |
|
|
| #define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 1 |
| #define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 1 |
| #define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 1 |
| #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0 |
| #define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED 1 |
|
|
| #else |
|
|
| #define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 0 |
| #define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 0 |
| #define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 0 |
|
|
| |
| |
| |
| |
| |
|
|
| |
| #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED \ |
| defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED) |
| |
| #define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED \ |
| ABSL_INTERNAL_ANNOTALYSIS_ENABLED |
| #endif |
|
|
| |
| #if defined(ABSL_HAVE_MEMORY_SANITIZER) && !defined(__native_client__) |
| #define ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED 1 |
| #endif |
|
|
| #ifndef ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED |
| #define ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED 0 |
| #endif |
|
|
| #ifdef __cplusplus |
| #define ABSL_INTERNAL_BEGIN_EXTERN_C extern "C" { |
| #define ABSL_INTERNAL_END_EXTERN_C } |
| #define ABSL_INTERNAL_GLOBAL_SCOPED(F) ::F |
| #define ABSL_INTERNAL_STATIC_INLINE inline |
| #else |
| #define ABSL_INTERNAL_BEGIN_EXTERN_C |
| #define ABSL_INTERNAL_END_EXTERN_C |
| #define ABSL_INTERNAL_GLOBAL_SCOPED(F) F |
| #define ABSL_INTERNAL_STATIC_INLINE static inline |
| #endif |
|
|
| |
| |
|
|
| #if ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED == 1 |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| #define ANNOTATE_BENIGN_RACE(pointer, description) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \ |
| (__FILE__, __LINE__, pointer, sizeof(*(pointer)), description) |
|
|
| |
| |
| #define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \ |
| (__FILE__, __LINE__, address, size, description) |
|
|
| |
| |
| |
| #define ANNOTATE_ENABLE_RACE_DETECTION(enable) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateEnableRaceDetection) \ |
| (__FILE__, __LINE__, enable) |
|
|
| |
| |
|
|
| |
| #define ANNOTATE_THREAD_NAME(name) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateThreadName)(__FILE__, __LINE__, name) |
|
|
| |
| |
| |
| |
|
|
| |
| #define ANNOTATE_RWLOCK_CREATE(lock) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreate)(__FILE__, __LINE__, lock) |
|
|
| |
| #ifdef ABSL_HAVE_THREAD_SANITIZER |
| #define ANNOTATE_RWLOCK_CREATE_STATIC(lock) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreateStatic) \ |
| (__FILE__, __LINE__, lock) |
| #else |
| #define ANNOTATE_RWLOCK_CREATE_STATIC(lock) ANNOTATE_RWLOCK_CREATE(lock) |
| #endif |
|
|
| |
| #define ANNOTATE_RWLOCK_DESTROY(lock) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockDestroy)(__FILE__, __LINE__, lock) |
|
|
| |
| |
| #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockAcquired) \ |
| (__FILE__, __LINE__, lock, is_w) |
|
|
| |
| |
| #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockReleased) \ |
| (__FILE__, __LINE__, lock, is_w) |
|
|
| |
| #define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \ |
| namespace { \ |
| class static_var##_annotator { \ |
| public: \ |
| static_var##_annotator() { \ |
| ANNOTATE_BENIGN_RACE_SIZED(&static_var, sizeof(static_var), \ |
| #static_var ": " description); \ |
| } \ |
| }; \ |
| static static_var##_annotator the##static_var##_annotator; \ |
| } |
|
|
| #else |
|
|
| #define ANNOTATE_RWLOCK_CREATE(lock) |
| #define ANNOTATE_RWLOCK_CREATE_STATIC(lock) |
| #define ANNOTATE_RWLOCK_DESTROY(lock) |
| #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) |
| #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) |
| #define ANNOTATE_BENIGN_RACE(address, description) |
| #define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) |
| #define ANNOTATE_THREAD_NAME(name) |
| #define ANNOTATE_ENABLE_RACE_DETECTION(enable) |
| #define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) |
|
|
| #endif |
|
|
| |
| |
|
|
| #if ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED == 1 |
|
|
| #include <sanitizer/msan_interface.h> |
|
|
| #define ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \ |
| __msan_unpoison(address, size) |
|
|
| #define ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \ |
| __msan_allocated_memory(address, size) |
|
|
| #else |
|
|
| #if DYNAMIC_ANNOTATIONS_ENABLED == 1 |
| #define ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \ |
| do { \ |
| (void)(address); \ |
| (void)(size); \ |
| } while (0) |
| #define ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \ |
| do { \ |
| (void)(address); \ |
| (void)(size); \ |
| } while (0) |
| #else |
| #define ANNOTATE_MEMORY_IS_INITIALIZED(address, size) |
| #define ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) |
| #endif |
|
|
| #endif |
|
|
| |
| |
|
|
| #if defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED) |
|
|
| #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \ |
| __attribute((exclusive_lock_function("*"))) |
| #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \ |
| __attribute((unlock_function("*"))) |
|
|
| #else |
|
|
| #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE |
| #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE |
|
|
| #endif |
|
|
| |
| |
|
|
| #if ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED == 1 |
|
|
| |
| |
| |
| |
| #define ANNOTATE_IGNORE_READS_BEGIN() \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsBegin)(__FILE__, __LINE__) |
|
|
| |
| #define ANNOTATE_IGNORE_READS_END() \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsEnd)(__FILE__, __LINE__) |
|
|
| #elif defined(ABSL_INTERNAL_ANNOTALYSIS_ENABLED) |
|
|
| |
| |
| |
| |
| |
| |
|
|
| #define ANNOTATE_IGNORE_READS_BEGIN() \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AbslInternalAnnotateIgnoreReadsBegin)() |
|
|
| #define ANNOTATE_IGNORE_READS_END() \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AbslInternalAnnotateIgnoreReadsEnd)() |
|
|
| #else |
|
|
| #define ANNOTATE_IGNORE_READS_BEGIN() |
| #define ANNOTATE_IGNORE_READS_END() |
|
|
| #endif |
|
|
| |
| |
|
|
| #if ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED == 1 |
|
|
| |
| #define ANNOTATE_IGNORE_WRITES_BEGIN() \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesBegin)(__FILE__, __LINE__) |
|
|
| |
| #define ANNOTATE_IGNORE_WRITES_END() \ |
| ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesEnd)(__FILE__, __LINE__) |
|
|
| #else |
|
|
| #define ANNOTATE_IGNORE_WRITES_BEGIN() |
| #define ANNOTATE_IGNORE_WRITES_END() |
|
|
| #endif |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #if defined(ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED) |
|
|
| |
| #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ |
| do { \ |
| ANNOTATE_IGNORE_READS_BEGIN(); \ |
| ANNOTATE_IGNORE_WRITES_BEGIN(); \ |
| } while (0) |
|
|
| |
| #define ANNOTATE_IGNORE_READS_AND_WRITES_END() \ |
| do { \ |
| ANNOTATE_IGNORE_WRITES_END(); \ |
| ANNOTATE_IGNORE_READS_END(); \ |
| } while (0) |
|
|
| #ifdef __cplusplus |
| |
| #define ANNOTATE_UNPROTECTED_READ(x) \ |
| absl::base_internal::AnnotateUnprotectedRead(x) |
|
|
| #endif |
|
|
| #else |
|
|
| #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() |
| #define ANNOTATE_IGNORE_READS_AND_WRITES_END() |
| #define ANNOTATE_UNPROTECTED_READ(x) (x) |
|
|
| #endif |
|
|
| |
| |
|
|
| #ifdef ABSL_HAVE_ADDRESS_SANITIZER |
| |
| |
| |
| #include <sanitizer/common_interface_defs.h> |
|
|
| #define ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid) \ |
| __sanitizer_annotate_contiguous_container(beg, end, old_mid, new_mid) |
| #define ADDRESS_SANITIZER_REDZONE(name) \ |
| struct { \ |
| char x[8] __attribute__((aligned(8))); \ |
| } name |
|
|
| #else |
|
|
| #define ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid) |
| #define ADDRESS_SANITIZER_REDZONE(name) static_assert(true, "") |
|
|
| #endif |
|
|
| |
| |
|
|
| #undef ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED |
| #undef ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED |
| #undef ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED |
| #undef ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED |
| #undef ABSL_INTERNAL_ANNOTALYSIS_ENABLED |
| #undef ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED |
| #undef ABSL_INTERNAL_BEGIN_EXTERN_C |
| #undef ABSL_INTERNAL_END_EXTERN_C |
| #undef ABSL_INTERNAL_STATIC_INLINE |
|
|
| #endif |
|
|