aboutsummaryrefslogtreecommitdiff
path: root/gcc/asan.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-12-04 14:20:20 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-12-04 14:20:20 +0100
commitc954bddd5fbafeb558aea958cafa970677740b23 (patch)
tree21044204031b54a990ff0b62ce262c476b707eda /gcc/asan.c
parent41d37c5656b03f992c97e29f74241ba1d24e3cd8 (diff)
downloadgcc-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/asan.c')
-rw-r--r--gcc/asan.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/asan.c b/gcc/asan.c
index 221649c..41c5c33 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -1505,6 +1505,58 @@ initialize_sanitizer_builtins (void)
= build_function_type_list (void_type_node, ptr_type_node,
build_nonstandard_integer_type (POINTER_SIZE,
1), NULL_TREE);
+ tree BT_FN_VOID_INT
+ = build_function_type_list (void_type_node, integer_type_node, NULL_TREE);
+ tree BT_FN_BOOL_VPTR_PTR_IX_INT_INT[5];
+ tree BT_FN_IX_CONST_VPTR_INT[5];
+ tree BT_FN_IX_VPTR_IX_INT[5];
+ tree BT_FN_VOID_VPTR_IX_INT[5];
+ tree vptr
+ = build_pointer_type (build_qualified_type (void_type_node,
+ TYPE_QUAL_VOLATILE));
+ tree cvptr
+ = build_pointer_type (build_qualified_type (void_type_node,
+ TYPE_QUAL_VOLATILE
+ |TYPE_QUAL_CONST));
+ tree boolt
+ = lang_hooks.types.type_for_size (BOOL_TYPE_SIZE, 1);
+ int i;
+ for (i = 0; i < 5; i++)
+ {
+ tree ix = build_nonstandard_integer_type (BITS_PER_UNIT * (1 << i), 1);
+ BT_FN_BOOL_VPTR_PTR_IX_INT_INT[i]
+ = build_function_type_list (boolt, vptr, ptr_type_node, ix,
+ integer_type_node, integer_type_node,
+ NULL_TREE);
+ BT_FN_IX_CONST_VPTR_INT[i]
+ = build_function_type_list (ix, cvptr, integer_type_node, NULL_TREE);
+ BT_FN_IX_VPTR_IX_INT[i]
+ = build_function_type_list (ix, vptr, ix, integer_type_node,
+ NULL_TREE);
+ BT_FN_VOID_VPTR_IX_INT[i]
+ = build_function_type_list (void_type_node, vptr, ix,
+ integer_type_node, NULL_TREE);
+ }
+#define BT_FN_BOOL_VPTR_PTR_I1_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[0]
+#define BT_FN_I1_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[0]
+#define BT_FN_I1_VPTR_I1_INT BT_FN_IX_VPTR_IX_INT[0]
+#define BT_FN_VOID_VPTR_I1_INT BT_FN_VOID_VPTR_IX_INT[0]
+#define BT_FN_BOOL_VPTR_PTR_I2_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[1]
+#define BT_FN_I2_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[1]
+#define BT_FN_I2_VPTR_I2_INT BT_FN_IX_VPTR_IX_INT[1]
+#define BT_FN_VOID_VPTR_I2_INT BT_FN_VOID_VPTR_IX_INT[1]
+#define BT_FN_BOOL_VPTR_PTR_I4_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[2]
+#define BT_FN_I4_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[2]
+#define BT_FN_I4_VPTR_I4_INT BT_FN_IX_VPTR_IX_INT[2]
+#define BT_FN_VOID_VPTR_I4_INT BT_FN_VOID_VPTR_IX_INT[2]
+#define BT_FN_BOOL_VPTR_PTR_I8_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[3]
+#define BT_FN_I8_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[3]
+#define BT_FN_I8_VPTR_I8_INT BT_FN_IX_VPTR_IX_INT[3]
+#define BT_FN_VOID_VPTR_I8_INT BT_FN_VOID_VPTR_IX_INT[3]
+#define BT_FN_BOOL_VPTR_PTR_I16_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[4]
+#define BT_FN_I16_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[4]
+#define BT_FN_I16_VPTR_I16_INT BT_FN_IX_VPTR_IX_INT[4]
+#define BT_FN_VOID_VPTR_I16_INT BT_FN_VOID_VPTR_IX_INT[4]
#undef ATTR_NOTHROW_LEAF_LIST
#define ATTR_NOTHROW_LEAF_LIST ECF_NOTHROW | ECF_LEAF
#undef ATTR_NORETURN_NOTHROW_LEAF_LIST