1 1.1 mrg //===-- sanitizer_thread_safety.h -------------------------------*- C++ -*-===// 2 1.1 mrg // 3 1.1 mrg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 1.1 mrg // See https://llvm.org/LICENSE.txt for license information. 5 1.1 mrg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 1.1 mrg // 7 1.1 mrg //===----------------------------------------------------------------------===// 8 1.1 mrg // 9 1.1 mrg // This file is shared between sanitizer tools. 10 1.1 mrg // 11 1.1 mrg // Wrappers around thread safety annotations. 12 1.1 mrg // https://clang.llvm.org/docs/ThreadSafetyAnalysis.html 13 1.1 mrg //===----------------------------------------------------------------------===// 14 1.1 mrg 15 1.1 mrg #ifndef SANITIZER_THREAD_SAFETY_H 16 1.1 mrg #define SANITIZER_THREAD_SAFETY_H 17 1.1 mrg 18 1.1 mrg #if defined(__clang__) 19 1.1 mrg # define THREAD_ANNOTATION(x) __attribute__((x)) 20 1.1 mrg #else 21 1.1 mrg # define THREAD_ANNOTATION(x) 22 1.1 mrg #endif 23 1.1 mrg 24 1.1 mrg #define MUTEX THREAD_ANNOTATION(capability("mutex")) 25 1.1 mrg #define SCOPED_LOCK THREAD_ANNOTATION(scoped_lockable) 26 1.1 mrg #define GUARDED_BY(x) THREAD_ANNOTATION(guarded_by(x)) 27 1.1 mrg #define PT_GUARDED_BY(x) THREAD_ANNOTATION(pt_guarded_by(x)) 28 1.1 mrg #define REQUIRES(...) THREAD_ANNOTATION(requires_capability(__VA_ARGS__)) 29 1.1 mrg #define REQUIRES_SHARED(...) \ 30 1.1 mrg THREAD_ANNOTATION(requires_shared_capability(__VA_ARGS__)) 31 1.1 mrg #define ACQUIRE(...) THREAD_ANNOTATION(acquire_capability(__VA_ARGS__)) 32 1.1 mrg #define ACQUIRE_SHARED(...) \ 33 1.1 mrg THREAD_ANNOTATION(acquire_shared_capability(__VA_ARGS__)) 34 1.1 mrg #define TRY_ACQUIRE(...) THREAD_ANNOTATION(try_acquire_capability(__VA_ARGS__)) 35 1.1 mrg #define RELEASE(...) THREAD_ANNOTATION(release_capability(__VA_ARGS__)) 36 1.1 mrg #define RELEASE_SHARED(...) \ 37 1.1 mrg THREAD_ANNOTATION(release_shared_capability(__VA_ARGS__)) 38 1.1 mrg #define EXCLUDES(...) THREAD_ANNOTATION(locks_excluded(__VA_ARGS__)) 39 1.1 mrg #define CHECK_LOCKED(...) THREAD_ANNOTATION(assert_capability(__VA_ARGS__)) 40 1.1 mrg #define NO_THREAD_SAFETY_ANALYSIS THREAD_ANNOTATION(no_thread_safety_analysis) 41 1.1 mrg 42 1.1 mrg #endif 43