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