Commit e664c61c by Konstantin Serebryany Committed by Jakub Jelinek

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
parent 37b5ec8f
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
......
...@@ -2277,7 +2277,7 @@ static bool ...@@ -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));
} }
......
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
......
...@@ -307,6 +307,8 @@ static tree handle_common_attribute (tree *, tree, tree, int, bool *); ...@@ -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[] = ...@@ -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,12 +6510,12 @@ handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args), ...@@ -6505,12 +6510,12 @@ 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, ...@@ -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. */
......
...@@ -2133,7 +2133,8 @@ attributes are currently defined for functions on all targets: ...@@ -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}. ...@@ -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
......
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
......
/* 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) ...@@ -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) ...@@ -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) ...@@ -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" } } */
...@@ -3,7 +3,7 @@ ...@@ -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;
} }
......
...@@ -36,7 +36,7 @@ typedef __int64 int64_t; ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment