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__CSAN_ATOMIC_H_ 36 #define _SYS__CSAN_ATOMIC_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 90 KCSAN_ATOMIC_FUNCS(char, uint8_t); 91 KCSAN_ATOMIC_FUNCS(short, uint16_t); 92 KCSAN_ATOMIC_FUNCS(int, u_int); 93 KCSAN_ATOMIC_FUNCS(long, u_long); 94 KCSAN_ATOMIC_FUNCS(ptr, uintptr_t); 95 KCSAN_ATOMIC_FUNCS(8, uint8_t); 96 KCSAN_ATOMIC_FUNCS(16, uint16_t); 97 KCSAN_ATOMIC_FUNCS(32, uint32_t); 98 KCSAN_ATOMIC_FUNCS(64, uint64_t); 99 100 void kcsan_atomic_thread_fence_acq(void); 101 void kcsan_atomic_thread_fence_acq_rel(void); 102 void kcsan_atomic_thread_fence_rel(void); 103 void 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__CSAN_ATOMIC_H_ */ 381