public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] contrib: Update dg-extract-results.* from gcc
@ 2019-10-21 14:32 Andrew Burgess
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Burgess @ 2019-10-21 14:32 UTC (permalink / raw)
  To: bfd-cvs, gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=66b92822fa721b17c9edfebd10b3017b289be24c

commit 66b92822fa721b17c9edfebd10b3017b289be24c
Author: Andrew Burgess <andrew.burgess@embecosm.com>
Date:   Mon Oct 21 14:52:37 2019 +0100

    contrib: Update dg-extract-results.* from gcc
    
    The dg-extract-results scripts have been updated in the gcc
    repository.  This commit copies the updated versions of the scripts in
    to the binutils-gdb repository.
    
    There are two changes, these are:
    
      1. Improved detection of timeout lines, though I suspect this only
      applies to gcc results, and
    
      2. Detection of KPASS results, this is of interest to gdb, where
      these results would not be included in the final .sum file.
    
    A grep over binutils-gdb shows the dg-extract-results is not used by
    ld, gas, or binutils, however I tested these anyway and saw no changes
    in the final .sum files (tested on x86-64 GNU/Linux).
    
    On gdb when running tests in parallel dg-extract-results is used, and
    the final .sum file now includes the KPASS results.
    
    contrib/ChangeLog:
    
    	* dg-extract-results.py: Update from gcc repo.
    	* dg-extract-results.sh: Likewise.
    
    Change-Id: I54abd07f4e8f5cf88a6db74519674f6939860157

Diff:
---
 contrib/ChangeLog             |  5 +++++
 contrib/dg-extract-results.py | 23 +++++++++++++++++-----
 contrib/dg-extract-results.sh | 44 ++++++++++++++++++++++++++++++++++++-------
 3 files changed, 60 insertions(+), 12 deletions(-)

diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 8ce6765..489af77 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,8 @@
+2019-10-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dg-extract-results.py: Update from gcc repo.
+	* dg-extract-results.sh: Likewise.
+
 2018-08-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
 	* dg-extract-results.sh: Move from gdb/testsuite.
diff --git a/contrib/dg-extract-results.py b/contrib/dg-extract-results.py
index 4b02a5b..7100794 100644
--- a/contrib/dg-extract-results.py
+++ b/contrib/dg-extract-results.py
@@ -117,7 +117,7 @@ class Prog:
         self.tool_re = re.compile (r'^\t\t=== (.*) tests ===$')
         self.result_re = re.compile (r'^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED'
                                      r'|WARNING|ERROR|UNSUPPORTED|UNTESTED'
-                                     r'|KFAIL):\s*(.+)')
+                                     r'|KFAIL|KPASS):\s*(.+)')
         self.completed_re = re.compile (r'.* completed at (.*)')
         # Pieces of text to write at the head of the output.
         # start_line is a pair in which the first element is a datetime
@@ -239,6 +239,7 @@ class Prog:
         harness = None
         segment = None
         final_using = 0
+        has_warning = 0
 
         # If this is the first run for this variation, add any text before
         # the first harness to the header.
@@ -292,10 +293,22 @@ class Prog:
                 # Ugly hack to get the right order for gfortran.
                 if name.startswith ('gfortran.dg/g77/'):
                     name = 'h' + name
-                key = (name, len (harness.results))
-                harness.results.append ((key, line))
-                if not first_key and sort_logs:
-                    first_key = key
+                # If we have a time out warning, make sure it appears
+                # before the following testcase diagnostic: we insert
+                # the testname before 'program' so that sort faces a
+                # list of testnames.
+                if line.startswith ('WARNING: program timed out'):
+                  has_warning = 1
+                else:
+                  if has_warning == 1:
+                      key = (name, len (harness.results))
+                      myline = 'WARNING: %s program timed out.\n' % name
+                      harness.results.append ((key, myline))
+                      has_warning = 0
+                  key = (name, len (harness.results))
+                  harness.results.append ((key, line))
+                  if not first_key and sort_logs:
+                      first_key = key
                 if line.startswith ('ERROR: (DejaGnu)'):
                     for i in range (len (self.count_names)):
                         if 'DejaGnu errors' in self.count_names[i]:
diff --git a/contrib/dg-extract-results.sh b/contrib/dg-extract-results.sh
index 6ee3d26..f948088 100755
--- a/contrib/dg-extract-results.sh
+++ b/contrib/dg-extract-results.sh
@@ -298,6 +298,8 @@ BEGIN {
   cnt=0
   print_using=0
   need_close=0
+  has_timeout=0
+  timeout_cnt=0
 }
 /^EXPFILE: / {
   expfiles[expfileno] = \$2
@@ -324,23 +326,51 @@ BEGIN {
   }
 }
 /^\t\t=== .* ===$/ { curvar = ""; next }
-/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL):/ {
+/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS):/ {
   testname=\$2
   # Ugly hack for gfortran.dg/dg.exp
   if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//)
     testname="h"testname
+  if ("$MODE" == "sum") {
+    if (\$0 ~ /^WARNING: program timed out/) {
+      has_timeout=1
+      timeout_cnt=cnt+1
+    } else {
+      # Prepare timeout replacement message in case it's needed
+      timeout_msg=\$0
+      sub(\$1, "WARNING:", timeout_msg)
+    }
+  }
 }
 /^$/ { if ("$MODE" == "sum") next }
 { if (variant == curvar && curfile) {
     if ("$MODE" == "sum") {
-      printf "%s %08d|", testname, cnt >> curfile
-      cnt = cnt + 1
+      # Do not print anything if the current line is a timeout
+      if (has_timeout == 0) {
+	# If the previous line was a timeout,
+	# insert the full current message without keyword
+	if (timeout_cnt != 0) {
+	  printf "%s %08d|%s program timed out.\n", testname, timeout_cnt-1, timeout_msg >> curfile
+	  timeout_cnt = 0
+	  cnt = cnt + 1
+	}
+	printf "%s %08d|", testname, cnt >> curfile
+	cnt = cnt + 1
+	filewritten[curfile]=1
+	need_close=1
+	print >> curfile
+      }
+      has_timeout=0
+    } else {
+      filewritten[curfile]=1
+      need_close=1
+      print >> curfile
     }
-    filewritten[curfile]=1
-    need_close=1
-    print >> curfile
-  } else
+  } else {
+    has_timeout=0
+    timeout_cnt=0
     next
+  }
 }
 END {
   n=1


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

* [binutils-gdb] contrib: Update dg-extract-results.* from gcc
@ 2020-05-15 10:42 Andrew Burgess
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Burgess @ 2020-05-15 10:42 UTC (permalink / raw)
  To: bfd-cvs, gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c959562d9ba0b2eaf240c601b2c2fd49c42c1f2f

commit c959562d9ba0b2eaf240c601b2c2fd49c42c1f2f
Author: Andrew Burgess <andrew.burgess@embecosm.com>
Date:   Fri May 15 11:23:59 2020 +0100

    contrib: Update dg-extract-results.* from gcc
    
    Pull the latest version of the dg-extract-results.* scripts from the
    gcc repository.  This picks up this commit from gcc:
    
      commit c9a41202b272b0b3a3c64a96ef4a5a97579eb017
      Date:   Mon May 11 22:32:35 2020 +0100
    
      contrib: Handle GDB specific test result types
    
      This commit is for the benefit of GDB, but as the binutils-gdb
      repository shares the contrib/ directory with gcc, this commit must
      first be applied to gcc then copied back to binutils-gdb.
    
      This commit extends the two scripts contrib/dg-extract-results.{py,sh}
      to handle some new, GDB specific test result types.  These test
      results types should never appear in GCC, or any other tool that
      shares the contrib/ directly, so this change should be harmless.
    
      In this patch series:
        https://sourceware.org/pipermail/gdb-patches/2020-April/167847.html
      changes were made in GDB's use of Dejagnu so that two additional
      conditions could be detected, these are:
    
        1. Test names that contain either the build or source paths.  Such
        test names make it difficult to compare the results of two test runs
        of GDB from two different directories, and
    
        2. Duplicate test names.  Duplicates make it difficult to track down
        exactly which test has failed.
    
      When running Dejagnu on GDB we can now (sometimes) see two additional
      test result types matching the above conditions, these are '# of paths
      in test names' and '# of duplicate test names'.
    
      If the test is run in parallel mode (make -j...) then these extra test
      results will appear in the individual test summary files, but are not
      merged into the final summary file.
    
      Additionally, within the summary file there are now two new types of
      test summary line, these are 'PATH: ...' and 'DUPLICATE: ...', these
      allow users to quickly search the test summary to track down where the
      offending test names are.  These lines are similarly not merged into
      the unified gdb.sum file after a parallel test run.
    
      This commit extends the dg-extract-results.* scripts to calculate the
      totals for the two new result types, and to copy the new test summary
      lines into the unified summary file.
    
    contrib/ChangeLog:
    
            * dg-extract-results.py: Update from gcc repo.
            * dg-extract-results.sh: Likewise.

Diff:
---
 contrib/ChangeLog             |  5 +++++
 contrib/dg-extract-results.py |  6 ++++--
 contrib/dg-extract-results.sh | 12 +++++++++++-
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 489af77445f..b2867e67b4b 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,8 @@
+2020-05-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* dg-extract-results.py: Update from gcc repo.
+	* dg-extract-results.sh: Likewise.
+
 2019-10-21  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* dg-extract-results.py: Update from gcc repo.
diff --git a/contrib/dg-extract-results.py b/contrib/dg-extract-results.py
index 7100794d42a..30aa68771d4 100644
--- a/contrib/dg-extract-results.py
+++ b/contrib/dg-extract-results.py
@@ -117,7 +117,7 @@ class Prog:
         self.tool_re = re.compile (r'^\t\t=== (.*) tests ===$')
         self.result_re = re.compile (r'^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED'
                                      r'|WARNING|ERROR|UNSUPPORTED|UNTESTED'
-                                     r'|KFAIL|KPASS):\s*(.+)')
+                                     r'|KFAIL|KPASS|PATH|DUPLICATE):\s*(.+)')
         self.completed_re = re.compile (r'.* completed at (.*)')
         # Pieces of text to write at the head of the output.
         # start_line is a pair in which the first element is a datetime
@@ -143,7 +143,9 @@ class Prog:
             '# of known failures\t\t',
             '# of untested testcases\t\t',
             '# of unresolved testcases\t',
-            '# of unsupported tests\t\t'
+            '# of unsupported tests\t\t',
+            '# of paths in test names\t',
+            '# of duplicate test names\t'
         ]
         self.runs = dict()
 
diff --git a/contrib/dg-extract-results.sh b/contrib/dg-extract-results.sh
index f948088370e..ff6c50d029c 100755
--- a/contrib/dg-extract-results.sh
+++ b/contrib/dg-extract-results.sh
@@ -326,7 +326,7 @@ BEGIN {
   }
 }
 /^\t\t=== .* ===$/ { curvar = ""; next }
-/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS):/ {
+/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS|PATH|DUPLICATE):/ {
   testname=\$2
   # Ugly hack for gfortran.dg/dg.exp
   if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//)
@@ -400,6 +400,7 @@ BEGIN {
   variant="$VAR"
   tool="$TOOL"
   passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kpasscnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0;
+  pathcnt=0; dupcnt=0
   curvar=""; insummary=0
 }
 /^Running target /		{ curvar = \$3; next }
@@ -414,6 +415,8 @@ BEGIN {
 /^# of untested testcases/	{ if (insummary == 1) untstcnt += \$5; next; }
 /^# of unresolved testcases/	{ if (insummary == 1) unrescnt += \$5; next; }
 /^# of unsupported tests/	{ if (insummary == 1) unsupcnt += \$5; next; }
+/^# of paths in test names/	{ if (insummary == 1) pathcnt += \$7; next; }
+/^# of duplicate test names/	{ if (insummary == 1) dupcnt += \$6; next; }
 /^$/				{ if (insummary == 1)
 				    { insummary = 0; curvar = "" }
 				  next
@@ -431,6 +434,8 @@ END {
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+  if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt)
+  if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt)
 }
 EOF
 
@@ -452,6 +457,7 @@ cat << EOF > $TOTAL_AWK
 BEGIN {
   tool="$TOOL"
   passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0
+  pathcnt=0; dupcnt=0
 }
 /^# of DejaGnu errors/		{ dgerrorcnt += \$5 }
 /^# of expected passes/		{ passcnt += \$5 }
@@ -463,6 +469,8 @@ BEGIN {
 /^# of untested testcases/	{ untstcnt += \$5 }
 /^# of unresolved testcases/	{ unrescnt += \$5 }
 /^# of unsupported tests/	{ unsupcnt += \$5 }
+/^# of paths in test names/	{ pathcnt += \$7 }
+/^# of duplicate test names/	{ dupcnt += \$6 }
 END {
   printf ("\n\t\t=== %s Summary ===\n\n", tool)
   if (dgerrorcnt != 0) printf ("# of DejaGnu errors\t\t%d\n", dgerrorcnt)
@@ -475,6 +483,8 @@ END {
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+  if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt)
+  if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt)
 }
 EOF


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

end of thread, other threads:[~2020-05-15 10:42 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-21 14:32 [binutils-gdb] contrib: Update dg-extract-results.* from gcc Andrew Burgess
2020-05-15 10:42 Andrew Burgess

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).