1*22ce4affSfengbojiang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-2-Clause 3*22ce4affSfengbojiang * 4*22ce4affSfengbojiang * Copyright (c) 2019 Andrew Turner 5*22ce4affSfengbojiang * 6*22ce4affSfengbojiang * This software was developed by SRI International and the University of 7*22ce4affSfengbojiang * Cambridge Computer Laboratory (Department of Computer Science and 8*22ce4affSfengbojiang * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the 9*22ce4affSfengbojiang * DARPA SSITH research programme. 10*22ce4affSfengbojiang * 11*22ce4affSfengbojiang * Redistribution and use in source and binary forms, with or without 12*22ce4affSfengbojiang * modification, are permitted provided that the following conditions 13*22ce4affSfengbojiang * are met: 14*22ce4affSfengbojiang * 1. Redistributions of source code must retain the above copyright 15*22ce4affSfengbojiang * notice, this list of conditions and the following disclaimer. 16*22ce4affSfengbojiang * 2. Redistributions in binary form must reproduce the above copyright 17*22ce4affSfengbojiang * notice, this list of conditions and the following disclaimer in the 18*22ce4affSfengbojiang * documentation and/or other materials provided with the distribution. 19*22ce4affSfengbojiang * 20*22ce4affSfengbojiang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21*22ce4affSfengbojiang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22*22ce4affSfengbojiang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23*22ce4affSfengbojiang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 24*22ce4affSfengbojiang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25*22ce4affSfengbojiang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26*22ce4affSfengbojiang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27*22ce4affSfengbojiang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28*22ce4affSfengbojiang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29*22ce4affSfengbojiang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30*22ce4affSfengbojiang * SUCH DAMAGE. 31*22ce4affSfengbojiang * 32*22ce4affSfengbojiang * $FreeBSD$ 33*22ce4affSfengbojiang */ 34*22ce4affSfengbojiang 35*22ce4affSfengbojiang #ifndef _SYS__CSAN_ATOMIC_H_ 36*22ce4affSfengbojiang #define _SYS__CSAN_ATOMIC_H_ 37*22ce4affSfengbojiang 38*22ce4affSfengbojiang #ifndef _MACHINE_ATOMIC_H_ 39*22ce4affSfengbojiang #error do not include this header, use machine/atomic.h 40*22ce4affSfengbojiang #endif 41*22ce4affSfengbojiang 42*22ce4affSfengbojiang #define KCSAN_ATOMIC_FUNC_1(op, name, type) \ 43*22ce4affSfengbojiang void kcsan_atomic_##op##_##name(volatile type *, type); \ 44*22ce4affSfengbojiang void kcsan_atomic_##op##_acq_##name(volatile type *, type); \ 45*22ce4affSfengbojiang void kcsan_atomic_##op##_rel_##name(volatile type *, type) 46*22ce4affSfengbojiang 47*22ce4affSfengbojiang #define KCSAN_ATOMIC_CMPSET(name, type) \ 48*22ce4affSfengbojiang int kcsan_atomic_cmpset_##name(volatile type *, type, type); \ 49*22ce4affSfengbojiang int kcsan_atomic_cmpset_acq_##name(volatile type *, type, type); \ 50*22ce4affSfengbojiang int kcsan_atomic_cmpset_rel_##name(volatile type *, type, type) 51*22ce4affSfengbojiang 52*22ce4affSfengbojiang #define KCSAN_ATOMIC_FCMPSET(name, type) \ 53*22ce4affSfengbojiang int kcsan_atomic_fcmpset_##name(volatile type *, type *, type); \ 54*22ce4affSfengbojiang int kcsan_atomic_fcmpset_acq_##name(volatile type *, type *, type); \ 55*22ce4affSfengbojiang int kcsan_atomic_fcmpset_rel_##name(volatile type *, type *, type) 56*22ce4affSfengbojiang 57*22ce4affSfengbojiang #define KCSAN_ATOMIC_READ(op, name, type) \ 58*22ce4affSfengbojiang type kcsan_atomic_##op##_##name(volatile type *, type) 59*22ce4affSfengbojiang 60*22ce4affSfengbojiang #define KCSAN_ATOMIC_READANDCLEAR(name, type) \ 61*22ce4affSfengbojiang type kcsan_atomic_readandclear_##name(volatile type *) 62*22ce4affSfengbojiang 63*22ce4affSfengbojiang #define KCSAN_ATOMIC_LOAD(name, type) \ 64*22ce4affSfengbojiang type kcsan_atomic_load_##name(volatile type *); \ 65*22ce4affSfengbojiang type kcsan_atomic_load_acq_##name(volatile type *) 66*22ce4affSfengbojiang 67*22ce4affSfengbojiang #define KCSAN_ATOMIC_STORE(name, type) \ 68*22ce4affSfengbojiang void kcsan_atomic_store_##name(volatile type *, type); \ 69*22ce4affSfengbojiang void kcsan_atomic_store_rel_##name(volatile type *, type) 70*22ce4affSfengbojiang 71*22ce4affSfengbojiang #define KCSAN_ATOMIC_TEST(op, name, type) \ 72*22ce4affSfengbojiang int kcsan_atomic_##op##_##name(volatile type *, u_int); \ 73*22ce4affSfengbojiang int kcsan_atomic_##op##_acq_##name(volatile type *, u_int) 74*22ce4affSfengbojiang 75*22ce4affSfengbojiang #define KCSAN_ATOMIC_FUNCS(name, type) \ 76*22ce4affSfengbojiang KCSAN_ATOMIC_FUNC_1(add, name, type); \ 77*22ce4affSfengbojiang KCSAN_ATOMIC_FUNC_1(clear, name, type); \ 78*22ce4affSfengbojiang KCSAN_ATOMIC_CMPSET(name, type); \ 79*22ce4affSfengbojiang KCSAN_ATOMIC_FCMPSET(name, type); \ 80*22ce4affSfengbojiang KCSAN_ATOMIC_READ(fetchadd, name, type); \ 81*22ce4affSfengbojiang KCSAN_ATOMIC_LOAD(name, type); \ 82*22ce4affSfengbojiang KCSAN_ATOMIC_READANDCLEAR(name, type); \ 83*22ce4affSfengbojiang KCSAN_ATOMIC_FUNC_1(set, name, type); \ 84*22ce4affSfengbojiang KCSAN_ATOMIC_FUNC_1(subtract, name, type); \ 85*22ce4affSfengbojiang KCSAN_ATOMIC_STORE(name, type); \ 86*22ce4affSfengbojiang KCSAN_ATOMIC_READ(swap, name, type); \ 87*22ce4affSfengbojiang KCSAN_ATOMIC_TEST(testandclear, name, type); \ 88*22ce4affSfengbojiang KCSAN_ATOMIC_TEST(testandset, name, type) 89*22ce4affSfengbojiang 90*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(char, uint8_t); 91*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(short, uint16_t); 92*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(int, u_int); 93*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(long, u_long); 94*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(ptr, uintptr_t); 95*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(8, uint8_t); 96*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(16, uint16_t); 97*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(32, uint32_t); 98*22ce4affSfengbojiang KCSAN_ATOMIC_FUNCS(64, uint64_t); 99*22ce4affSfengbojiang 100*22ce4affSfengbojiang void kcsan_atomic_thread_fence_acq(void); 101*22ce4affSfengbojiang void kcsan_atomic_thread_fence_acq_rel(void); 102*22ce4affSfengbojiang void kcsan_atomic_thread_fence_rel(void); 103*22ce4affSfengbojiang void kcsan_atomic_thread_fence_seq_cst(void); 104*22ce4affSfengbojiang 105*22ce4affSfengbojiang #ifndef KCSAN_RUNTIME 106*22ce4affSfengbojiang 107*22ce4affSfengbojiang #define atomic_add_char kcsan_atomic_add_char 108*22ce4affSfengbojiang #define atomic_add_acq_char kcsan_atomic_add_acq_char 109*22ce4affSfengbojiang #define atomic_add_rel_char kcsan_atomic_add_rel_char 110*22ce4affSfengbojiang #define atomic_clear_char kcsan_atomic_clear_char 111*22ce4affSfengbojiang #define atomic_clear_acq_char kcsan_atomic_clear_acq_char 112*22ce4affSfengbojiang #define atomic_clear_rel_char kcsan_atomic_clear_rel_char 113*22ce4affSfengbojiang #define atomic_cmpset_char kcsan_atomic_cmpset_char 114*22ce4affSfengbojiang #define atomic_cmpset_acq_char kcsan_atomic_cmpset_acq_char 115*22ce4affSfengbojiang #define atomic_cmpset_rel_char kcsan_atomic_cmpset_rel_char 116*22ce4affSfengbojiang #define atomic_fcmpset_char kcsan_atomic_fcmpset_char 117*22ce4affSfengbojiang #define atomic_fcmpset_acq_char kcsan_atomic_fcmpset_acq_char 118*22ce4affSfengbojiang #define atomic_fcmpset_rel_char kcsan_atomic_fcmpset_rel_char 119*22ce4affSfengbojiang #define atomic_fetchadd_char kcsan_atomic_fetchadd_char 120*22ce4affSfengbojiang #define atomic_load_char kcsan_atomic_load_char 121*22ce4affSfengbojiang #define atomic_load_acq_char kcsan_atomic_load_acq_char 122*22ce4affSfengbojiang #define atomic_readandclear_char kcsan_atomic_readandclear_char 123*22ce4affSfengbojiang #define atomic_set_char kcsan_atomic_set_char 124*22ce4affSfengbojiang #define atomic_set_acq_char kcsan_atomic_set_acq_char 125*22ce4affSfengbojiang #define atomic_set_rel_char kcsan_atomic_set_rel_char 126*22ce4affSfengbojiang #define atomic_subtract_char kcsan_atomic_subtract_char 127*22ce4affSfengbojiang #define atomic_subtract_acq_char kcsan_atomic_subtract_acq_char 128*22ce4affSfengbojiang #define atomic_subtract_rel_char kcsan_atomic_subtract_rel_char 129*22ce4affSfengbojiang #define atomic_store_char kcsan_atomic_store_char 130*22ce4affSfengbojiang #define atomic_store_rel_char kcsan_atomic_store_rel_char 131*22ce4affSfengbojiang #define atomic_swap_char kcsan_atomic_swap_char 132*22ce4affSfengbojiang #define atomic_testandclear_char kcsan_atomic_testandclear_char 133*22ce4affSfengbojiang #define atomic_testandset_char kcsan_atomic_testandset_char 134*22ce4affSfengbojiang 135*22ce4affSfengbojiang #define atomic_add_short kcsan_atomic_add_short 136*22ce4affSfengbojiang #define atomic_add_acq_short kcsan_atomic_add_acq_short 137*22ce4affSfengbojiang #define atomic_add_rel_short kcsan_atomic_add_rel_short 138*22ce4affSfengbojiang #define atomic_clear_short kcsan_atomic_clear_short 139*22ce4affSfengbojiang #define atomic_clear_acq_short kcsan_atomic_clear_acq_short 140*22ce4affSfengbojiang #define atomic_clear_rel_short kcsan_atomic_clear_rel_short 141*22ce4affSfengbojiang #define atomic_cmpset_short kcsan_atomic_cmpset_short 142*22ce4affSfengbojiang #define atomic_cmpset_acq_short kcsan_atomic_cmpset_acq_short 143*22ce4affSfengbojiang #define atomic_cmpset_rel_short kcsan_atomic_cmpset_rel_short 144*22ce4affSfengbojiang #define atomic_fcmpset_short kcsan_atomic_fcmpset_short 145*22ce4affSfengbojiang #define atomic_fcmpset_acq_short kcsan_atomic_fcmpset_acq_short 146*22ce4affSfengbojiang #define atomic_fcmpset_rel_short kcsan_atomic_fcmpset_rel_short 147*22ce4affSfengbojiang #define atomic_fetchadd_short kcsan_atomic_fetchadd_short 148*22ce4affSfengbojiang #define atomic_load_short kcsan_atomic_load_short 149*22ce4affSfengbojiang #define atomic_load_acq_short kcsan_atomic_load_acq_short 150*22ce4affSfengbojiang #define atomic_readandclear_short kcsan_atomic_readandclear_short 151*22ce4affSfengbojiang #define atomic_set_short kcsan_atomic_set_short 152*22ce4affSfengbojiang #define atomic_set_acq_short kcsan_atomic_set_acq_short 153*22ce4affSfengbojiang #define atomic_set_rel_short kcsan_atomic_set_rel_short 154*22ce4affSfengbojiang #define atomic_subtract_short kcsan_atomic_subtract_short 155*22ce4affSfengbojiang #define atomic_subtract_acq_short kcsan_atomic_subtract_acq_short 156*22ce4affSfengbojiang #define atomic_subtract_rel_short kcsan_atomic_subtract_rel_short 157*22ce4affSfengbojiang #define atomic_store_short kcsan_atomic_store_short 158*22ce4affSfengbojiang #define atomic_store_rel_short kcsan_atomic_store_rel_short 159*22ce4affSfengbojiang #define atomic_swap_short kcsan_atomic_swap_short 160*22ce4affSfengbojiang #define atomic_testandclear_short kcsan_atomic_testandclear_short 161*22ce4affSfengbojiang #define atomic_testandset_short kcsan_atomic_testandset_short 162*22ce4affSfengbojiang 163*22ce4affSfengbojiang #define atomic_add_int kcsan_atomic_add_int 164*22ce4affSfengbojiang #define atomic_add_acq_int kcsan_atomic_add_acq_int 165*22ce4affSfengbojiang #define atomic_add_rel_int kcsan_atomic_add_rel_int 166*22ce4affSfengbojiang #define atomic_clear_int kcsan_atomic_clear_int 167*22ce4affSfengbojiang #define atomic_clear_acq_int kcsan_atomic_clear_acq_int 168*22ce4affSfengbojiang #define atomic_clear_rel_int kcsan_atomic_clear_rel_int 169*22ce4affSfengbojiang #define atomic_cmpset_int kcsan_atomic_cmpset_int 170*22ce4affSfengbojiang #define atomic_cmpset_acq_int kcsan_atomic_cmpset_acq_int 171*22ce4affSfengbojiang #define atomic_cmpset_rel_int kcsan_atomic_cmpset_rel_int 172*22ce4affSfengbojiang #define atomic_fcmpset_int kcsan_atomic_fcmpset_int 173*22ce4affSfengbojiang #define atomic_fcmpset_acq_int kcsan_atomic_fcmpset_acq_int 174*22ce4affSfengbojiang #define atomic_fcmpset_rel_int kcsan_atomic_fcmpset_rel_int 175*22ce4affSfengbojiang #define atomic_fetchadd_int kcsan_atomic_fetchadd_int 176*22ce4affSfengbojiang #define atomic_load_int kcsan_atomic_load_int 177*22ce4affSfengbojiang #define atomic_load_acq_int kcsan_atomic_load_acq_int 178*22ce4affSfengbojiang #define atomic_readandclear_int kcsan_atomic_readandclear_int 179*22ce4affSfengbojiang #define atomic_set_int kcsan_atomic_set_int 180*22ce4affSfengbojiang #define atomic_set_acq_int kcsan_atomic_set_acq_int 181*22ce4affSfengbojiang #define atomic_set_rel_int kcsan_atomic_set_rel_int 182*22ce4affSfengbojiang #define atomic_subtract_int kcsan_atomic_subtract_int 183*22ce4affSfengbojiang #define atomic_subtract_acq_int kcsan_atomic_subtract_acq_int 184*22ce4affSfengbojiang #define atomic_subtract_rel_int kcsan_atomic_subtract_rel_int 185*22ce4affSfengbojiang #define atomic_store_int kcsan_atomic_store_int 186*22ce4affSfengbojiang #define atomic_store_rel_int kcsan_atomic_store_rel_int 187*22ce4affSfengbojiang #define atomic_swap_int kcsan_atomic_swap_int 188*22ce4affSfengbojiang #define atomic_testandclear_int kcsan_atomic_testandclear_int 189*22ce4affSfengbojiang #define atomic_testandset_int kcsan_atomic_testandset_int 190*22ce4affSfengbojiang 191*22ce4affSfengbojiang #define atomic_add_long kcsan_atomic_add_long 192*22ce4affSfengbojiang #define atomic_add_acq_long kcsan_atomic_add_acq_long 193*22ce4affSfengbojiang #define atomic_add_rel_long kcsan_atomic_add_rel_long 194*22ce4affSfengbojiang #define atomic_clear_long kcsan_atomic_clear_long 195*22ce4affSfengbojiang #define atomic_clear_acq_long kcsan_atomic_clear_acq_long 196*22ce4affSfengbojiang #define atomic_clear_rel_long kcsan_atomic_clear_rel_long 197*22ce4affSfengbojiang #define atomic_cmpset_long kcsan_atomic_cmpset_long 198*22ce4affSfengbojiang #define atomic_cmpset_acq_long kcsan_atomic_cmpset_acq_long 199*22ce4affSfengbojiang #define atomic_cmpset_rel_long kcsan_atomic_cmpset_rel_long 200*22ce4affSfengbojiang #define atomic_fcmpset_long kcsan_atomic_fcmpset_long 201*22ce4affSfengbojiang #define atomic_fcmpset_acq_long kcsan_atomic_fcmpset_acq_long 202*22ce4affSfengbojiang #define atomic_fcmpset_rel_long kcsan_atomic_fcmpset_rel_long 203*22ce4affSfengbojiang #define atomic_fetchadd_long kcsan_atomic_fetchadd_long 204*22ce4affSfengbojiang #define atomic_load_long kcsan_atomic_load_long 205*22ce4affSfengbojiang #define atomic_load_acq_long kcsan_atomic_load_acq_long 206*22ce4affSfengbojiang #define atomic_readandclear_long kcsan_atomic_readandclear_long 207*22ce4affSfengbojiang #define atomic_set_long kcsan_atomic_set_long 208*22ce4affSfengbojiang #define atomic_set_acq_long kcsan_atomic_set_acq_long 209*22ce4affSfengbojiang #define atomic_set_rel_long kcsan_atomic_set_rel_long 210*22ce4affSfengbojiang #define atomic_subtract_long kcsan_atomic_subtract_long 211*22ce4affSfengbojiang #define atomic_subtract_acq_long kcsan_atomic_subtract_acq_long 212*22ce4affSfengbojiang #define atomic_subtract_rel_long kcsan_atomic_subtract_rel_long 213*22ce4affSfengbojiang #define atomic_store_long kcsan_atomic_store_long 214*22ce4affSfengbojiang #define atomic_store_rel_long kcsan_atomic_store_rel_long 215*22ce4affSfengbojiang #define atomic_swap_long kcsan_atomic_swap_long 216*22ce4affSfengbojiang #define atomic_testandclear_long kcsan_atomic_testandclear_long 217*22ce4affSfengbojiang #define atomic_testandset_long kcsan_atomic_testandset_long 218*22ce4affSfengbojiang #define atomic_testandset_acq_long kcsan_atomic_testandset_acq_long 219*22ce4affSfengbojiang 220*22ce4affSfengbojiang #define atomic_add_ptr kcsan_atomic_add_ptr 221*22ce4affSfengbojiang #define atomic_add_acq_ptr kcsan_atomic_add_acq_ptr 222*22ce4affSfengbojiang #define atomic_add_rel_ptr kcsan_atomic_add_rel_ptr 223*22ce4affSfengbojiang #define atomic_clear_ptr kcsan_atomic_clear_ptr 224*22ce4affSfengbojiang #define atomic_clear_acq_ptr kcsan_atomic_clear_acq_ptr 225*22ce4affSfengbojiang #define atomic_clear_rel_ptr kcsan_atomic_clear_rel_ptr 226*22ce4affSfengbojiang #define atomic_cmpset_ptr kcsan_atomic_cmpset_ptr 227*22ce4affSfengbojiang #define atomic_cmpset_acq_ptr kcsan_atomic_cmpset_acq_ptr 228*22ce4affSfengbojiang #define atomic_cmpset_rel_ptr kcsan_atomic_cmpset_rel_ptr 229*22ce4affSfengbojiang #define atomic_fcmpset_ptr kcsan_atomic_fcmpset_ptr 230*22ce4affSfengbojiang #define atomic_fcmpset_acq_ptr kcsan_atomic_fcmpset_acq_ptr 231*22ce4affSfengbojiang #define atomic_fcmpset_rel_ptr kcsan_atomic_fcmpset_rel_ptr 232*22ce4affSfengbojiang #define atomic_fetchadd_ptr kcsan_atomic_fetchadd_ptr 233*22ce4affSfengbojiang #define atomic_load_ptr(x) ({ \ 234*22ce4affSfengbojiang __typeof(*x) __retptr; \ 235*22ce4affSfengbojiang __retptr = (void *)kcsan_atomic_load_ptr((volatile uintptr_t *)(x)); \ 236*22ce4affSfengbojiang __retptr; \ 237*22ce4affSfengbojiang }) 238*22ce4affSfengbojiang #define atomic_load_acq_ptr kcsan_atomic_load_acq_ptr 239*22ce4affSfengbojiang #define atomic_load_consume_ptr(x) ({ \ 240*22ce4affSfengbojiang __typeof(*x) __retptr; \ 241*22ce4affSfengbojiang __retptr = (void *)kcsan_atomic_load_acq_ptr((volatile uintptr_t *)(x));\ 242*22ce4affSfengbojiang __retptr; \ 243*22ce4affSfengbojiang }) 244*22ce4affSfengbojiang #define atomic_readandclear_ptr kcsan_atomic_readandclear_ptr 245*22ce4affSfengbojiang #define atomic_set_ptr kcsan_atomic_set_ptr 246*22ce4affSfengbojiang #define atomic_set_acq_ptr kcsan_atomic_set_acq_ptr 247*22ce4affSfengbojiang #define atomic_set_rel_ptr kcsan_atomic_set_rel_ptr 248*22ce4affSfengbojiang #define atomic_subtract_ptr kcsan_atomic_subtract_ptr 249*22ce4affSfengbojiang #define atomic_subtract_acq_ptr kcsan_atomic_subtract_acq_ptr 250*22ce4affSfengbojiang #define atomic_subtract_rel_ptr kcsan_atomic_subtract_rel_ptr 251*22ce4affSfengbojiang #define atomic_store_ptr(x, v) ({ \ 252*22ce4affSfengbojiang __typeof(*x) __value = (v); \ 253*22ce4affSfengbojiang kcsan_atomic_store_ptr((volatile uintptr_t *)(x), (uintptr_t)(__value));\ 254*22ce4affSfengbojiang }) 255*22ce4affSfengbojiang #define atomic_store_rel_ptr kcsan_atomic_store_rel_ptr 256*22ce4affSfengbojiang #define atomic_swap_ptr kcsan_atomic_swap_ptr 257*22ce4affSfengbojiang #define atomic_testandclear_ptr kcsan_atomic_testandclear_ptr 258*22ce4affSfengbojiang #define atomic_testandset_ptr kcsan_atomic_testandset_ptr 259*22ce4affSfengbojiang 260*22ce4affSfengbojiang #define atomic_add_8 kcsan_atomic_add_8 261*22ce4affSfengbojiang #define atomic_add_acq_8 kcsan_atomic_add_acq_8 262*22ce4affSfengbojiang #define atomic_add_rel_8 kcsan_atomic_add_rel_8 263*22ce4affSfengbojiang #define atomic_clear_8 kcsan_atomic_clear_8 264*22ce4affSfengbojiang #define atomic_clear_acq_8 kcsan_atomic_clear_acq_8 265*22ce4affSfengbojiang #define atomic_clear_rel_8 kcsan_atomic_clear_rel_8 266*22ce4affSfengbojiang #define atomic_cmpset_8 kcsan_atomic_cmpset_8 267*22ce4affSfengbojiang #define atomic_cmpset_acq_8 kcsan_atomic_cmpset_acq_8 268*22ce4affSfengbojiang #define atomic_cmpset_rel_8 kcsan_atomic_cmpset_rel_8 269*22ce4affSfengbojiang #define atomic_fcmpset_8 kcsan_atomic_fcmpset_8 270*22ce4affSfengbojiang #define atomic_fcmpset_acq_8 kcsan_atomic_fcmpset_acq_8 271*22ce4affSfengbojiang #define atomic_fcmpset_rel_8 kcsan_atomic_fcmpset_rel_8 272*22ce4affSfengbojiang #define atomic_fetchadd_8 kcsan_atomic_fetchadd_8 273*22ce4affSfengbojiang #define atomic_load_8 kcsan_atomic_load_8 274*22ce4affSfengbojiang #define atomic_load_acq_8 kcsan_atomic_load_acq_8 275*22ce4affSfengbojiang #define atomic_readandclear_8 kcsan_atomic_readandclear_8 276*22ce4affSfengbojiang #define atomic_set_8 kcsan_atomic_set_8 277*22ce4affSfengbojiang #define atomic_set_acq_8 kcsan_atomic_set_acq_8 278*22ce4affSfengbojiang #define atomic_set_rel_8 kcsan_atomic_set_rel_8 279*22ce4affSfengbojiang #define atomic_subtract_8 kcsan_atomic_subtract_8 280*22ce4affSfengbojiang #define atomic_subtract_acq_8 kcsan_atomic_subtract_acq_8 281*22ce4affSfengbojiang #define atomic_subtract_rel_8 kcsan_atomic_subtract_rel_8 282*22ce4affSfengbojiang #define atomic_store_8 kcsan_atomic_store_8 283*22ce4affSfengbojiang #define atomic_store_rel_8 kcsan_atomic_store_rel_8 284*22ce4affSfengbojiang #define atomic_swap_8 kcsan_atomic_swap_8 285*22ce4affSfengbojiang #define atomic_testandclear_8 kcsan_atomic_testandclear_8 286*22ce4affSfengbojiang #define atomic_testandset_8 kcsan_atomic_testandset_8 287*22ce4affSfengbojiang 288*22ce4affSfengbojiang #define atomic_add_16 kcsan_atomic_add_16 289*22ce4affSfengbojiang #define atomic_add_acq_16 kcsan_atomic_add_acq_16 290*22ce4affSfengbojiang #define atomic_add_rel_16 kcsan_atomic_add_rel_16 291*22ce4affSfengbojiang #define atomic_clear_16 kcsan_atomic_clear_16 292*22ce4affSfengbojiang #define atomic_clear_acq_16 kcsan_atomic_clear_acq_16 293*22ce4affSfengbojiang #define atomic_clear_rel_16 kcsan_atomic_clear_rel_16 294*22ce4affSfengbojiang #define atomic_cmpset_16 kcsan_atomic_cmpset_16 295*22ce4affSfengbojiang #define atomic_cmpset_acq_16 kcsan_atomic_cmpset_acq_16 296*22ce4affSfengbojiang #define atomic_cmpset_rel_16 kcsan_atomic_cmpset_rel_16 297*22ce4affSfengbojiang #define atomic_fcmpset_16 kcsan_atomic_fcmpset_16 298*22ce4affSfengbojiang #define atomic_fcmpset_acq_16 kcsan_atomic_fcmpset_acq_16 299*22ce4affSfengbojiang #define atomic_fcmpset_rel_16 kcsan_atomic_fcmpset_rel_16 300*22ce4affSfengbojiang #define atomic_fetchadd_16 kcsan_atomic_fetchadd_16 301*22ce4affSfengbojiang #define atomic_load_16 kcsan_atomic_load_16 302*22ce4affSfengbojiang #define atomic_load_acq_16 kcsan_atomic_load_acq_16 303*22ce4affSfengbojiang #define atomic_readandclear_16 kcsan_atomic_readandclear_16 304*22ce4affSfengbojiang #define atomic_set_16 kcsan_atomic_set_16 305*22ce4affSfengbojiang #define atomic_set_acq_16 kcsan_atomic_set_acq_16 306*22ce4affSfengbojiang #define atomic_set_rel_16 kcsan_atomic_set_rel_16 307*22ce4affSfengbojiang #define atomic_subtract_16 kcsan_atomic_subtract_16 308*22ce4affSfengbojiang #define atomic_subtract_acq_16 kcsan_atomic_subtract_acq_16 309*22ce4affSfengbojiang #define atomic_subtract_rel_16 kcsan_atomic_subtract_rel_16 310*22ce4affSfengbojiang #define atomic_store_16 kcsan_atomic_store_16 311*22ce4affSfengbojiang #define atomic_store_rel_16 kcsan_atomic_store_rel_16 312*22ce4affSfengbojiang #define atomic_swap_16 kcsan_atomic_swap_16 313*22ce4affSfengbojiang #define atomic_testandclear_16 kcsan_atomic_testandclear_16 314*22ce4affSfengbojiang #define atomic_testandset_16 kcsan_atomic_testandset_16 315*22ce4affSfengbojiang 316*22ce4affSfengbojiang #define atomic_add_32 kcsan_atomic_add_32 317*22ce4affSfengbojiang #define atomic_add_acq_32 kcsan_atomic_add_acq_32 318*22ce4affSfengbojiang #define atomic_add_rel_32 kcsan_atomic_add_rel_32 319*22ce4affSfengbojiang #define atomic_clear_32 kcsan_atomic_clear_32 320*22ce4affSfengbojiang #define atomic_clear_acq_32 kcsan_atomic_clear_acq_32 321*22ce4affSfengbojiang #define atomic_clear_rel_32 kcsan_atomic_clear_rel_32 322*22ce4affSfengbojiang #define atomic_cmpset_32 kcsan_atomic_cmpset_32 323*22ce4affSfengbojiang #define atomic_cmpset_acq_32 kcsan_atomic_cmpset_acq_32 324*22ce4affSfengbojiang #define atomic_cmpset_rel_32 kcsan_atomic_cmpset_rel_32 325*22ce4affSfengbojiang #define atomic_fcmpset_32 kcsan_atomic_fcmpset_32 326*22ce4affSfengbojiang #define atomic_fcmpset_acq_32 kcsan_atomic_fcmpset_acq_32 327*22ce4affSfengbojiang #define atomic_fcmpset_rel_32 kcsan_atomic_fcmpset_rel_32 328*22ce4affSfengbojiang #define atomic_fetchadd_32 kcsan_atomic_fetchadd_32 329*22ce4affSfengbojiang #define atomic_load_32 kcsan_atomic_load_32 330*22ce4affSfengbojiang #define atomic_load_acq_32 kcsan_atomic_load_acq_32 331*22ce4affSfengbojiang #define atomic_readandclear_32 kcsan_atomic_readandclear_32 332*22ce4affSfengbojiang #define atomic_set_32 kcsan_atomic_set_32 333*22ce4affSfengbojiang #define atomic_set_acq_32 kcsan_atomic_set_acq_32 334*22ce4affSfengbojiang #define atomic_set_rel_32 kcsan_atomic_set_rel_32 335*22ce4affSfengbojiang #define atomic_subtract_32 kcsan_atomic_subtract_32 336*22ce4affSfengbojiang #define atomic_subtract_acq_32 kcsan_atomic_subtract_acq_32 337*22ce4affSfengbojiang #define atomic_subtract_rel_32 kcsan_atomic_subtract_rel_32 338*22ce4affSfengbojiang #define atomic_store_32 kcsan_atomic_store_32 339*22ce4affSfengbojiang #define atomic_store_rel_32 kcsan_atomic_store_rel_32 340*22ce4affSfengbojiang #define atomic_swap_32 kcsan_atomic_swap_32 341*22ce4affSfengbojiang #define atomic_testandclear_32 kcsan_atomic_testandclear_32 342*22ce4affSfengbojiang #define atomic_testandset_32 kcsan_atomic_testandset_32 343*22ce4affSfengbojiang 344*22ce4affSfengbojiang #define atomic_add_64 kcsan_atomic_add_64 345*22ce4affSfengbojiang #define atomic_add_acq_64 kcsan_atomic_add_acq_64 346*22ce4affSfengbojiang #define atomic_add_rel_64 kcsan_atomic_add_rel_64 347*22ce4affSfengbojiang #define atomic_clear_64 kcsan_atomic_clear_64 348*22ce4affSfengbojiang #define atomic_clear_acq_64 kcsan_atomic_clear_acq_64 349*22ce4affSfengbojiang #define atomic_clear_rel_64 kcsan_atomic_clear_rel_64 350*22ce4affSfengbojiang #define atomic_cmpset_64 kcsan_atomic_cmpset_64 351*22ce4affSfengbojiang #define atomic_cmpset_acq_64 kcsan_atomic_cmpset_acq_64 352*22ce4affSfengbojiang #define atomic_cmpset_rel_64 kcsan_atomic_cmpset_rel_64 353*22ce4affSfengbojiang #define atomic_fcmpset_64 kcsan_atomic_fcmpset_64 354*22ce4affSfengbojiang #define atomic_fcmpset_acq_64 kcsan_atomic_fcmpset_acq_64 355*22ce4affSfengbojiang #define atomic_fcmpset_rel_64 kcsan_atomic_fcmpset_rel_64 356*22ce4affSfengbojiang #define atomic_fetchadd_64 kcsan_atomic_fetchadd_64 357*22ce4affSfengbojiang #define atomic_load_64 kcsan_atomic_load_64 358*22ce4affSfengbojiang #define atomic_load_acq_64 kcsan_atomic_load_acq_64 359*22ce4affSfengbojiang #define atomic_readandclear_64 kcsan_atomic_readandclear_64 360*22ce4affSfengbojiang #define atomic_set_64 kcsan_atomic_set_64 361*22ce4affSfengbojiang #define atomic_set_acq_64 kcsan_atomic_set_acq_64 362*22ce4affSfengbojiang #define atomic_set_rel_64 kcsan_atomic_set_rel_64 363*22ce4affSfengbojiang #define atomic_subtract_64 kcsan_atomic_subtract_64 364*22ce4affSfengbojiang #define atomic_subtract_acq_64 kcsan_atomic_subtract_acq_64 365*22ce4affSfengbojiang #define atomic_subtract_rel_64 kcsan_atomic_subtract_rel_64 366*22ce4affSfengbojiang #define atomic_store_64 kcsan_atomic_store_64 367*22ce4affSfengbojiang #define atomic_store_rel_64 kcsan_atomic_store_rel_64 368*22ce4affSfengbojiang #define atomic_swap_64 kcsan_atomic_swap_64 369*22ce4affSfengbojiang #define atomic_testandclear_64 kcsan_atomic_testandclear_64 370*22ce4affSfengbojiang #define atomic_testandset_64 kcsan_atomic_testandset_64 371*22ce4affSfengbojiang 372*22ce4affSfengbojiang #define atomic_thread_fence_acq kcsan_atomic_thread_fence_acq 373*22ce4affSfengbojiang #define atomic_thread_fence_acq_rel kcsan_atomic_thread_fence_acq_rel 374*22ce4affSfengbojiang #define atomic_thread_fence_rel kcsan_atomic_thread_fence_rel 375*22ce4affSfengbojiang #define atomic_thread_fence_seq_cst kcsan_atomic_thread_fence_seq_cst 376*22ce4affSfengbojiang #define atomic_interrupt_fence __compiler_membar 377*22ce4affSfengbojiang 378*22ce4affSfengbojiang #endif /* !KCSAN_RUNTIME */ 379*22ce4affSfengbojiang 380*22ce4affSfengbojiang #endif /* !_SYS__CSAN_ATOMIC_H_ */ 381