Go to the documentation of this file.
45 #ifndef ABSL_BASE_INTERNAL_DYNAMIC_ANNOTATIONS_H_
46 #define ABSL_BASE_INTERNAL_DYNAMIC_ANNOTATIONS_H_
50 #include "absl/base/config.h"
55 #ifndef DYNAMIC_ANNOTATIONS_ENABLED
56 #define DYNAMIC_ANNOTATIONS_ENABLED 0
59 #if defined(__clang__) && !defined(SWIG)
60 #define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1
63 #if DYNAMIC_ANNOTATIONS_ENABLED != 0
65 #define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 1
66 #define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 1
67 #define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 1
68 #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0
69 #define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED 1
73 #define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 0
74 #define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 0
75 #define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 0
84 #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED \
85 defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
87 #define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED \
88 ABSL_INTERNAL_ANNOTALYSIS_ENABLED
92 #if defined(ABSL_HAVE_MEMORY_SANITIZER) && !defined(__native_client__)
93 #define ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED 1
96 #ifndef ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED
97 #define ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED 0
101 #define ABSL_INTERNAL_BEGIN_EXTERN_C extern "C" {
102 #define ABSL_INTERNAL_END_EXTERN_C } // extern "C"
103 #define ABSL_INTERNAL_GLOBAL_SCOPED(F) ::F
104 #define ABSL_INTERNAL_STATIC_INLINE inline
106 #define ABSL_INTERNAL_BEGIN_EXTERN_C // empty
107 #define ABSL_INTERNAL_END_EXTERN_C // empty
108 #define ABSL_INTERNAL_GLOBAL_SCOPED(F) F
109 #define ABSL_INTERNAL_STATIC_INLINE static inline
115 #if ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED == 1
126 #define ANNOTATE_BENIGN_RACE(pointer, description) \
127 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \
128 (__FILE__, __LINE__, pointer, sizeof(*(pointer)), description)
132 #define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \
133 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \
134 (__FILE__, __LINE__, address, size, description)
139 #define ANNOTATE_ENABLE_RACE_DETECTION(enable) \
140 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateEnableRaceDetection) \
141 (__FILE__, __LINE__, enable)
147 #define ANNOTATE_THREAD_NAME(name) \
148 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateThreadName)(__FILE__, __LINE__, name)
156 #define ANNOTATE_RWLOCK_CREATE(lock) \
157 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreate)(__FILE__, __LINE__, lock)
160 #ifdef ABSL_HAVE_THREAD_SANITIZER
161 #define ANNOTATE_RWLOCK_CREATE_STATIC(lock) \
162 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreateStatic) \
163 (__FILE__, __LINE__, lock)
165 #define ANNOTATE_RWLOCK_CREATE_STATIC(lock) ANNOTATE_RWLOCK_CREATE(lock)
169 #define ANNOTATE_RWLOCK_DESTROY(lock) \
170 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockDestroy)(__FILE__, __LINE__, lock)
174 #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
175 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockAcquired) \
176 (__FILE__, __LINE__, lock, is_w)
180 #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
181 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockReleased) \
182 (__FILE__, __LINE__, lock, is_w)
185 #define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \
187 class static_var##_annotator { \
189 static_var##_annotator() { \
190 ANNOTATE_BENIGN_RACE_SIZED(&static_var, sizeof(static_var), \
191 #static_var ": " description); \
194 static static_var##_annotator the##static_var##_annotator; \
197 #else // ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED == 0
199 #define ANNOTATE_RWLOCK_CREATE(lock) // empty
200 #define ANNOTATE_RWLOCK_CREATE_STATIC(lock) // empty
201 #define ANNOTATE_RWLOCK_DESTROY(lock) // empty
202 #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) // empty
203 #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) // empty
204 #define ANNOTATE_BENIGN_RACE(address, description) // empty
205 #define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) // empty
206 #define ANNOTATE_THREAD_NAME(name) // empty
207 #define ANNOTATE_ENABLE_RACE_DETECTION(enable) // empty
208 #define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) // empty
210 #endif // ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED
215 #if ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED == 1
217 #include <sanitizer/msan_interface.h>
219 #define ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \
220 __msan_unpoison(address, size)
222 #define ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \
223 __msan_allocated_memory(address, size)
225 #else // ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED == 0
227 #if DYNAMIC_ANNOTATIONS_ENABLED == 1
228 #define ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \
233 #define ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \
239 #define ANNOTATE_MEMORY_IS_INITIALIZED(address, size) // empty
240 #define ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) // empty
243 #endif // ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED
248 #if defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
250 #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \
251 __attribute((exclusive_lock_function("*")))
252 #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \
253 __attribute((unlock_function("*")))
255 #else // !defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
257 #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE // empty
258 #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE // empty
260 #endif // defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
265 #if ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED == 1
271 #define ANNOTATE_IGNORE_READS_BEGIN() \
272 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsBegin)(__FILE__, __LINE__)
275 #define ANNOTATE_IGNORE_READS_END() \
276 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsEnd)(__FILE__, __LINE__)
278 #elif defined(ABSL_INTERNAL_ANNOTALYSIS_ENABLED)
287 #define ANNOTATE_IGNORE_READS_BEGIN() \
288 ABSL_INTERNAL_GLOBAL_SCOPED(AbslInternalAnnotateIgnoreReadsBegin)()
290 #define ANNOTATE_IGNORE_READS_END() \
291 ABSL_INTERNAL_GLOBAL_SCOPED(AbslInternalAnnotateIgnoreReadsEnd)()
295 #define ANNOTATE_IGNORE_READS_BEGIN() // empty
296 #define ANNOTATE_IGNORE_READS_END() // empty
303 #if ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED == 1
306 #define ANNOTATE_IGNORE_WRITES_BEGIN() \
307 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesBegin)(__FILE__, __LINE__)
310 #define ANNOTATE_IGNORE_WRITES_END() \
311 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesEnd)(__FILE__, __LINE__)
315 #define ANNOTATE_IGNORE_WRITES_BEGIN() // empty
316 #define ANNOTATE_IGNORE_WRITES_END() // empty
331 #if defined(ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED)
334 #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \
336 ANNOTATE_IGNORE_READS_BEGIN(); \
337 ANNOTATE_IGNORE_WRITES_BEGIN(); \
341 #define ANNOTATE_IGNORE_READS_AND_WRITES_END() \
343 ANNOTATE_IGNORE_WRITES_END(); \
344 ANNOTATE_IGNORE_READS_END(); \
349 #define ANNOTATE_UNPROTECTED_READ(x) \
350 absl::base_internal::AnnotateUnprotectedRead(x)
356 #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() // empty
357 #define ANNOTATE_IGNORE_READS_AND_WRITES_END() // empty
358 #define ANNOTATE_UNPROTECTED_READ(x) (x)
365 #ifdef ABSL_HAVE_ADDRESS_SANITIZER
369 #include <sanitizer/common_interface_defs.h>
371 #define ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid) \
372 __sanitizer_annotate_contiguous_container(beg, end, old_mid, new_mid)
373 #define ADDRESS_SANITIZER_REDZONE(name) \
375 char x[8] __attribute__((aligned(8))); \
380 #define ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid)
381 #define ADDRESS_SANITIZER_REDZONE(name) static_assert(true, "")
383 #endif // ABSL_HAVE_ADDRESS_SANITIZER
388 #undef ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED
389 #undef ABSL_INTERNAL_MEMORY_ANNOTATIONS_ENABLED
390 #undef ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED
391 #undef ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED
392 #undef ABSL_INTERNAL_ANNOTALYSIS_ENABLED
393 #undef ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED
394 #undef ABSL_INTERNAL_BEGIN_EXTERN_C
395 #undef ABSL_INTERNAL_END_EXTERN_C
396 #undef ABSL_INTERNAL_STATIC_INLINE
398 #endif // ABSL_BASE_INTERNAL_DYNAMIC_ANNOTATIONS_H_
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:17