public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] asan: Don't check frame numbers in the testsuite
@ 2016-04-28 15:57 Segher Boessenkool
  2016-04-28 16:03 ` Jakub Jelinek
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Segher Boessenkool @ 2016-04-28 15:57 UTC (permalink / raw)
  To: gcc-patches; +Cc: Segher Boessenkool

On various PowerPC configurations, the top frame is often mentioned
twice in the backtrace, making many asan tests fail.  I see no particular
reason the asan tests want to check the frame number, so this patch
makes it check for " #. " instead of " #1 ", etc., in all of the
c-c++-common/asan tests.

Tested on powerpc64-linux, also -m32; is this okay for trunk?


Segher


2016-04-28  Segher Boessenkool  <segher@kernel.crashing.org>

gcc/testsuite/
	* c-c++-common/asan/global-overflow-1.c: Don't check frame numbers.
	* c-c++-common/asan/heap-overflow-1.c: Ditto.
	* c-c++-common/asan/memcmp-1.c: Ditto.
	* c-c++-common/asan/misalign-1.c: Ditto.
	* c-c++-common/asan/misalign-2.c: Ditto.
	* c-c++-common/asan/null-deref-1.c: Ditto.
	* c-c++-common/asan/pr64820.c: Ditto.
	* c-c++-common/asan/sanity-check-pure-c-1.c: Ditto.
	* c-c++-common/asan/stack-overflow-1.c: Ditto.
	* c-c++-common/asan/strip-path-prefix-1.c: Ditto.
	* c-c++-common/asan/strlen-overflow-1.c: Ditto.
	* c-c++-common/asan/strncpy-overflow-1.c: Ditto.
	* c-c++-common/asan/use-after-free-1.c: Ditto.
	* c-c++-common/asan/use-after-return-1.c: Ditto.

---
 gcc/testsuite/c-c++-common/asan/global-overflow-1.c     |  2 +-
 gcc/testsuite/c-c++-common/asan/heap-overflow-1.c       |  6 +++---
 gcc/testsuite/c-c++-common/asan/memcmp-1.c              |  4 ++--
 gcc/testsuite/c-c++-common/asan/misalign-1.c            |  4 ++--
 gcc/testsuite/c-c++-common/asan/misalign-2.c            |  4 ++--
 gcc/testsuite/c-c++-common/asan/null-deref-1.c          |  4 ++--
 gcc/testsuite/c-c++-common/asan/pr64820.c               |  2 +-
 gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c |  8 ++++----
 gcc/testsuite/c-c++-common/asan/stack-overflow-1.c      |  2 +-
 gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c   |  2 +-
 gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c     |  2 +-
 gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c    |  8 ++++----
 gcc/testsuite/c-c++-common/asan/use-after-free-1.c      | 10 +++++-----
 gcc/testsuite/c-c++-common/asan/use-after-return-1.c    |  2 +-
 14 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/gcc/testsuite/c-c++-common/asan/global-overflow-1.c b/gcc/testsuite/c-c++-common/asan/global-overflow-1.c
index 8dd75df..6a659c8 100644
--- a/gcc/testsuite/c-c++-common/asan/global-overflow-1.c
+++ b/gcc/testsuite/c-c++-common/asan/global-overflow-1.c
@@ -23,6 +23,6 @@ int main() {
 }
 
 /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*global-overflow-1.c:20|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r).*" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*global-overflow-1.c:20|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r).*" } */
 /* { dg-output "0x\[0-9a-f\]+ is located 0 bytes to the right of global variable" } */
 /* { dg-output ".*YYY\[^\n\r]* of size 10\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c b/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
index 0377a6c..e7c0ba5 100644
--- a/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
+++ b/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
@@ -24,8 +24,8 @@ int main(int argc, char **argv) {
 }
 
 /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:21|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:21|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 10-byte region\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:19|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:19|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/memcmp-1.c b/gcc/testsuite/c-c++-common/asan/memcmp-1.c
index 5915988..5a36353 100644
--- a/gcc/testsuite/c-c++-common/asan/memcmp-1.c
+++ b/gcc/testsuite/c-c++-common/asan/memcmp-1.c
@@ -16,5 +16,5 @@ main ()
 }
 
 /* { dg-output "ERROR: AddressSanitizer: stack-buffer-overflow.*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)memcmp|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)memcmp|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/misalign-1.c b/gcc/testsuite/c-c++-common/asan/misalign-1.c
index f1cca16..c640aa2 100644
--- a/gcc/testsuite/c-c++-common/asan/misalign-1.c
+++ b/gcc/testsuite/c-c++-common/asan/misalign-1.c
@@ -39,5 +39,5 @@ main ()
 /* { dg-output "ERROR: AddressSanitizer:\[^\n\r]*on address\[^\n\r]*" } */
 /* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*foo(\[^\n\r]*misalign-1.c:1\[01]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-1.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*foo(\[^\n\r]*misalign-1.c:1\[01]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-1.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/misalign-2.c b/gcc/testsuite/c-c++-common/asan/misalign-2.c
index 9f400b4..d52da1e 100644
--- a/gcc/testsuite/c-c++-common/asan/misalign-2.c
+++ b/gcc/testsuite/c-c++-common/asan/misalign-2.c
@@ -39,5 +39,5 @@ main ()
 /* { dg-output "ERROR: AddressSanitizer:\[^\n\r]*on address\[^\n\r]*" } */
 /* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*baz(\[^\n\r]*misalign-2.c:2\[23]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-2.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*baz(\[^\n\r]*misalign-2.c:2\[23]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-2.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/null-deref-1.c b/gcc/testsuite/c-c++-common/asan/null-deref-1.c
index 45d35ac..29acbcb 100644
--- a/gcc/testsuite/c-c++-common/asan/null-deref-1.c
+++ b/gcc/testsuite/c-c++-common/asan/null-deref-1.c
@@ -18,5 +18,5 @@ int main()
 
 /* { dg-output "ERROR: AddressSanitizer:? SEGV on unknown address\[^\n\r]*" } */
 /* { dg-output "0x\[0-9a-f\]+ \[^\n\r]*pc 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "\[^\n\r]*    #0 0x\[0-9a-f\]+ +(in \[^\n\r]*NullDeref\[^\n\r]* (\[^\n\r]*null-deref-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*null-deref-1.c:15|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*    #. 0x\[0-9a-f\]+ +(in \[^\n\r]*NullDeref\[^\n\r]* (\[^\n\r]*null-deref-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*null-deref-1.c:15|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/pr64820.c b/gcc/testsuite/c-c++-common/asan/pr64820.c
index 885a662..213bccc 100644
--- a/gcc/testsuite/c-c++-common/asan/pr64820.c
+++ b/gcc/testsuite/c-c++-common/asan/pr64820.c
@@ -26,6 +26,6 @@ int main(int argc, char **argv) {
 
 /* { dg-output "AddressSanitizer: stack-use-after-return on address 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "WRITE of size 1 at .* thread T0.*" } */
-/* { dg-output "    #0.*(Func2)?.*pr64820.(c:21)?.*" } */
+/* { dg-output "    #..*(Func2)?.*pr64820.(c:21)?.*" } */
 /* { dg-output "is located in stack of thread T0 at offset.*" } */
 /* { dg-output "\'local\' <== Memory access at offset 32 is inside this variable" } */
diff --git a/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c b/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c
index 219fcf8..0ba3349 100644
--- a/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c
+++ b/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c
@@ -10,7 +10,7 @@ int main() {
 }
 
 /* { dg-output "heap-use-after-free.*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 \[^\n\r]*(in _*(interceptor_|wrap_)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 \[^\n\r]*(in _*(interceptor_|wrap_)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. \[^\n\r]*(in _*(interceptor_|wrap_)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. \[^\n\r]*(in _*(interceptor_|wrap_)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c b/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c
index 34d6aab..8310514 100644
--- a/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c
+++ b/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c
@@ -18,6 +18,6 @@ int main() {
 }
 
 /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*stack-overflow-1.c:16|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*stack-overflow-1.c:16|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*Address 0x\[0-9a-f\]+ is located in stack of thread T0.*(\n|\r\n|\r)" */
 /* { dg-output "\[^\n\r]*in main.*stack-overflow-1.c.*(\n|\r\n|\r)" */
diff --git a/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c b/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c
index 812aa37..311eace 100644
--- a/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c
+++ b/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c
@@ -12,4 +12,4 @@ int main() {
 }
 
 /* { dg-output "heap-use-after-free.*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ \[(\]?\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ \[(\]?\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c b/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c
index 86a79fd..3541b36 100644
--- a/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c
+++ b/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c
@@ -20,5 +20,5 @@ int main () {
 }
 
 /* { dg-output "READ of size 2 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strlen-overflow-1.c:19|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strlen-overflow-1.c:19|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of global variable" } */
diff --git a/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c b/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c
index 45759ae..83a996b 100644
--- a/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c
+++ b/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c
@@ -13,9 +13,9 @@ int main(int argc, char **argv) {
 }
 
 /* { dg-output "WRITE of size \[0-9\]* at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)strncpy|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:11|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)strncpy|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:11|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 9-byte region\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/use-after-free-1.c b/gcc/testsuite/c-c++-common/asan/use-after-free-1.c
index 75d8f9f..b03b765 100644
--- a/gcc/testsuite/c-c++-common/asan/use-after-free-1.c
+++ b/gcc/testsuite/c-c++-common/asan/use-after-free-1.c
@@ -12,11 +12,11 @@ int main() {
 /* { dg-output "ERROR: AddressSanitizer:? heap-use-after-free on address\[^\n\r]*" } */
 /* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*READ of size 1 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:9|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:9|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 5 bytes inside of 10-byte region .0x\[0-9a-f\]+,0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*freed by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "\[^\n\r]*previously allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/use-after-return-1.c b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c
index 49933e5..f764a810 100644
--- a/gcc/testsuite/c-c++-common/asan/use-after-return-1.c
+++ b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c
@@ -48,6 +48,6 @@ int main(int argc, char **argv) {
 }
 
 /* { dg-output "WRITE of size 1 at .* thread T0.*" } */
-/* { dg-output "    #0.*(Func2)?.*use-after-return-1.(c:31)?.*" } */
+/* { dg-output "    #..*(Func2)?.*use-after-return-1.(c:31)?.*" } */
 /* { dg-output "is located in stack of thread T0 at offset.*" } */
 /* { dg-output "\'local\' <== Memory access at offset 32 is inside this variable" } */
-- 
1.9.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] asan: Don't check frame numbers in the testsuite
  2016-04-28 15:57 [PATCH] asan: Don't check frame numbers in the testsuite Segher Boessenkool
@ 2016-04-28 16:03 ` Jakub Jelinek
  2016-04-28 16:32   ` Segher Boessenkool
  2016-04-28 16:04 ` Yury Gribov
  2016-04-28 16:05 ` Jeff Law
  2 siblings, 1 reply; 5+ messages in thread
From: Jakub Jelinek @ 2016-04-28 16:03 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: gcc-patches

On Thu, Apr 28, 2016 at 03:57:38PM +0000, Segher Boessenkool wrote:
> On various PowerPC configurations, the top frame is often mentioned
> twice in the backtrace, making many asan tests fail.  I see no particular
> reason the asan tests want to check the frame number, so this patch
> makes it check for " #. " instead of " #1 ", etc., in all of the
> c-c++-common/asan tests.

Wouldn't it be better to fix the backtrace stuff for PowerPC, so that
the top frame is not mentioned twice when it shouldn't?
I mean, if it annoys the tests (where IMHO it is still useful to test
the numbers, to avoid e.g. having some unrelated frames being printed first
or bugs like this to be caught), it will annoy users as well.

	Jakub

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] asan: Don't check frame numbers in the testsuite
  2016-04-28 15:57 [PATCH] asan: Don't check frame numbers in the testsuite Segher Boessenkool
  2016-04-28 16:03 ` Jakub Jelinek
@ 2016-04-28 16:04 ` Yury Gribov
  2016-04-28 16:05 ` Jeff Law
  2 siblings, 0 replies; 5+ messages in thread
From: Yury Gribov @ 2016-04-28 16:04 UTC (permalink / raw)
  To: Segher Boessenkool, gcc-patches

On 04/28/2016 06:57 PM, Segher Boessenkool wrote:
> On various PowerPC configurations, the top frame is often mentioned
> twice in the backtrace, making many asan tests fail.  I see no particular
> reason the asan tests want to check the frame number, so this patch
> makes it check for " #. " instead of " #1 ", etc., in all of the
> c-c++-common/asan tests.

Why not fix libbacktrace though?

> Tested on powerpc64-linux, also -m32; is this okay for trunk?
>
>
> Segher
>
>
> 2016-04-28  Segher Boessenkool  <segher@kernel.crashing.org>
>
> gcc/testsuite/
> 	* c-c++-common/asan/global-overflow-1.c: Don't check frame numbers.
> 	* c-c++-common/asan/heap-overflow-1.c: Ditto.
> 	* c-c++-common/asan/memcmp-1.c: Ditto.
> 	* c-c++-common/asan/misalign-1.c: Ditto.
> 	* c-c++-common/asan/misalign-2.c: Ditto.
> 	* c-c++-common/asan/null-deref-1.c: Ditto.
> 	* c-c++-common/asan/pr64820.c: Ditto.
> 	* c-c++-common/asan/sanity-check-pure-c-1.c: Ditto.
> 	* c-c++-common/asan/stack-overflow-1.c: Ditto.
> 	* c-c++-common/asan/strip-path-prefix-1.c: Ditto.
> 	* c-c++-common/asan/strlen-overflow-1.c: Ditto.
> 	* c-c++-common/asan/strncpy-overflow-1.c: Ditto.
> 	* c-c++-common/asan/use-after-free-1.c: Ditto.
> 	* c-c++-common/asan/use-after-return-1.c: Ditto.
>
> ---
>   gcc/testsuite/c-c++-common/asan/global-overflow-1.c     |  2 +-
>   gcc/testsuite/c-c++-common/asan/heap-overflow-1.c       |  6 +++---
>   gcc/testsuite/c-c++-common/asan/memcmp-1.c              |  4 ++--
>   gcc/testsuite/c-c++-common/asan/misalign-1.c            |  4 ++--
>   gcc/testsuite/c-c++-common/asan/misalign-2.c            |  4 ++--
>   gcc/testsuite/c-c++-common/asan/null-deref-1.c          |  4 ++--
>   gcc/testsuite/c-c++-common/asan/pr64820.c               |  2 +-
>   gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c |  8 ++++----
>   gcc/testsuite/c-c++-common/asan/stack-overflow-1.c      |  2 +-
>   gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c   |  2 +-
>   gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c     |  2 +-
>   gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c    |  8 ++++----
>   gcc/testsuite/c-c++-common/asan/use-after-free-1.c      | 10 +++++-----
>   gcc/testsuite/c-c++-common/asan/use-after-return-1.c    |  2 +-
>   14 files changed, 30 insertions(+), 30 deletions(-)
>
> diff --git a/gcc/testsuite/c-c++-common/asan/global-overflow-1.c b/gcc/testsuite/c-c++-common/asan/global-overflow-1.c
> index 8dd75df..6a659c8 100644
> --- a/gcc/testsuite/c-c++-common/asan/global-overflow-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/global-overflow-1.c
> @@ -23,6 +23,6 @@ int main() {
>   }
>
>   /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*global-overflow-1.c:20|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r).*" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*global-overflow-1.c:20|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r).*" } */
>   /* { dg-output "0x\[0-9a-f\]+ is located 0 bytes to the right of global variable" } */
>   /* { dg-output ".*YYY\[^\n\r]* of size 10\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c b/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
> index 0377a6c..e7c0ba5 100644
> --- a/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
> @@ -24,8 +24,8 @@ int main(int argc, char **argv) {
>   }
>
>   /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:21|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:21|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 10-byte region\[^\n\r]*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:19|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:19|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/memcmp-1.c b/gcc/testsuite/c-c++-common/asan/memcmp-1.c
> index 5915988..5a36353 100644
> --- a/gcc/testsuite/c-c++-common/asan/memcmp-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/memcmp-1.c
> @@ -16,5 +16,5 @@ main ()
>   }
>
>   /* { dg-output "ERROR: AddressSanitizer: stack-buffer-overflow.*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)memcmp|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)memcmp|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/misalign-1.c b/gcc/testsuite/c-c++-common/asan/misalign-1.c
> index f1cca16..c640aa2 100644
> --- a/gcc/testsuite/c-c++-common/asan/misalign-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/misalign-1.c
> @@ -39,5 +39,5 @@ main ()
>   /* { dg-output "ERROR: AddressSanitizer:\[^\n\r]*on address\[^\n\r]*" } */
>   /* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*foo(\[^\n\r]*misalign-1.c:1\[01]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-1.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*foo(\[^\n\r]*misalign-1.c:1\[01]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-1.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/misalign-2.c b/gcc/testsuite/c-c++-common/asan/misalign-2.c
> index 9f400b4..d52da1e 100644
> --- a/gcc/testsuite/c-c++-common/asan/misalign-2.c
> +++ b/gcc/testsuite/c-c++-common/asan/misalign-2.c
> @@ -39,5 +39,5 @@ main ()
>   /* { dg-output "ERROR: AddressSanitizer:\[^\n\r]*on address\[^\n\r]*" } */
>   /* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*baz(\[^\n\r]*misalign-2.c:2\[23]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-2.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*baz(\[^\n\r]*misalign-2.c:2\[23]|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*misalign-2.c:3\[45]|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/null-deref-1.c b/gcc/testsuite/c-c++-common/asan/null-deref-1.c
> index 45d35ac..29acbcb 100644
> --- a/gcc/testsuite/c-c++-common/asan/null-deref-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/null-deref-1.c
> @@ -18,5 +18,5 @@ int main()
>
>   /* { dg-output "ERROR: AddressSanitizer:? SEGV on unknown address\[^\n\r]*" } */
>   /* { dg-output "0x\[0-9a-f\]+ \[^\n\r]*pc 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "\[^\n\r]*    #0 0x\[0-9a-f\]+ +(in \[^\n\r]*NullDeref\[^\n\r]* (\[^\n\r]*null-deref-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*null-deref-1.c:15|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "\[^\n\r]*    #. 0x\[0-9a-f\]+ +(in \[^\n\r]*NullDeref\[^\n\r]* (\[^\n\r]*null-deref-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*null-deref-1.c:15|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/pr64820.c b/gcc/testsuite/c-c++-common/asan/pr64820.c
> index 885a662..213bccc 100644
> --- a/gcc/testsuite/c-c++-common/asan/pr64820.c
> +++ b/gcc/testsuite/c-c++-common/asan/pr64820.c
> @@ -26,6 +26,6 @@ int main(int argc, char **argv) {
>
>   /* { dg-output "AddressSanitizer: stack-use-after-return on address 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
>   /* { dg-output "WRITE of size 1 at .* thread T0.*" } */
> -/* { dg-output "    #0.*(Func2)?.*pr64820.(c:21)?.*" } */
> +/* { dg-output "    #..*(Func2)?.*pr64820.(c:21)?.*" } */
>   /* { dg-output "is located in stack of thread T0 at offset.*" } */
>   /* { dg-output "\'local\' <== Memory access at offset 32 is inside this variable" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c b/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c
> index 219fcf8..0ba3349 100644
> --- a/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/sanity-check-pure-c-1.c
> @@ -10,7 +10,7 @@ int main() {
>   }
>
>   /* { dg-output "heap-use-after-free.*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 \[^\n\r]*(in _*(interceptor_|wrap_)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 \[^\n\r]*(in _*(interceptor_|wrap_)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. \[^\n\r]*(in _*(interceptor_|wrap_)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. \[^\n\r]*(in _*(interceptor_|wrap_)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. \[^\n\r]*(in _*main (\[^\n\r]*sanity-check-pure-c-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c b/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c
> index 34d6aab..8310514 100644
> --- a/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c
> @@ -18,6 +18,6 @@ int main() {
>   }
>
>   /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*stack-overflow-1.c:16|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*stack-overflow-1.c:16|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*Address 0x\[0-9a-f\]+ is located in stack of thread T0.*(\n|\r\n|\r)" */
>   /* { dg-output "\[^\n\r]*in main.*stack-overflow-1.c.*(\n|\r\n|\r)" */
> diff --git a/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c b/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c
> index 812aa37..311eace 100644
> --- a/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c
> @@ -12,4 +12,4 @@ int main() {
>   }
>
>   /* { dg-output "heap-use-after-free.*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ \[(\]?\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ \[(\]?\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c b/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c
> index 86a79fd..3541b36 100644
> --- a/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c
> @@ -20,5 +20,5 @@ int main () {
>   }
>
>   /* { dg-output "READ of size 2 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strlen-overflow-1.c:19|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strlen-overflow-1.c:19|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of global variable" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c b/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c
> index 45759ae..83a996b 100644
> --- a/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c
> @@ -13,9 +13,9 @@ int main(int argc, char **argv) {
>   }
>
>   /* { dg-output "WRITE of size \[0-9\]* at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)strncpy|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:11|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)strncpy|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:11|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 9-byte region\[^\n\r]*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/use-after-free-1.c b/gcc/testsuite/c-c++-common/asan/use-after-free-1.c
> index 75d8f9f..b03b765 100644
> --- a/gcc/testsuite/c-c++-common/asan/use-after-free-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/use-after-free-1.c
> @@ -12,11 +12,11 @@ int main() {
>   /* { dg-output "ERROR: AddressSanitizer:? heap-use-after-free on address\[^\n\r]*" } */
>   /* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*READ of size 1 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:9|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:9|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 5 bytes inside of 10-byte region .0x\[0-9a-f\]+,0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*freed by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
>   /* { dg-output "\[^\n\r]*previously allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> -/* { dg-output "    #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> +/* { dg-output "    #. 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*use-after-free-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
> diff --git a/gcc/testsuite/c-c++-common/asan/use-after-return-1.c b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c
> index 49933e5..f764a810 100644
> --- a/gcc/testsuite/c-c++-common/asan/use-after-return-1.c
> +++ b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c
> @@ -48,6 +48,6 @@ int main(int argc, char **argv) {
>   }
>
>   /* { dg-output "WRITE of size 1 at .* thread T0.*" } */
> -/* { dg-output "    #0.*(Func2)?.*use-after-return-1.(c:31)?.*" } */
> +/* { dg-output "    #..*(Func2)?.*use-after-return-1.(c:31)?.*" } */
>   /* { dg-output "is located in stack of thread T0 at offset.*" } */
>   /* { dg-output "\'local\' <== Memory access at offset 32 is inside this variable" } */
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] asan: Don't check frame numbers in the testsuite
  2016-04-28 15:57 [PATCH] asan: Don't check frame numbers in the testsuite Segher Boessenkool
  2016-04-28 16:03 ` Jakub Jelinek
  2016-04-28 16:04 ` Yury Gribov
@ 2016-04-28 16:05 ` Jeff Law
  2 siblings, 0 replies; 5+ messages in thread
From: Jeff Law @ 2016-04-28 16:05 UTC (permalink / raw)
  To: Segher Boessenkool, gcc-patches

On 04/28/2016 09:57 AM, Segher Boessenkool wrote:
> On various PowerPC configurations, the top frame is often mentioned
> twice in the backtrace, making many asan tests fail.  I see no particular
> reason the asan tests want to check the frame number, so this patch
> makes it check for " #. " instead of " #1 ", etc., in all of the
> c-c++-common/asan tests.
>
> Tested on powerpc64-linux, also -m32; is this okay for trunk?
>
>
> Segher
>
>
> 2016-04-28  Segher Boessenkool  <segher@kernel.crashing.org>
>
> gcc/testsuite/
> 	* c-c++-common/asan/global-overflow-1.c: Don't check frame numbers.
> 	* c-c++-common/asan/heap-overflow-1.c: Ditto.
> 	* c-c++-common/asan/memcmp-1.c: Ditto.
> 	* c-c++-common/asan/misalign-1.c: Ditto.
> 	* c-c++-common/asan/misalign-2.c: Ditto.
> 	* c-c++-common/asan/null-deref-1.c: Ditto.
> 	* c-c++-common/asan/pr64820.c: Ditto.
> 	* c-c++-common/asan/sanity-check-pure-c-1.c: Ditto.
> 	* c-c++-common/asan/stack-overflow-1.c: Ditto.
> 	* c-c++-common/asan/strip-path-prefix-1.c: Ditto.
> 	* c-c++-common/asan/strlen-overflow-1.c: Ditto.
> 	* c-c++-common/asan/strncpy-overflow-1.c: Ditto.
> 	* c-c++-common/asan/use-after-free-1.c: Ditto.
> 	* c-c++-common/asan/use-after-return-1.c: Ditto.
One could argue that testing the frame numbers tests is a QofI test for 
our backtrace generation and is thus valid.

Has anyone looked into fixing the unwinder so that we're not getting 
duplicate frames?

I'd rather not dumb down the test since it is showing a real issue.

jeff


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] asan: Don't check frame numbers in the testsuite
  2016-04-28 16:03 ` Jakub Jelinek
@ 2016-04-28 16:32   ` Segher Boessenkool
  0 siblings, 0 replies; 5+ messages in thread
From: Segher Boessenkool @ 2016-04-28 16:32 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches

On Thu, Apr 28, 2016 at 06:03:38PM +0200, Jakub Jelinek wrote:
> On Thu, Apr 28, 2016 at 03:57:38PM +0000, Segher Boessenkool wrote:
> > On various PowerPC configurations, the top frame is often mentioned
> > twice in the backtrace, making many asan tests fail.  I see no particular
> > reason the asan tests want to check the frame number, so this patch
> > makes it check for " #. " instead of " #1 ", etc., in all of the
> > c-c++-common/asan tests.
> 
> Wouldn't it be better to fix the backtrace stuff for PowerPC, so that
> the top frame is not mentioned twice when it shouldn't?

Yes, but should this cause over a hundred asan tests to fail?  The actual
things those tests test work fine, just the backtrace is a little funny
(and people are used to that, things have worked this way for as long as
I can remember -- maybe it even cannot be fixed?).

> I mean, if it annoys the tests (where IMHO it is still useful to test
> the numbers, to avoid e.g. having some unrelated frames being printed first
> or bugs like this to be caught), it will annoy users as well.

How about I leave #0 in place, only replace #1 etc. by #. ?


Segher

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-04-28 16:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-28 15:57 [PATCH] asan: Don't check frame numbers in the testsuite Segher Boessenkool
2016-04-28 16:03 ` Jakub Jelinek
2016-04-28 16:32   ` Segher Boessenkool
2016-04-28 16:04 ` Yury Gribov
2016-04-28 16:05 ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).