summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorygribov <ygribov@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-16 13:48:13 +0000
committerygribov <ygribov@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-16 13:48:13 +0000
commit9718027b32c1a68b2b61e76b022a140902d8d720 (patch)
tree1d8d106092750eced1c901c574986f12042119ff
parentd606eed4e7365787e1aae53c41ff2c21c32733fd (diff)
downloadppe42-gcc-9718027b32c1a68b2b61e76b022a140902d8d720.tar.gz
ppe42-gcc-9718027b32c1a68b2b61e76b022a140902d8d720.zip
Do not instrument first byte in strlen if already instrumented.
2014-10-16 Yury Gribov <y.gribov@samsung.com> Backport from mainline 2014-06-24 Max Ostapenko <m.ostapenko@partner.samsung.com> * asan.c (instrument_strlen_call): Do not instrument first byte in strlen if already instrumented. * c-c++-common/asan/no-redundant-instrumentation-9.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@216327 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/asan.c4
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-9.c13
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2b942b65e95..e7126e0ead2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,14 @@
2014-10-16 Yury Gribov <y.gribov@samsung.com>
Backport from mainline
+ 2014-06-24 Max Ostapenko <m.ostapenko@partner.samsung.com>
+
+ * asan.c (instrument_strlen_call): Do not instrument first byte in strlen
+ if already instrumented.
+
+2014-10-16 Yury Gribov <y.gribov@samsung.com>
+
+ Backport from mainline
2014-06-16 Yury Gribov <y.gribov@samsung.com>
* asan.c (check_func): New function.
diff --git a/gcc/asan.c b/gcc/asan.c
index 06177ac7215..0789ad376df 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -2026,6 +2026,7 @@ instrument_strlen_call (gimple_stmt_iterator *iter)
location_t loc = gimple_location (call);
tree str_arg = gimple_call_arg (call, 0);
+ bool start_instrumented = has_mem_ref_been_instrumented (str_arg, 1);
tree cptr_type = build_pointer_type (char_type_node);
gimple str_arg_ssa =
@@ -2037,7 +2038,8 @@ instrument_strlen_call (gimple_stmt_iterator *iter)
build_check_stmt (loc, gimple_assign_lhs (str_arg_ssa), NULL_TREE, 1, iter,
/*non_zero_len_p*/true, /*before_p=*/true,
- /*is_store=*/false, /*is_scalar_access*/true, /*align*/0);
+ /*is_store=*/false, /*is_scalar_access*/true, /*align*/0,
+ start_instrumented, start_instrumented);
gimple g =
gimple_build_assign_with_ops (POINTER_PLUS_EXPR,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 864a2bd0afd..fede89a95d6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,6 +1,13 @@
2014-10-16 Yury Gribov <y.gribov@samsung.com>
Backport from mainline
+ 2014-06-24 Max Ostapenko <m.ostapenko@partner.samsung.com>
+
+ * c-c++-common/asan/no-redundant-instrumentation-9.c: New test.
+
+2014-10-16 Yury Gribov <y.gribov@samsung.com>
+
+ Backport from mainline
2014-06-16 Yury Gribov <y.gribov@samsung.com>
* c-c++-common/asan/instrument-with-calls-1.c: New test.
diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-9.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-9.c
new file mode 100644
index 00000000000..c6575ad0b94
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-9.c
@@ -0,0 +1,13 @@
+/* { dg-options "-fdump-tree-asan0" } */
+/* { dg-do compile } */
+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
+
+__SIZE_TYPE__
+f (char *a)
+{
+ a[0] = '1';
+ return __builtin_strlen (a);
+}
+
+/* { dg-final { scan-tree-dump-times "__asan_report_load1" 1 "asan0" } } */
+/* { dg-final { cleanup-tree-dump "asan0" } } */
OpenPOWER on IntegriCloud