summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVenkatesh Srinivas <venkateshs@chromium.org>2021-02-17 16:23:17 -0800
committerVenkatesh Srinivas <venkateshs@chromium.org>2021-02-17 16:23:17 -0800
commitcc496aecb81ee5966c865f3723743ff02046c5ad (patch)
treefb60525148faa27b878360782a1f51467ed81b13
parent96ba58e19b7b93fcf1db6a0551c9510296ce26da (diff)
downloadgperftools-cc496aecb81ee5966c865f3723743ff02046c5ad.tar.gz
tcmalloc: Switch thread-safety annotations to support clang
tcmalloc contains its own copy of thread_annotations.h, wrapper macros for static thread-safety analysis expressions. These thread- safety expressions allow asserting (at compile time) that certain locks are held or excluded or certain data is protected by specific locks; they are checked at compile-time by recent versions of clang or a gcc branch (https://gcc.gnu.org/wiki/ThreadSafetyAnnotation). Convert the #if-guard and macro names from the no-longer-supported gcc branch's defines & macros to the versions supported by recent versions of clang.
-rw-r--r--src/base/thread_annotations.h18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/base/thread_annotations.h b/src/base/thread_annotations.h
index 21194de..b68e756 100644
--- a/src/base/thread_annotations.h
+++ b/src/base/thread_annotations.h
@@ -36,8 +36,8 @@
// of their multi-threaded code. The annotations can also help program
// analysis tools to identify potential thread safety issues.
//
-// The annotations are implemented using GCC's "attributes" extension.
-// Using the macros defined here instead of the raw GCC attributes allows
+// The annotations are implemented using clang's "attributes" extension.
+// Using the macros defined here instead of the raw clang attributes allows
// for portability and future compatibility.
//
// This functionality is not yet fully implemented in perftools,
@@ -47,9 +47,7 @@
#define BASE_THREAD_ANNOTATIONS_H_
-#if defined(__GNUC__) \
- && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) \
- && defined(__SUPPORT_TS_ANNOTATION__) && (!defined(SWIG))
+#if defined(__clang__)
#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
#else
#define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op
@@ -114,19 +112,19 @@
// The following annotations specify lock and unlock primitives.
#define EXCLUSIVE_LOCK_FUNCTION(x) \
- THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock(x))
+ THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(x))
#define SHARED_LOCK_FUNCTION(x) \
- THREAD_ANNOTATION_ATTRIBUTE__(shared_lock(x))
+ THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(x))
#define EXCLUSIVE_TRYLOCK_FUNCTION(x) \
- THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock(x))
+ THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(x))
#define SHARED_TRYLOCK_FUNCTION(x) \
- THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock(x))
+ THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(x))
#define UNLOCK_FUNCTION(x) \
- THREAD_ANNOTATION_ATTRIBUTE__(unlock(x))
+ THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(x))
// An escape hatch for thread safety analysis to ignore the annotated function.
#define NO_THREAD_SAFETY_ANALYSIS \