From de35aa66b07a62a1c27f4b104577848fa8f7ec17 Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Thu, 8 Jan 2015 18:56:11 +0000 Subject: [PATCH] tsan.c (pass_tsan::gate): Add no_sanitize_thread support. * tsan.c (pass_tsan::gate): Add no_sanitize_thread support. (pass_tsan_O0::gate): Likewise. * extend.texi (Function Attributes): Add no_sanitize_thread documentation. * c-common.c (c_common_attribute_table): Add no_sanitize_thread. From-SVN: r219355 --- gcc/ChangeLog | 7 +++++++ gcc/c-family/ChangeLog | 4 ++++ gcc/c-family/c-common.c | 3 +++ gcc/doc/extend.texi | 7 +++++++ gcc/tsan.c | 8 ++++++-- 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5bc6591af55..f9b3c559a95 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-01-08 Mike Stump + + * 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 * builtins.def (DEF_GOMP_BUILTIN): Also consider flag_offload_abi diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 4bcff011315..d6f09dcf044 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2015-01-08 Mike Stump + + * c-common.c (c_common_attribute_table): Add no_sanitize_thread. + 2015-01-07 Marek Polacek PR c/64440 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index df4fddd1926..713dca9fa96 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 25226824043..942a6bc8715 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 567a4218bcd..2dfbab0c777 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 (); } -- 2.30.2