aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-family/ChangeLog4
-rw-r--r--gcc/c-family/c-common.c3
-rw-r--r--gcc/doc/extend.texi7
-rw-r--r--gcc/tsan.c8
5 files changed, 27 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5bc6591..f9b3c55 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-08 Mike Stump <mikestump@comcast.net>
+
+ * tsan.c (pass_tsan::gate): Add no_sanitize_thread support.
+ (pass_tsan_O0::gate): Likewise.
+ * extend.texi (Function Attributes): Add no_sanitize_thread
+ documentation.
+
2015-01-08 Thomas Schwinge <thomas@codesourcery.com>
* builtins.def (DEF_GOMP_BUILTIN): Also consider flag_offload_abi
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 4bcff01..d6f09dc 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-08 Mike Stump <mikestump@comcast.net>
+
+ * c-common.c (c_common_attribute_table): Add no_sanitize_thread.
+
2015-01-07 Marek Polacek <polacek@redhat.com>
PR c/64440
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index df4fddd..713dca9 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -764,6 +764,9 @@ const struct attribute_spec c_common_attribute_table[] =
{ "no_sanitize_address", 0, 0, true, false, false,
handle_no_sanitize_address_attribute,
false },
+ { "no_sanitize_thread", 0, 0, true, false, false,
+ handle_no_sanitize_address_attribute,
+ false },
{ "no_sanitize_undefined", 0, 0, true, false, false,
handle_no_sanitize_undefined_attribute,
false },
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 2522682..942a6bc 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -2205,6 +2205,7 @@ attributes are currently defined for functions on all targets:
@code{returns_nonnull}, @code{gnu_inline},
@code{externally_visible}, @code{hot}, @code{cold}, @code{artificial},
@code{no_sanitize_address}, @code{no_address_safety_analysis},
+@code{no_sanitize_thread},
@code{no_sanitize_undefined}, @code{no_reorder}, @code{bnd_legacy},
@code{bnd_instrument},
@code{error} and @code{warning}.
@@ -3721,6 +3722,12 @@ The @code{no_address_safety_analysis} is a deprecated alias of the
@code{no_sanitize_address} attribute, new code should use
@code{no_sanitize_address}.
+@item no_sanitize_thread
+@cindex @code{no_sanitize_thread} function attribute
+The @code{no_sanitize_thread} attribute on functions is used
+to inform the compiler that it should not instrument memory accesses
+in the function when compiling with the @option{-fsanitize=thread} option.
+
@item no_sanitize_undefined
@cindex @code{no_sanitize_undefined} function attribute
The @code{no_sanitize_undefined} attribute on functions is used
diff --git a/gcc/tsan.c b/gcc/tsan.c
index 567a421..2dfbab0 100644
--- a/gcc/tsan.c
+++ b/gcc/tsan.c
@@ -868,7 +868,9 @@ public:
opt_pass * clone () { return new pass_tsan (m_ctxt); }
virtual bool gate (function *)
{
- return (flag_sanitize & SANITIZE_THREAD) != 0;
+ return ((flag_sanitize & SANITIZE_THREAD) != 0
+ && !lookup_attribute ("no_sanitize_thread",
+ DECL_ATTRIBUTES (current_function_decl)));
}
virtual unsigned int execute (function *) { return tsan_pass (); }
@@ -908,7 +910,9 @@ public:
/* opt_pass methods: */
virtual bool gate (function *)
{
- return (flag_sanitize & SANITIZE_THREAD) != 0 && !optimize;
+ return ((flag_sanitize & SANITIZE_THREAD) != 0 && !optimize
+ && !lookup_attribute ("no_sanitize_thread",
+ DECL_ATTRIBUTES (current_function_decl)));
}
virtual unsigned int execute (function *) { return tsan_pass (); }