Go to the documentation of this file.
45 #ifndef ABSL_BASE_DYNAMIC_ANNOTATIONS_H_
46 #define ABSL_BASE_DYNAMIC_ANNOTATIONS_H_
50 #include "absl/base/attributes.h"
51 #include "absl/base/config.h"
53 #include "absl/base/macros.h"
57 #include "absl/base/internal/dynamic_annotations.h"
62 #ifdef ABSL_HAVE_THREAD_SANITIZER
64 #define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 1
65 #define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 1
66 #define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 1
67 #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0
68 #define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED 1
72 #define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 0
73 #define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 0
74 #define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 0
82 #if defined(__clang__)
83 #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 1
85 #define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1
88 #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0
92 #define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED \
93 ABSL_INTERNAL_ANNOTALYSIS_ENABLED
95 #endif // ABSL_HAVE_THREAD_SANITIZER
98 #define ABSL_INTERNAL_BEGIN_EXTERN_C extern "C" {
99 #define ABSL_INTERNAL_END_EXTERN_C } // extern "C"
100 #define ABSL_INTERNAL_GLOBAL_SCOPED(F) ::F
101 #define ABSL_INTERNAL_STATIC_INLINE inline
103 #define ABSL_INTERNAL_BEGIN_EXTERN_C // empty
104 #define ABSL_INTERNAL_END_EXTERN_C // empty
105 #define ABSL_INTERNAL_GLOBAL_SCOPED(F) F
106 #define ABSL_INTERNAL_STATIC_INLINE static inline
112 #if ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED == 1
126 #define ABSL_ANNOTATE_BENIGN_RACE(pointer, description) \
127 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \
128 (__FILE__, __LINE__, pointer, sizeof(*(pointer)), description)
132 #define ABSL_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \
133 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \
134 (__FILE__, __LINE__, address, size, description)
139 #define ABSL_ANNOTATE_ENABLE_RACE_DETECTION(enable) \
140 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateEnableRaceDetection) \
141 (__FILE__, __LINE__, enable)
147 #define ABSL_ANNOTATE_THREAD_NAME(name) \
148 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateThreadName)(__FILE__, __LINE__, name)
156 #define ABSL_ANNOTATE_RWLOCK_CREATE(lock) \
157 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreate)(__FILE__, __LINE__, lock)
160 #ifdef ABSL_HAVE_THREAD_SANITIZER
161 #define ABSL_ANNOTATE_RWLOCK_CREATE_STATIC(lock) \
162 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreateStatic) \
163 (__FILE__, __LINE__, lock)
165 #define ABSL_ANNOTATE_RWLOCK_CREATE_STATIC(lock) \
166 ABSL_ANNOTATE_RWLOCK_CREATE(lock)
170 #define ABSL_ANNOTATE_RWLOCK_DESTROY(lock) \
171 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockDestroy)(__FILE__, __LINE__, lock)
175 #define ABSL_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
176 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockAcquired) \
177 (__FILE__, __LINE__, lock, is_w)
181 #define ABSL_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
182 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockReleased) \
183 (__FILE__, __LINE__, lock, is_w)
186 #define ABSL_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \
188 class static_var##_annotator { \
190 static_var##_annotator() { \
191 ABSL_ANNOTATE_BENIGN_RACE_SIZED(&static_var, sizeof(static_var), \
192 #static_var ": " description); \
195 static static_var##_annotator the##static_var##_annotator; \
201 void AnnotateRWLockCreate(
const char*
file,
int line,
202 const volatile void* lock);
203 void AnnotateRWLockCreateStatic(
const char*
file,
int line,
204 const volatile void* lock);
205 void AnnotateRWLockDestroy(
const char*
file,
int line,
206 const volatile void* lock);
207 void AnnotateRWLockAcquired(
const char*
file,
int line,
208 const volatile void* lock,
long is_w);
209 void AnnotateRWLockReleased(
const char*
file,
int line,
210 const volatile void* lock,
long is_w);
211 void AnnotateBenignRace(
const char*
file,
int line,
212 const volatile void* address,
const char*
description);
213 void AnnotateBenignRaceSized(
const char*
file,
int line,
214 const volatile void* address,
size_t size,
216 void AnnotateThreadName(
const char*
file,
int line,
const char*
name);
217 void AnnotateEnableRaceDetection(
const char*
file,
int line,
int enable);
220 #else // ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED == 0
222 #define ABSL_ANNOTATE_RWLOCK_CREATE(lock) // empty
223 #define ABSL_ANNOTATE_RWLOCK_CREATE_STATIC(lock) // empty
224 #define ABSL_ANNOTATE_RWLOCK_DESTROY(lock) // empty
225 #define ABSL_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) // empty
226 #define ABSL_ANNOTATE_RWLOCK_RELEASED(lock, is_w) // empty
227 #define ABSL_ANNOTATE_BENIGN_RACE(address, description) // empty
228 #define ABSL_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) // empty
229 #define ABSL_ANNOTATE_THREAD_NAME(name) // empty
230 #define ABSL_ANNOTATE_ENABLE_RACE_DETECTION(enable) // empty
231 #define ABSL_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) // empty
233 #endif // ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED
238 #ifdef ABSL_HAVE_MEMORY_SANITIZER
240 #include <sanitizer/msan_interface.h>
242 #define ABSL_ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \
243 __msan_unpoison(address, size)
245 #define ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \
246 __msan_allocated_memory(address, size)
248 #else // !defined(ABSL_HAVE_MEMORY_SANITIZER)
251 #ifdef ABSL_HAVE_THREAD_SANITIZER
252 #define ABSL_ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \
257 #define ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \
264 #define ABSL_ANNOTATE_MEMORY_IS_INITIALIZED(address, size) // empty
265 #define ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) // empty
269 #endif // ABSL_HAVE_MEMORY_SANITIZER
274 #if defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
276 #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \
277 __attribute((exclusive_lock_function("*")))
278 #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \
279 __attribute((unlock_function("*")))
281 #else // !defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
283 #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE // empty
284 #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE // empty
286 #endif // defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
291 #if ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED == 1
300 #define ABSL_ANNOTATE_IGNORE_READS_BEGIN() \
301 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsBegin) \
305 #define ABSL_ANNOTATE_IGNORE_READS_END() \
306 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsEnd) \
312 void AnnotateIgnoreReadsBegin(
const char*
file,
int line)
314 void AnnotateIgnoreReadsEnd(
const char*
file,
318 #elif defined(ABSL_INTERNAL_ANNOTALYSIS_ENABLED)
327 #define ABSL_ANNOTATE_IGNORE_READS_BEGIN() \
328 ABSL_INTERNAL_GLOBAL_SCOPED( \
329 ABSL_INTERNAL_C_SYMBOL(AbslInternalAnnotateIgnoreReadsBegin)) \
332 #define ABSL_ANNOTATE_IGNORE_READS_END() \
333 ABSL_INTERNAL_GLOBAL_SCOPED( \
334 ABSL_INTERNAL_C_SYMBOL(AbslInternalAnnotateIgnoreReadsEnd)) \
347 #define ABSL_ANNOTATE_IGNORE_READS_BEGIN() // empty
348 #define ABSL_ANNOTATE_IGNORE_READS_END() // empty
355 #if ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED == 1
358 #define ABSL_ANNOTATE_IGNORE_WRITES_BEGIN() \
359 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesBegin)(__FILE__, __LINE__)
362 #define ABSL_ANNOTATE_IGNORE_WRITES_END() \
363 ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesEnd)(__FILE__, __LINE__)
368 void AnnotateIgnoreWritesBegin(
const char*
file,
int line);
369 void AnnotateIgnoreWritesEnd(
const char*
file,
int line);
374 #define ABSL_ANNOTATE_IGNORE_WRITES_BEGIN() // empty
375 #define ABSL_ANNOTATE_IGNORE_WRITES_END() // empty
390 #if defined(ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED)
393 #define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \
395 ABSL_ANNOTATE_IGNORE_READS_BEGIN(); \
396 ABSL_ANNOTATE_IGNORE_WRITES_BEGIN(); \
400 #define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END() \
402 ABSL_ANNOTATE_IGNORE_WRITES_END(); \
403 ABSL_ANNOTATE_IGNORE_READS_END(); \
408 #define ABSL_ANNOTATE_UNPROTECTED_READ(x) \
409 absl::base_internal::AnnotateUnprotectedRead(x)
413 namespace base_internal {
415 template <
typename T>
416 inline T AnnotateUnprotectedRead(
const volatile T&
x) {
430 #define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() // empty
431 #define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END() // empty
432 #define ABSL_ANNOTATE_UNPROTECTED_READ(x) (x)
439 #ifdef ABSL_HAVE_ADDRESS_SANITIZER
443 #include <sanitizer/common_interface_defs.h>
445 #define ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid) \
446 __sanitizer_annotate_contiguous_container(beg, end, old_mid, new_mid)
447 #define ABSL_ADDRESS_SANITIZER_REDZONE(name) \
449 alignas(8) char x[8]; \
454 #define ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid) // empty
455 #define ABSL_ADDRESS_SANITIZER_REDZONE(name) static_assert(true, "")
457 #endif // ABSL_HAVE_ADDRESS_SANITIZER
462 #undef ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED
463 #undef ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED
464 #undef ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED
465 #undef ABSL_INTERNAL_ANNOTALYSIS_ENABLED
466 #undef ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED
467 #undef ABSL_INTERNAL_BEGIN_EXTERN_C
468 #undef ABSL_INTERNAL_END_EXTERN_C
469 #undef ABSL_INTERNAL_STATIC_INLINE
471 #endif // ABSL_BASE_DYNAMIC_ANNOTATIONS_H_
#define ABSL_ANNOTATE_IGNORE_READS_END()
#define ABSL_ANNOTATE_IGNORE_READS_BEGIN()
#define ABSL_NAMESPACE_END
#define T(upbtypeconst, upbtype, ctype, default_value)
ABSL_INTERNAL_STATIC_INLINE void ABSL_INTERNAL_C_SYMBOL() AbslInternalAnnotateIgnoreReadsEnd() ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE
#define ABSL_NAMESPACE_BEGIN
#define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE
#define ABSL_INTERNAL_C_SYMBOL(x)
#define ABSL_INTERNAL_STATIC_INLINE
#define ABSL_INTERNAL_END_EXTERN_C
#define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE
#define ABSL_INTERNAL_BEGIN_EXTERN_C
ABSL_INTERNAL_STATIC_INLINE void ABSL_INTERNAL_C_SYMBOL() AbslInternalAnnotateIgnoreReadsBegin() ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:17