brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · 74ed91e Raw
224 lines · c
1//===-- tsan_interface_atomic.h ---------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of ThreadSanitizer (TSan), a race detector.10//11// Public interface header for TSan atomics.12//===----------------------------------------------------------------------===//13#ifndef TSAN_INTERFACE_ATOMIC_H14#define TSAN_INTERFACE_ATOMIC_H15 16#include <sanitizer/common_interface_defs.h>17 18#ifdef __cplusplus19extern "C" {20#endif21 22typedef char __tsan_atomic8;23typedef short __tsan_atomic16;24typedef int __tsan_atomic32;25typedef long __tsan_atomic64;26#if defined(__SIZEOF_INT128__) ||                                              \27    (__clang_major__ * 100 + __clang_minor__ >= 302)28__extension__ typedef __int128 __tsan_atomic128;29#define __TSAN_HAS_INT128 130#else31#define __TSAN_HAS_INT128 032#endif33 34// Part of ABI, do not change.35// https://github.com/llvm/llvm-project/blob/main/libcxx/include/atomic36typedef enum {37  __tsan_memory_order_relaxed,38  __tsan_memory_order_consume,39  __tsan_memory_order_acquire,40  __tsan_memory_order_release,41  __tsan_memory_order_acq_rel,42  __tsan_memory_order_seq_cst43} __tsan_memory_order;44 45__tsan_atomic8 SANITIZER_CDECL46__tsan_atomic8_load(const volatile __tsan_atomic8 *a, int mo);47__tsan_atomic16 SANITIZER_CDECL48__tsan_atomic16_load(const volatile __tsan_atomic16 *a, int mo);49__tsan_atomic32 SANITIZER_CDECL50__tsan_atomic32_load(const volatile __tsan_atomic32 *a, int mo);51__tsan_atomic64 SANITIZER_CDECL52__tsan_atomic64_load(const volatile __tsan_atomic64 *a, int mo);53#if __TSAN_HAS_INT12854__tsan_atomic128 SANITIZER_CDECL55__tsan_atomic128_load(const volatile __tsan_atomic128 *a, int mo);56#endif57 58void SANITIZER_CDECL __tsan_atomic8_store(volatile __tsan_atomic8 *a,59                                          __tsan_atomic8 v, int mo);60void SANITIZER_CDECL __tsan_atomic16_store(volatile __tsan_atomic16 *a,61                                           __tsan_atomic16 v, int mo);62void SANITIZER_CDECL __tsan_atomic32_store(volatile __tsan_atomic32 *a,63                                           __tsan_atomic32 v, int mo);64void SANITIZER_CDECL __tsan_atomic64_store(volatile __tsan_atomic64 *a,65                                           __tsan_atomic64 v, int mo);66#if __TSAN_HAS_INT12867void SANITIZER_CDECL __tsan_atomic128_store(volatile __tsan_atomic128 *a,68                                            __tsan_atomic128 v, int mo);69#endif70 71__tsan_atomic8 SANITIZER_CDECL72__tsan_atomic8_exchange(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);73__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_exchange(74    volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);75__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_exchange(76    volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);77__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_exchange(78    volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);79#if __TSAN_HAS_INT12880__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_exchange(81    volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);82#endif83 84__tsan_atomic8 SANITIZER_CDECL85__tsan_atomic8_fetch_add(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);86__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_add(87    volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);88__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_add(89    volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);90__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_add(91    volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);92#if __TSAN_HAS_INT12893__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_add(94    volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);95#endif96 97__tsan_atomic8 SANITIZER_CDECL98__tsan_atomic8_fetch_sub(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);99__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_sub(100    volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);101__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_sub(102    volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);103__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_sub(104    volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);105#if __TSAN_HAS_INT128106__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_sub(107    volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);108#endif109 110__tsan_atomic8 SANITIZER_CDECL111__tsan_atomic8_fetch_and(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);112__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_and(113    volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);114__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_and(115    volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);116__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_and(117    volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);118#if __TSAN_HAS_INT128119__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_and(120    volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);121#endif122 123__tsan_atomic8 SANITIZER_CDECL124__tsan_atomic8_fetch_or(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);125__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_or(126    volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);127__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_or(128    volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);129__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_or(130    volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);131#if __TSAN_HAS_INT128132__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_or(133    volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);134#endif135 136__tsan_atomic8 SANITIZER_CDECL137__tsan_atomic8_fetch_xor(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);138__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_xor(139    volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);140__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_xor(141    volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);142__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_xor(143    volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);144#if __TSAN_HAS_INT128145__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_xor(146    volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);147#endif148 149__tsan_atomic8 SANITIZER_CDECL150__tsan_atomic8_fetch_nand(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);151__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_nand(152    volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);153__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_nand(154    volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);155__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_nand(156    volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);157#if __TSAN_HAS_INT128158__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_nand(159    volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);160#endif161 162int SANITIZER_CDECL __tsan_atomic8_compare_exchange_weak(163    volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v, int mo,164    int fail_mo);165int SANITIZER_CDECL __tsan_atomic16_compare_exchange_weak(166    volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v, int mo,167    int fail_mo);168int SANITIZER_CDECL __tsan_atomic32_compare_exchange_weak(169    volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v, int mo,170    int fail_mo);171int SANITIZER_CDECL __tsan_atomic64_compare_exchange_weak(172    volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v, int mo,173    int fail_mo);174#if __TSAN_HAS_INT128175int SANITIZER_CDECL __tsan_atomic128_compare_exchange_weak(176    volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,177    int mo, int fail_mo);178#endif179 180int SANITIZER_CDECL __tsan_atomic8_compare_exchange_strong(181    volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v, int mo,182    int fail_mo);183int SANITIZER_CDECL __tsan_atomic16_compare_exchange_strong(184    volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v, int mo,185    int fail_mo);186int SANITIZER_CDECL __tsan_atomic32_compare_exchange_strong(187    volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v, int mo,188    int fail_mo);189int SANITIZER_CDECL __tsan_atomic64_compare_exchange_strong(190    volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v, int mo,191    int fail_mo);192#if __TSAN_HAS_INT128193int SANITIZER_CDECL __tsan_atomic128_compare_exchange_strong(194    volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,195    int mo, int fail_mo);196#endif197 198__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_compare_exchange_val(199    volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v, int mo,200    int fail_mo);201__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_compare_exchange_val(202    volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v, int mo,203    int fail_mo);204__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_compare_exchange_val(205    volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v, int mo,206    int fail_mo);207__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_compare_exchange_val(208    volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v, int mo,209    int fail_mo);210#if __TSAN_HAS_INT128211__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_compare_exchange_val(212    volatile __tsan_atomic128 *a, __tsan_atomic128 c, __tsan_atomic128 v,213    int mo, int fail_mo);214#endif215 216void SANITIZER_CDECL __tsan_atomic_thread_fence(int mo);217void SANITIZER_CDECL __tsan_atomic_signal_fence(int mo);218 219#ifdef __cplusplus220} // extern "C"221#endif222 223#endif // TSAN_INTERFACE_ATOMIC_H224