diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-12-04 14:20:20 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-12-04 14:20:20 +0100 |
commit | c954bddd5fbafeb558aea958cafa970677740b23 (patch) | |
tree | 21044204031b54a990ff0b62ce262c476b707eda /gcc/sanitizer.def | |
parent | 41d37c5656b03f992c97e29f74241ba1d24e3cd8 (diff) | |
download | gcc-c954bddd5fbafeb558aea958cafa970677740b23.zip gcc-c954bddd5fbafeb558aea958cafa970677740b23.tar.gz gcc-c954bddd5fbafeb558aea958cafa970677740b23.tar.bz2 |
re PR sanitizer/55439 (ThreadSanitizer: handle atomic operations)
PR sanitizer/55439
* Makefile.in (tsan.o): Depend on tree-ssa-propagate.h.
* sanitizer.def: Add __tsan_atomic* builtins.
* asan.c (initialize_sanitizer_builtins): Adjust to also
initialize __tsan_atomic* builtins.
* tsan.c: Include tree-ssa-propagate.h.
(enum tsan_atomic_action): New enum.
(tsan_atomic_table): New table.
(instrument_builtin_call): New function.
(instrument_gimple): Take pointer to gimple_stmt_iterator
instead of gimple_stmt_iterator. Call instrument_builtin_call
on builtin call stmts.
(instrument_memory_accesses): Adjust instrument_gimple caller.
* builtin-types.def (BT_FN_BOOL_VPTR_PTR_I1_INT_INT,
BT_FN_BOOL_VPTR_PTR_I2_INT_INT, BT_FN_BOOL_VPTR_PTR_I4_INT_INT,
BT_FN_BOOL_VPTR_PTR_I8_INT_INT, BT_FN_BOOL_VPTR_PTR_I16_INT_INT): New.
From-SVN: r194133
Diffstat (limited to 'gcc/sanitizer.def')
-rw-r--r-- | gcc/sanitizer.def | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/gcc/sanitizer.def b/gcc/sanitizer.def index c2ee972..1739e7a 100644 --- a/gcc/sanitizer.def +++ b/gcc/sanitizer.def @@ -85,3 +85,196 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE8, "__tsan_write8", BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE16, "__tsan_write16", BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_LOAD, + "__tsan_atomic8_load", + BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_LOAD, + "__tsan_atomic16_load", + BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_LOAD, + "__tsan_atomic32_load", + BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_LOAD, + "__tsan_atomic64_load", + BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_LOAD, + "__tsan_atomic128_load", + BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_STORE, + "__tsan_atomic8_store", + BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_STORE, + "__tsan_atomic16_store", + BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_STORE, + "__tsan_atomic32_store", + BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_STORE, + "__tsan_atomic64_store", + BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_STORE, + "__tsan_atomic128_store", + BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_EXCHANGE, + "__tsan_atomic8_exchange", + BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_EXCHANGE, + "__tsan_atomic16_exchange", + BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_EXCHANGE, + "__tsan_atomic32_exchange", + BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_EXCHANGE, + "__tsan_atomic64_exchange", + BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_EXCHANGE, + "__tsan_atomic128_exchange", + BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_ADD, + "__tsan_atomic8_fetch_add", + BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_ADD, + "__tsan_atomic16_fetch_add", + BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_ADD, + "__tsan_atomic32_fetch_add", + BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_ADD, + "__tsan_atomic64_fetch_add", + BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_ADD, + "__tsan_atomic128_fetch_add", + BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_SUB, + "__tsan_atomic8_fetch_sub", + BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_SUB, + "__tsan_atomic16_fetch_sub", + BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_SUB, + "__tsan_atomic32_fetch_sub", + BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_SUB, + "__tsan_atomic64_fetch_sub", + BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_SUB, + "__tsan_atomic128_fetch_sub", + BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_AND, + "__tsan_atomic8_fetch_and", + BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_AND, + "__tsan_atomic16_fetch_and", + BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_AND, + "__tsan_atomic32_fetch_and", + BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_AND, + "__tsan_atomic64_fetch_and", + BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_AND, + "__tsan_atomic128_fetch_and", + BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_OR, + "__tsan_atomic8_fetch_or", + BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_OR, + "__tsan_atomic16_fetch_or", + BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_OR, + "__tsan_atomic32_fetch_or", + BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_OR, + "__tsan_atomic64_fetch_or", + BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_OR, + "__tsan_atomic128_fetch_or", + BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_XOR, + "__tsan_atomic8_fetch_xor", + BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_XOR, + "__tsan_atomic16_fetch_xor", + BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_XOR, + "__tsan_atomic32_fetch_xor", + BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_XOR, + "__tsan_atomic64_fetch_xor", + BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_XOR, + "__tsan_atomic128_fetch_xor", + BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_NAND, + "__tsan_atomic8_fetch_nand", + BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_NAND, + "__tsan_atomic16_fetch_nand", + BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_NAND, + "__tsan_atomic32_fetch_nand", + BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_NAND, + "__tsan_atomic64_fetch_nand", + BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_NAND, + "__tsan_atomic128_fetch_nand", + BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_STRONG, + "__tsan_atomic8_compare_exchange_strong", + BT_FN_BOOL_VPTR_PTR_I1_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_STRONG, + "__tsan_atomic16_compare_exchange_strong", + BT_FN_BOOL_VPTR_PTR_I2_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_STRONG, + "__tsan_atomic32_compare_exchange_strong", + BT_FN_BOOL_VPTR_PTR_I4_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_STRONG, + "__tsan_atomic64_compare_exchange_strong", + BT_FN_BOOL_VPTR_PTR_I8_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_STRONG, + "__tsan_atomic128_compare_exchange_strong", + BT_FN_BOOL_VPTR_PTR_I16_INT_INT, + ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_WEAK, + "__tsan_atomic8_compare_exchange_weak", + BT_FN_BOOL_VPTR_PTR_I1_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_WEAK, + "__tsan_atomic16_compare_exchange_weak", + BT_FN_BOOL_VPTR_PTR_I2_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_WEAK, + "__tsan_atomic32_compare_exchange_weak", + BT_FN_BOOL_VPTR_PTR_I4_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_WEAK, + "__tsan_atomic64_compare_exchange_weak", + BT_FN_BOOL_VPTR_PTR_I8_INT_INT, + ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_WEAK, + "__tsan_atomic128_compare_exchange_weak", + BT_FN_BOOL_VPTR_PTR_I16_INT_INT, + ATTR_NOTHROW_LEAF_LIST) + +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_THREAD_FENCE, + "__tsan_atomic_thread_fence", + BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST) +DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_SIGNAL_FENCE, + "__tsan_atomic_signal_fence", + BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST) |