Path: blob/main/contrib/llvm-project/compiler-rt/include/sanitizer/tsan_interface_atomic.h
35235 views
//===-- tsan_interface_atomic.h ---------------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file is a part of ThreadSanitizer (TSan), a race detector.9//10// Public interface header for TSan atomics.11//===----------------------------------------------------------------------===//12#ifndef TSAN_INTERFACE_ATOMIC_H13#define TSAN_INTERFACE_ATOMIC_H1415#include <sanitizer/common_interface_defs.h>1617#ifdef __cplusplus18extern "C" {19#endif2021typedef char __tsan_atomic8;22typedef short __tsan_atomic16;23typedef int __tsan_atomic32;24typedef long __tsan_atomic64;25#if defined(__SIZEOF_INT128__) || \26(__clang_major__ * 100 + __clang_minor__ >= 302)27__extension__ typedef __int128 __tsan_atomic128;28#define __TSAN_HAS_INT128 129#else30#define __TSAN_HAS_INT128 031#endif3233// Part of ABI, do not change.34// https://github.com/llvm/llvm-project/blob/main/libcxx/include/atomic35typedef enum {36__tsan_memory_order_relaxed,37__tsan_memory_order_consume,38__tsan_memory_order_acquire,39__tsan_memory_order_release,40__tsan_memory_order_acq_rel,41__tsan_memory_order_seq_cst42} __tsan_memory_order;4344__tsan_atomic8 SANITIZER_CDECL45__tsan_atomic8_load(const volatile __tsan_atomic8 *a, __tsan_memory_order mo);46__tsan_atomic16 SANITIZER_CDECL47__tsan_atomic16_load(const volatile __tsan_atomic16 *a, __tsan_memory_order mo);48__tsan_atomic32 SANITIZER_CDECL49__tsan_atomic32_load(const volatile __tsan_atomic32 *a, __tsan_memory_order mo);50__tsan_atomic64 SANITIZER_CDECL51__tsan_atomic64_load(const volatile __tsan_atomic64 *a, __tsan_memory_order mo);52#if __TSAN_HAS_INT12853__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_load(54const volatile __tsan_atomic128 *a, __tsan_memory_order mo);55#endif5657void SANITIZER_CDECL __tsan_atomic8_store(volatile __tsan_atomic8 *a,58__tsan_atomic8 v,59__tsan_memory_order mo);60void SANITIZER_CDECL __tsan_atomic16_store(volatile __tsan_atomic16 *a,61__tsan_atomic16 v,62__tsan_memory_order mo);63void SANITIZER_CDECL __tsan_atomic32_store(volatile __tsan_atomic32 *a,64__tsan_atomic32 v,65__tsan_memory_order mo);66void SANITIZER_CDECL __tsan_atomic64_store(volatile __tsan_atomic64 *a,67__tsan_atomic64 v,68__tsan_memory_order mo);69#if __TSAN_HAS_INT12870void SANITIZER_CDECL __tsan_atomic128_store(volatile __tsan_atomic128 *a,71__tsan_atomic128 v,72__tsan_memory_order mo);73#endif7475__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_exchange(76volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);77__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_exchange(78volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);79__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_exchange(80volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);81__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_exchange(82volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);83#if __TSAN_HAS_INT12884__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_exchange(85volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);86#endif8788__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_add(89volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);90__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_add(91volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);92__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_add(93volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);94__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_add(95volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);96#if __TSAN_HAS_INT12897__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_add(98volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);99#endif100101__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_sub(102volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);103__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_sub(104volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);105__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_sub(106volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);107__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_sub(108volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);109#if __TSAN_HAS_INT128110__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_sub(111volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);112#endif113114__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_and(115volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);116__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_and(117volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);118__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_and(119volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);120__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_and(121volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);122#if __TSAN_HAS_INT128123__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_and(124volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);125#endif126127__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_or(128volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);129__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_or(130volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);131__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_or(132volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);133__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_or(134volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);135#if __TSAN_HAS_INT128136__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_or(137volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);138#endif139140__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_xor(141volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);142__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_xor(143volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);144__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_xor(145volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);146__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_xor(147volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);148#if __TSAN_HAS_INT128149__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_xor(150volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);151#endif152153__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_nand(154volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);155__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_nand(156volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);157__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_nand(158volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);159__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_nand(160volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);161#if __TSAN_HAS_INT128162__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_nand(163volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);164#endif165166int SANITIZER_CDECL __tsan_atomic8_compare_exchange_weak(167volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v,168__tsan_memory_order mo, __tsan_memory_order fail_mo);169int SANITIZER_CDECL __tsan_atomic16_compare_exchange_weak(170volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v,171__tsan_memory_order mo, __tsan_memory_order fail_mo);172int SANITIZER_CDECL __tsan_atomic32_compare_exchange_weak(173volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v,174__tsan_memory_order mo, __tsan_memory_order fail_mo);175int SANITIZER_CDECL __tsan_atomic64_compare_exchange_weak(176volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v,177__tsan_memory_order mo, __tsan_memory_order fail_mo);178#if __TSAN_HAS_INT128179int SANITIZER_CDECL __tsan_atomic128_compare_exchange_weak(180volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,181__tsan_memory_order mo, __tsan_memory_order fail_mo);182#endif183184int SANITIZER_CDECL __tsan_atomic8_compare_exchange_strong(185volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v,186__tsan_memory_order mo, __tsan_memory_order fail_mo);187int SANITIZER_CDECL __tsan_atomic16_compare_exchange_strong(188volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v,189__tsan_memory_order mo, __tsan_memory_order fail_mo);190int SANITIZER_CDECL __tsan_atomic32_compare_exchange_strong(191volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v,192__tsan_memory_order mo, __tsan_memory_order fail_mo);193int SANITIZER_CDECL __tsan_atomic64_compare_exchange_strong(194volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v,195__tsan_memory_order mo, __tsan_memory_order fail_mo);196#if __TSAN_HAS_INT128197int SANITIZER_CDECL __tsan_atomic128_compare_exchange_strong(198volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,199__tsan_memory_order mo, __tsan_memory_order fail_mo);200#endif201202__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_compare_exchange_val(203volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v,204__tsan_memory_order mo, __tsan_memory_order fail_mo);205__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_compare_exchange_val(206volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v,207__tsan_memory_order mo, __tsan_memory_order fail_mo);208__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_compare_exchange_val(209volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v,210__tsan_memory_order mo, __tsan_memory_order fail_mo);211__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_compare_exchange_val(212volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v,213__tsan_memory_order mo, __tsan_memory_order fail_mo);214#if __TSAN_HAS_INT128215__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_compare_exchange_val(216volatile __tsan_atomic128 *a, __tsan_atomic128 c, __tsan_atomic128 v,217__tsan_memory_order mo, __tsan_memory_order fail_mo);218#endif219220void SANITIZER_CDECL __tsan_atomic_thread_fence(__tsan_memory_order mo);221void SANITIZER_CDECL __tsan_atomic_signal_fence(__tsan_memory_order mo);222223#ifdef __cplusplus224} // extern "C"225#endif226227#endif // TSAN_INTERFACE_ATOMIC_H228229230