re PR sanitizer/56454 (need to rename attribute no_address_safety_analysis to no_sanitize_address)

PR sanitizer/56454
	* asan.c (gate_asan): Lookup no_sanitize_address instead of
	no_address_safety_analysis attribute.
	* doc/extend.texi (no_address_safety_attribute): Rename to
	no_sanitize_address attribute, mention no_address_safety_analysis
	attribute as deprecated alias.

	* c-common.c (handle_no_sanitize_address_attribute): New function.
	(c_common_attribute_table): Add no_sanitize_address attribute.
	(handle_no_address_safety_analysis_attribute): Add
	no_sanitize_address attribute, not no_address_safety_analysis
	attribute.

	* g++.dg/asan/default-options-1.C (__asan_default_options): Use
	no_sanitize_address attribute rather than no_address_safety_analysis.
	* g++.dg/asan/sanitizer_test_utils.h
	(ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS): Likewise.
	* c-c++-common/asan/attrib-1.c: Test no_sanitize_address attribute
	in addition to no_address_safety_analysis.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r196361
This commit is contained in:
Konstantin Serebryany 2013-02-28 21:23:23 +00:00 committed by Jakub Jelinek
parent 37b5ec8fcd
commit e664c61c84
9 changed files with 103 additions and 17 deletions

View File

@ -1,3 +1,13 @@
2013-02-28 Konstantin Serebryany <konstantin.s.serebryany@gmail.com>
Jakub Jelinek <jakub@redhat.com>
PR sanitizer/56454
* asan.c (gate_asan): Lookup no_sanitize_address instead of
no_address_safety_analysis attribute.
* doc/extend.texi (no_address_safety_attribute): Rename to
no_sanitize_address attribute, mention no_address_safety_analysis
attribute as deprecated alias.
2013-02-28 Jakub Jelinek <jakub@redhat.com> 2013-02-28 Jakub Jelinek <jakub@redhat.com>
PR middle-end/56461 PR middle-end/56461

View File

@ -2277,7 +2277,7 @@ static bool
gate_asan (void) gate_asan (void)
{ {
return flag_asan != 0 return flag_asan != 0
&& !lookup_attribute ("no_address_safety_analysis", && !lookup_attribute ("no_sanitize_address",
DECL_ATTRIBUTES (current_function_decl)); DECL_ATTRIBUTES (current_function_decl));
} }

View File

@ -1,3 +1,13 @@
2013-02-28 Konstantin Serebryany <konstantin.s.serebryany@gmail.com>
Jakub Jelinek <jakub@redhat.com>
PR sanitizer/56454
* c-common.c (handle_no_sanitize_address_attribute): New function.
(c_common_attribute_table): Add no_sanitize_address attribute.
(handle_no_address_safety_analysis_attribute): Add
no_sanitize_address attribute, not no_address_safety_analysis
attribute.
2013-02-18 Aldy Hernandez <aldyh@redhat.com> 2013-02-18 Aldy Hernandez <aldyh@redhat.com>
PR target/52555 PR target/52555

View File

@ -307,6 +307,8 @@ static tree handle_common_attribute (tree *, tree, tree, int, bool *);
static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *); static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
static tree handle_hot_attribute (tree *, tree, tree, int, bool *); static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
static tree handle_cold_attribute (tree *, tree, tree, int, bool *); static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
static tree handle_no_sanitize_address_attribute (tree *, tree, tree,
int, bool *);
static tree handle_no_address_safety_analysis_attribute (tree *, tree, tree, static tree handle_no_address_safety_analysis_attribute (tree *, tree, tree,
int, bool *); int, bool *);
static tree handle_noinline_attribute (tree *, tree, tree, int, bool *); static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
@ -715,6 +717,9 @@ const struct attribute_spec c_common_attribute_table[] =
0, 0, true, false, false, 0, 0, true, false, false,
handle_no_address_safety_analysis_attribute, handle_no_address_safety_analysis_attribute,
false }, false },
{ "no_sanitize_address", 0, 0, true, false, false,
handle_no_sanitize_address_attribute,
false },
{ "warning", 1, 1, true, false, false, { "warning", 1, 1, true, false, false,
handle_error_attribute, false }, handle_error_attribute, false },
{ "error", 1, 1, true, false, false, { "error", 1, 1, true, false, false,
@ -6505,11 +6510,11 @@ handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
return NULL_TREE; return NULL_TREE;
} }
/* Handle a "no_address_safety_analysis" attribute; arguments as in /* Handle a "no_sanitize_address" attribute; arguments as in
struct attribute_spec.handler. */ struct attribute_spec.handler. */
static tree static tree
handle_no_address_safety_analysis_attribute (tree *node, tree name, tree, int, handle_no_sanitize_address_attribute (tree *node, tree name, tree, int,
bool *no_add_attrs) bool *no_add_attrs)
{ {
if (TREE_CODE (*node) != FUNCTION_DECL) if (TREE_CODE (*node) != FUNCTION_DECL)
@ -6521,6 +6526,23 @@ handle_no_address_safety_analysis_attribute (tree *node, tree name, tree, int,
return NULL_TREE; return NULL_TREE;
} }
/* Handle a "no_address_safety_analysis" attribute; arguments as in
struct attribute_spec.handler. */
static tree
handle_no_address_safety_analysis_attribute (tree *node, tree name, tree, int,
bool *no_add_attrs)
{
if (TREE_CODE (*node) != FUNCTION_DECL)
warning (OPT_Wattributes, "%qE attribute ignored", name);
else if (!lookup_attribute ("no_sanitize_address", DECL_ATTRIBUTES (*node)))
DECL_ATTRIBUTES (*node)
= tree_cons (get_identifier ("no_sanitize_address"),
NULL_TREE, DECL_ATTRIBUTES (*node));
*no_add_attrs = true;
return NULL_TREE;
}
/* Handle a "noinline" attribute; arguments as in /* Handle a "noinline" attribute; arguments as in
struct attribute_spec.handler. */ struct attribute_spec.handler. */

View File

@ -2133,7 +2133,8 @@ attributes are currently defined for functions on all targets:
@code{weak}, @code{malloc}, @code{alias}, @code{ifunc}, @code{weak}, @code{malloc}, @code{alias}, @code{ifunc},
@code{warn_unused_result}, @code{nonnull}, @code{gnu_inline}, @code{warn_unused_result}, @code{nonnull}, @code{gnu_inline},
@code{externally_visible}, @code{hot}, @code{cold}, @code{artificial}, @code{externally_visible}, @code{hot}, @code{cold}, @code{artificial},
@code{no_address_safety_analysis}, @code{error} and @code{warning}. @code{no_sanitize_address}, @code{no_address_safety_analysis},
@code{error} and @code{warning}.
Several other attributes are defined for functions on particular Several other attributes are defined for functions on particular
target systems. Other attributes, including @code{section} are target systems. Other attributes, including @code{section} are
supported for variables declarations (@pxref{Variable Attributes}) supported for variables declarations (@pxref{Variable Attributes})
@ -3432,11 +3433,15 @@ with computed goto or @code{asm goto}.
The @code{cold} attribute on labels is not implemented in GCC versions The @code{cold} attribute on labels is not implemented in GCC versions
earlier than 4.8. earlier than 4.8.
@item no_address_safety_analysis @item no_sanitize_address
@cindex @code{no_address_safety_analysis} function attribute @itemx no_address_safety_analysis
The @code{no_address_safety_analysis} attribute on functions is used @cindex @code{no_sanitize_address} function attribute
The @code{no_sanitize_address} attribute on functions is used
to inform the compiler that it should not instrument memory accesses to inform the compiler that it should not instrument memory accesses
in the function when compiling with the @option{-fsanitize=address} option. in the function when compiling with the @option{-fsanitize=address} option.
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 regparm (@var{number}) @item regparm (@var{number})
@cindex @code{regparm} attribute @cindex @code{regparm} attribute

View File

@ -1,3 +1,14 @@
2013-02-28 Konstantin Serebryany <konstantin.s.serebryany@gmail.com>
Jakub Jelinek <jakub@redhat.com>
PR sanitizer/56454
* g++.dg/asan/default-options-1.C (__asan_default_options): Use
no_sanitize_address attribute rather than no_address_safety_analysis.
* g++.dg/asan/sanitizer_test_utils.h
(ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS): Likewise.
* c-c++-common/asan/attrib-1.c: Test no_sanitize_address attribute
in addition to no_address_safety_analysis.
2013-02-28 Jason Merrill <jason@redhat.com> 2013-02-28 Jason Merrill <jason@redhat.com>
PR c++/56481 PR c++/56481

View File

@ -1,7 +1,7 @@
/* PR sanitizer/55435 */ /* PR sanitizer/55435 */
/* { dg-do compile } */ /* { dg-do compile } */
__attribute__((no_address_safety_analysis)) int __attribute__((no_sanitize_address)) int
f1 (int *p, int *q) f1 (int *p, int *q)
{ {
*p = 42; *p = 42;
@ -9,8 +9,8 @@ f1 (int *p, int *q)
} }
void f2 (char *); void f2 (char *);
void f2 (char *) __attribute__((no_address_safety_analysis)); void f2 (char *) __attribute__((no_sanitize_address));
void f2 (char *) __attribute__((no_address_safety_analysis)); void f2 (char *) __attribute__((no_sanitize_address));
void f2 (char *); void f2 (char *);
void void
@ -20,7 +20,7 @@ f2 (char *p)
} }
void f3 (short *); void f3 (short *);
__typeof (f3) f3 __attribute__((__no_address_safety_analysis__)); __typeof (f3) f3 __attribute__((__no_sanitize_address__));
void void
f3 (short *p) f3 (short *p)
@ -28,7 +28,35 @@ f3 (short *p)
*p = 42; *p = 42;
} }
int v __attribute__((no_address_safety_analysis)); /* { dg-warning "attribute ignored" } */ __attribute__((no_sanitize_address)) int
f4 (int *p, int *q)
{
*p = 42;
return *q;
}
void f5 (char *);
void f5 (char *) __attribute__((no_sanitize_address));
void f5 (char *) __attribute__((no_sanitize_address));
void f5 (char *);
void
f5 (char *p)
{
*p = 42;
}
void f6 (short *);
__typeof (f6) f6 __attribute__((__no_address_safety_analysis__));
void
f6 (short *p)
{
*p = 42;
}
int v __attribute__((no_sanitize_address)); /* { dg-warning "attribute ignored" } */
int v2 __attribute__((no_address_safety_analysis)); /* { dg-warning "attribute ignored" } */
/* { dg-final { scan-assembler-not "__asan_report_store" } } */ /* { dg-final { scan-assembler-not "__asan_report_store" } } */
/* { dg-final { scan-assembler-not "__asan_report_load" } } */ /* { dg-final { scan-assembler-not "__asan_report_load" } } */

View File

@ -3,7 +3,7 @@
const char *kAsanDefaultOptions="verbosity=1 foo=bar"; const char *kAsanDefaultOptions="verbosity=1 foo=bar";
extern "C" extern "C"
__attribute__((no_address_safety_analysis)) __attribute__((no_sanitize_address))
const char *__asan_default_options() { const char *__asan_default_options() {
return kAsanDefaultOptions; return kAsanDefaultOptions;
} }

View File

@ -36,7 +36,7 @@ typedef __int64 int64_t;
#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) #if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \ # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \
__attribute__((no_address_safety_analysis)) __attribute__((no_sanitize_address))
#else #else
# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
#endif #endif