1/* This file contains the definitions and documentation for the 2 Address Sanitizer and Thread Sanitizer builtins used in the GNU compiler. 3 Copyright (C) 2012-2016 Free Software Foundation, Inc. 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 3, or (at your option) any later 10version. 11 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING3. If not see 19<http://www.gnu.org/licenses/>. */ 20 21/* Before including this file, you should define a macro: 22 23 DEF_BUILTIN_STUB(ENUM, NAME) 24 DEF_SANITIZER_BUILTIN (ENUM, NAME, TYPE, ATTRS) 25 26 See builtins.def for details. 27 The builtins are created by the C-family of FEs in c-family/c-common.c, 28 for other FEs by asan.c. */ 29 30/* This has to come before all the sanitizer builtins. */ 31DEF_BUILTIN_STUB(BEGIN_SANITIZER_BUILTINS, (const char *)0) 32 33/* Address Sanitizer */ 34DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_INIT, "__asan_init", 35 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST) 36DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_VERSION_MISMATCH_CHECK, 37 "__asan_version_mismatch_check_v6", 38 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST) 39/* Do not reorder the BUILT_IN_ASAN_{REPORT,CHECK}* builtins, e.g. cfgcleanup.c 40 relies on this order. */ 41DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD1, "__asan_report_load1", 42 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 43DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD2, "__asan_report_load2", 44 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 45DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD4, "__asan_report_load4", 46 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 47DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD8, "__asan_report_load8", 48 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 49DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD16, "__asan_report_load16", 50 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 51DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD_N, "__asan_report_load_n", 52 BT_FN_VOID_PTR_PTRMODE, 53 ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 54DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE1, "__asan_report_store1", 55 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 56DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE2, "__asan_report_store2", 57 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 58DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE4, "__asan_report_store4", 59 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 60DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE8, "__asan_report_store8", 61 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 62DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE16, "__asan_report_store16", 63 BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 64DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE_N, "__asan_report_store_n", 65 BT_FN_VOID_PTR_PTRMODE, 66 ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST) 67DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD1_NOABORT, 68 "__asan_report_load1_noabort", 69 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 70DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD2_NOABORT, 71 "__asan_report_load2_noabort", 72 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 73DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD4_NOABORT, 74 "__asan_report_load4_noabort", 75 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 76DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD8_NOABORT, 77 "__asan_report_load8_noabort", 78 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 79DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD16_NOABORT, 80 "__asan_report_load16_noabort", 81 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 82DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD_N_NOABORT, 83 "__asan_report_load_n_noabort", 84 BT_FN_VOID_PTR_PTRMODE, 85 ATTR_TMPURE_NOTHROW_LEAF_LIST) 86DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE1_NOABORT, 87 "__asan_report_store1_noabort", 88 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 89DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE2_NOABORT, 90 "__asan_report_store2_noabort", 91 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 92DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE4_NOABORT, 93 "__asan_report_store4_noabort", 94 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 95DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE8_NOABORT, 96 "__asan_report_store8_noabort", 97 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 98DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE16_NOABORT, 99 "__asan_report_store16_noabort", 100 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 101DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE_N_NOABORT, 102 "__asan_report_store_n_noabort", 103 BT_FN_VOID_PTR_PTRMODE, 104 ATTR_TMPURE_NOTHROW_LEAF_LIST) 105DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD1, "__asan_load1", 106 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 107DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD2, "__asan_load2", 108 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 109DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD4, "__asan_load4", 110 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 111DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD8, "__asan_load8", 112 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 113DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD16, "__asan_load16", 114 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 115DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOADN, "__asan_loadN", 116 BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST) 117DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE1, "__asan_store1", 118 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 119DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE2, "__asan_store2", 120 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 121DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE4, "__asan_store4", 122 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 123DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE8, "__asan_store8", 124 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 125DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE16, "__asan_store16", 126 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 127DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STOREN, "__asan_storeN", 128 BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST) 129DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD1_NOABORT, "__asan_load1_noabort", 130 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 131DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD2_NOABORT, "__asan_load2_noabort", 132 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 133DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD4_NOABORT, "__asan_load4_noabort", 134 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 135DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD8_NOABORT, "__asan_load8_noabort", 136 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 137DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD16_NOABORT, "__asan_load16_noabort", 138 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 139DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOADN_NOABORT, "__asan_loadN_noabort", 140 BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST) 141DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE1_NOABORT, "__asan_store1_noabort", 142 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 143DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE2_NOABORT, "__asan_store2_noabort", 144 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 145DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE4_NOABORT, "__asan_store4_noabort", 146 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 147DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE8_NOABORT, "__asan_store8_noabort", 148 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 149DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE16_NOABORT, "__asan_store16_noabort", 150 BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST) 151DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STOREN_NOABORT, "__asan_storeN_noabort", 152 BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST) 153DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REGISTER_GLOBALS, 154 "__asan_register_globals", 155 BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST) 156DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_UNREGISTER_GLOBALS, 157 "__asan_unregister_globals", 158 BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST) 159DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_HANDLE_NO_RETURN, 160 "__asan_handle_no_return", 161 BT_FN_VOID, ATTR_TMPURE_NOTHROW_LEAF_LIST) 162DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT, 163 "__asan_before_dynamic_init", 164 BT_FN_VOID_CONST_PTR, ATTR_NOTHROW_LEAF_LIST) 165DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_AFTER_DYNAMIC_INIT, 166 "__asan_after_dynamic_init", 167 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST) 168 169/* Thread Sanitizer */ 170DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_INIT, "__tsan_init", 171 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST) 172DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_ENTRY, "__tsan_func_entry", 173 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 174DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_EXIT, "__tsan_func_exit", 175 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 176DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_VPTR_UPDATE, "__tsan_vptr_update", 177 BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST) 178DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ1, "__tsan_read1", 179 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 180DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ2, "__tsan_read2", 181 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 182DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ4, "__tsan_read4", 183 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 184DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ8, "__tsan_read8", 185 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 186DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ16, "__tsan_read16", 187 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 188DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE1, "__tsan_write1", 189 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 190DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE2, "__tsan_write2", 191 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 192DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE4, "__tsan_write4", 193 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 194DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE8, "__tsan_write8", 195 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 196DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE16, "__tsan_write16", 197 BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) 198DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ_RANGE, "__tsan_read_range", 199 BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST) 200DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE_RANGE, "__tsan_write_range", 201 BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST) 202 203DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_LOAD, 204 "__tsan_atomic8_load", 205 BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) 206DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_LOAD, 207 "__tsan_atomic16_load", 208 BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) 209DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_LOAD, 210 "__tsan_atomic32_load", 211 BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) 212DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_LOAD, 213 "__tsan_atomic64_load", 214 BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) 215DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_LOAD, 216 "__tsan_atomic128_load", 217 BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) 218 219DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_STORE, 220 "__tsan_atomic8_store", 221 BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 222DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_STORE, 223 "__tsan_atomic16_store", 224 BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 225DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_STORE, 226 "__tsan_atomic32_store", 227 BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 228DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_STORE, 229 "__tsan_atomic64_store", 230 BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 231DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_STORE, 232 "__tsan_atomic128_store", 233 BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 234 235DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_EXCHANGE, 236 "__tsan_atomic8_exchange", 237 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 238DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_EXCHANGE, 239 "__tsan_atomic16_exchange", 240 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 241DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_EXCHANGE, 242 "__tsan_atomic32_exchange", 243 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 244DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_EXCHANGE, 245 "__tsan_atomic64_exchange", 246 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 247DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_EXCHANGE, 248 "__tsan_atomic128_exchange", 249 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 250 251DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_ADD, 252 "__tsan_atomic8_fetch_add", 253 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 254DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_ADD, 255 "__tsan_atomic16_fetch_add", 256 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 257DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_ADD, 258 "__tsan_atomic32_fetch_add", 259 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 260DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_ADD, 261 "__tsan_atomic64_fetch_add", 262 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 263DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_ADD, 264 "__tsan_atomic128_fetch_add", 265 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 266 267DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_SUB, 268 "__tsan_atomic8_fetch_sub", 269 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 270DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_SUB, 271 "__tsan_atomic16_fetch_sub", 272 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 273DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_SUB, 274 "__tsan_atomic32_fetch_sub", 275 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 276DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_SUB, 277 "__tsan_atomic64_fetch_sub", 278 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 279DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_SUB, 280 "__tsan_atomic128_fetch_sub", 281 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 282 283DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_AND, 284 "__tsan_atomic8_fetch_and", 285 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 286DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_AND, 287 "__tsan_atomic16_fetch_and", 288 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 289DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_AND, 290 "__tsan_atomic32_fetch_and", 291 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 292DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_AND, 293 "__tsan_atomic64_fetch_and", 294 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 295DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_AND, 296 "__tsan_atomic128_fetch_and", 297 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 298 299DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_OR, 300 "__tsan_atomic8_fetch_or", 301 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 302DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_OR, 303 "__tsan_atomic16_fetch_or", 304 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 305DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_OR, 306 "__tsan_atomic32_fetch_or", 307 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 308DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_OR, 309 "__tsan_atomic64_fetch_or", 310 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 311DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_OR, 312 "__tsan_atomic128_fetch_or", 313 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 314 315DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_XOR, 316 "__tsan_atomic8_fetch_xor", 317 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 318DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_XOR, 319 "__tsan_atomic16_fetch_xor", 320 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 321DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_XOR, 322 "__tsan_atomic32_fetch_xor", 323 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 324DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_XOR, 325 "__tsan_atomic64_fetch_xor", 326 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 327DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_XOR, 328 "__tsan_atomic128_fetch_xor", 329 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 330 331DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_NAND, 332 "__tsan_atomic8_fetch_nand", 333 BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) 334DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_NAND, 335 "__tsan_atomic16_fetch_nand", 336 BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) 337DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_NAND, 338 "__tsan_atomic32_fetch_nand", 339 BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) 340DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_NAND, 341 "__tsan_atomic64_fetch_nand", 342 BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) 343DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_NAND, 344 "__tsan_atomic128_fetch_nand", 345 BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) 346 347DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_STRONG, 348 "__tsan_atomic8_compare_exchange_strong", 349 BT_FN_BOOL_VPTR_PTR_I1_INT_INT, 350 ATTR_NOTHROW_LEAF_LIST) 351DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_STRONG, 352 "__tsan_atomic16_compare_exchange_strong", 353 BT_FN_BOOL_VPTR_PTR_I2_INT_INT, 354 ATTR_NOTHROW_LEAF_LIST) 355DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_STRONG, 356 "__tsan_atomic32_compare_exchange_strong", 357 BT_FN_BOOL_VPTR_PTR_I4_INT_INT, 358 ATTR_NOTHROW_LEAF_LIST) 359DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_STRONG, 360 "__tsan_atomic64_compare_exchange_strong", 361 BT_FN_BOOL_VPTR_PTR_I8_INT_INT, 362 ATTR_NOTHROW_LEAF_LIST) 363DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_STRONG, 364 "__tsan_atomic128_compare_exchange_strong", 365 BT_FN_BOOL_VPTR_PTR_I16_INT_INT, 366 ATTR_NOTHROW_LEAF_LIST) 367 368DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_WEAK, 369 "__tsan_atomic8_compare_exchange_weak", 370 BT_FN_BOOL_VPTR_PTR_I1_INT_INT, 371 ATTR_NOTHROW_LEAF_LIST) 372DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_WEAK, 373 "__tsan_atomic16_compare_exchange_weak", 374 BT_FN_BOOL_VPTR_PTR_I2_INT_INT, 375 ATTR_NOTHROW_LEAF_LIST) 376DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_WEAK, 377 "__tsan_atomic32_compare_exchange_weak", 378 BT_FN_BOOL_VPTR_PTR_I4_INT_INT, 379 ATTR_NOTHROW_LEAF_LIST) 380DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_WEAK, 381 "__tsan_atomic64_compare_exchange_weak", 382 BT_FN_BOOL_VPTR_PTR_I8_INT_INT, 383 ATTR_NOTHROW_LEAF_LIST) 384DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_WEAK, 385 "__tsan_atomic128_compare_exchange_weak", 386 BT_FN_BOOL_VPTR_PTR_I16_INT_INT, 387 ATTR_NOTHROW_LEAF_LIST) 388 389DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_THREAD_FENCE, 390 "__tsan_atomic_thread_fence", 391 BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST) 392DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_SIGNAL_FENCE, 393 "__tsan_atomic_signal_fence", 394 BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST) 395 396/* Undefined Behavior Sanitizer */ 397DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW, 398 "__ubsan_handle_divrem_overflow", 399 BT_FN_VOID_PTR_PTR_PTR, 400 ATTR_COLD_NOTHROW_LEAF_LIST) 401DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS, 402 "__ubsan_handle_shift_out_of_bounds", 403 BT_FN_VOID_PTR_PTR_PTR, 404 ATTR_COLD_NOTHROW_LEAF_LIST) 405DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE, 406 "__ubsan_handle_builtin_unreachable", 407 BT_FN_VOID_PTR, 408 ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST) 409DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_MISSING_RETURN, 410 "__ubsan_handle_missing_return", 411 BT_FN_VOID_PTR, 412 ATTR_NORETURN_NOTHROW_LEAF_LIST) 413DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_VLA_BOUND_NOT_POSITIVE, 414 "__ubsan_handle_vla_bound_not_positive", 415 BT_FN_VOID_PTR_PTR, 416 ATTR_COLD_NOTHROW_LEAF_LIST) 417DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH, 418 "__ubsan_handle_type_mismatch", 419 BT_FN_VOID_PTR_PTR, 420 ATTR_COLD_NOTHROW_LEAF_LIST) 421DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_ADD_OVERFLOW, 422 "__ubsan_handle_add_overflow", 423 BT_FN_VOID_PTR_PTR_PTR, 424 ATTR_COLD_NOTHROW_LEAF_LIST) 425DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SUB_OVERFLOW, 426 "__ubsan_handle_sub_overflow", 427 BT_FN_VOID_PTR_PTR_PTR, 428 ATTR_COLD_NOTHROW_LEAF_LIST) 429DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_MUL_OVERFLOW, 430 "__ubsan_handle_mul_overflow", 431 BT_FN_VOID_PTR_PTR_PTR, 432 ATTR_COLD_NOTHROW_LEAF_LIST) 433DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NEGATE_OVERFLOW, 434 "__ubsan_handle_negate_overflow", 435 BT_FN_VOID_PTR_PTR, 436 ATTR_COLD_NOTHROW_LEAF_LIST) 437DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE, 438 "__ubsan_handle_load_invalid_value", 439 BT_FN_VOID_PTR_PTR, 440 ATTR_COLD_NOTHROW_LEAF_LIST) 441DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT, 442 "__ubsan_handle_divrem_overflow_abort", 443 BT_FN_VOID_PTR_PTR_PTR, 444 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 445DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS_ABORT, 446 "__ubsan_handle_shift_out_of_bounds_abort", 447 BT_FN_VOID_PTR_PTR_PTR, 448 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 449DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_VLA_BOUND_NOT_POSITIVE_ABORT, 450 "__ubsan_handle_vla_bound_not_positive_abort", 451 BT_FN_VOID_PTR_PTR, 452 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 453DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_ABORT, 454 "__ubsan_handle_type_mismatch_abort", 455 BT_FN_VOID_PTR_PTR, 456 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 457DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_ADD_OVERFLOW_ABORT, 458 "__ubsan_handle_add_overflow_abort", 459 BT_FN_VOID_PTR_PTR_PTR, 460 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 461DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SUB_OVERFLOW_ABORT, 462 "__ubsan_handle_sub_overflow_abort", 463 BT_FN_VOID_PTR_PTR_PTR, 464 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 465DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_MUL_OVERFLOW_ABORT, 466 "__ubsan_handle_mul_overflow_abort", 467 BT_FN_VOID_PTR_PTR_PTR, 468 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 469DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NEGATE_OVERFLOW_ABORT, 470 "__ubsan_handle_negate_overflow_abort", 471 BT_FN_VOID_PTR_PTR, 472 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 473DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE_ABORT, 474 "__ubsan_handle_load_invalid_value_abort", 475 BT_FN_VOID_PTR_PTR, 476 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 477DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_FLOAT_CAST_OVERFLOW, 478 "__ubsan_handle_float_cast_overflow", 479 BT_FN_VOID_PTR_PTR, 480 ATTR_COLD_NOTHROW_LEAF_LIST) 481DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_FLOAT_CAST_OVERFLOW_ABORT, 482 "__ubsan_handle_float_cast_overflow_abort", 483 BT_FN_VOID_PTR_PTR, 484 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 485DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS, 486 "__ubsan_handle_out_of_bounds", 487 BT_FN_VOID_PTR_PTR, 488 ATTR_COLD_NOTHROW_LEAF_LIST) 489DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS_ABORT, 490 "__ubsan_handle_out_of_bounds_abort", 491 BT_FN_VOID_PTR_PTR, 492 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 493DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_ARG, 494 "__ubsan_handle_nonnull_arg", 495 BT_FN_VOID_PTR, 496 ATTR_COLD_NOTHROW_LEAF_LIST) 497DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_ARG_ABORT, 498 "__ubsan_handle_nonnull_arg_abort", 499 BT_FN_VOID_PTR, 500 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 501DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN, 502 "__ubsan_handle_nonnull_return", 503 BT_FN_VOID_PTR, 504 ATTR_COLD_NOTHROW_LEAF_LIST) 505DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_ABORT, 506 "__ubsan_handle_nonnull_return_abort", 507 BT_FN_VOID_PTR, 508 ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST) 509DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DYNAMIC_TYPE_CACHE_MISS, 510 "__ubsan_handle_dynamic_type_cache_miss", 511 BT_FN_VOID_PTR_PTR_PTR, 512 ATTR_COLD_NOTHROW_LEAF_LIST) 513DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DYNAMIC_TYPE_CACHE_MISS_ABORT, 514 "__ubsan_handle_dynamic_type_cache_miss_abort", 515 BT_FN_VOID_PTR_PTR_PTR, 516 ATTR_COLD_NOTHROW_LEAF_LIST) 517 518/* Sanitizer coverage */ 519DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_PC, 520 "__sanitizer_cov_trace_pc", 521 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST) 522 523/* This has to come after all the sanitizer builtins. */ 524DEF_BUILTIN_STUB(END_SANITIZER_BUILTINS, (const char *)0) 525