Patchwork [7/9] testsuite: Add replay logging to GDBSERVER_DEBUG

login
register
mail settings
Submitter Alan Hayward
Date May 14, 2019, 3:12 p.m.
Message ID <20190514151238.8765-8-alan.hayward@arm.com>
Download mbox | patch
Permalink /patch/32682/
State New
Headers show

Comments

Alan Hayward - May 14, 2019, 3:12 p.m.
Add "replay" to the list of GDBSERVER_DEBUG options.  This will
cause a gdbserver.replay file to be written to the test output
directory.

At the same time switch this to a comma separated list in order
to easily handle all possible options.

The replay log is created by GDB, but has been added to
GDBSERVER_DEBUG as it is only required for gdbserver tests. To
enable it, the gdb_debug_init is overridden to allow the additional
checking, before calling the original function.

2019-05-14  Alan Hayward  <alan.hayward@arm.com>

        * README (Testsuite Parameters): Add replay logging to
        GDBSERVER_DEBUG.
        (gdbserver,debug): Refer to GDBSERVER_DEBUG.
        * lib/gdbserver-support.exp (gdbserver_start): Treat gdbserverdebug
        as a comma separated list.
        (gdb_debug_init): Override procedure.
---
 gdb/testsuite/README                    | 21 +++++----
 gdb/testsuite/lib/gdbserver-support.exp | 59 ++++++++++++++++++++-----
 2 files changed, 59 insertions(+), 21 deletions(-)

-- 
2.20.1 (Apple Git-117)
Tom Tromey - May 16, 2019, 7:34 p.m.
>>>>> "Alan" == Alan Hayward <Alan.Hayward@arm.com> writes:

Alan> 2019-05-14  Alan Hayward  <alan.hayward@arm.com>

Alan>         * README (Testsuite Parameters): Add replay logging to
Alan>         GDBSERVER_DEBUG.
Alan>         (gdbserver,debug): Refer to GDBSERVER_DEBUG.
Alan>         * lib/gdbserver-support.exp (gdbserver_start): Treat gdbserverdebug
Alan>         as a comma separated list.
Alan>         (gdb_debug_init): Override procedure.

Thanks, this looks to me.

Tom

Patch

diff --git a/gdb/testsuite/README b/gdb/testsuite/README

index 43f35a9d4bd..98fc8d1b852 100644

--- a/gdb/testsuite/README

+++ b/gdb/testsuite/README

@@ -304,14 +304,16 @@  For example, to turn on debugging for infrun and target, you can do:

 
 GDBSERVER_DEBUG
 
-When set gdbserver debug is sent to the file gdbserver.debug in the test

-output directory.  Valid values are:

-	debug  - turn on gdbserver debug.

-	remote - turn on gdbserver remote debug.

-	all - turn on all the above debug options.

-For example, to turn on all gdbserver debugging, you can do:

+When set gdbserver debug is sent to the a file in the test output directory.

+It should be set to a comma separated list of the following options:

+	debug  - write gdbserver debug to gdbserver.debug.

+	remote - write gdbserver remote debug to gdbserver.debug.

+	replay - write a replay log to the file gdbserver.replay for use

+		 with gdbreplay.

+Alternatively, it can be set to "all" to turn on all the above

+For example, to turn on gdbserver debugging, you can do:

 
-	make check GDBSERVER_DEBUG=all

+	make check GDBSERVER_DEBUG="debug,replay"

 
 Race detection
 **************
@@ -527,10 +529,7 @@  gdb,debug

 gdbserver,debug
 
   When set gdbserver debug is sent to the file gdbserver.debug in the test
-  output directory.  Valid values are:

-  "debug"  - turn on gdbserver debug.

-  "remote" - turn on gdbserver remote debug.

-  "all" - turn on all the above debug options.

+  output directory.  For valid values see the entry for GDBSERVER_DEBUG.

 
 Testsuite Organization
 **********************
diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp

index 54aa55771c1..2ccc717ef60 100644

--- a/gdb/testsuite/lib/gdbserver-support.exp

+++ b/gdb/testsuite/lib/gdbserver-support.exp

@@ -293,13 +293,23 @@  proc gdbserver_start { options arguments } {

 	# Enable debug if set.
 	if [gdbserver_debug_enabled] {
 	    global gdbserverdebug
-	    set debugfile [standard_output_file gdbserver.debug]

-	    if { $gdbserverdebug == "debug" } {

-		append gdbserver_command " --debug --debug-file=$debugfile"

-	    } elseif { $gdbserverdebug == "remote" } {

-		append gdbserver_command " --remote-debug --debug-file=$debugfile"

-	    } elseif { $gdbserverdebug == "all" } {

-		append gdbserver_command " --debug --remote-debug --debug-file=$debugfile"

+	    set enabled 0

+	    foreach entry [split $gdbserverdebug ,] {

+	      switch -- $entry {

+		"debug" {

+		  append gdbserver_command " --debug"

+		  set enabled 1

+		}

+		"remote" {

+		  append gdbserver_command " --remote-debug"

+		  set enabled 1

+		}

+	      }

+	    }

+	    # Ensure debugfile is only added if something has been enabled

+	    if { $enabled } {

+	      set debugfile [standard_output_file gdbserver.debug]

+	      append gdbserver_command " --debug-file=$debugfile"

 	    }
 	}
 
@@ -595,9 +605,13 @@  proc gdbserver_debug_enabled { } {

 	}
     }
 
-    # Only return success on valid values.

-    return [expr { $gdbserverdebug == "debug" || $gdbserverdebug == "remote"

-		   || $gdbserverdebug == "all" }]

+    # Expand the all option

+    if { $gdbserverdebug == "all" } {

+      set gdbserverdebug "debug,remote,replay"

+    }

+

+    # Ensure it is not empty.

+    return [expr { $gdbserverdebug != "" }]

 }
 
 # Write the command line used to invocate gdbserver to the cmd file.
@@ -608,3 +622,28 @@  proc gdbserver_write_cmd_file { cmdline } {

     puts $cmd_file $cmdline
     catch "close $cmd_file"
 }
+

+# Override gdb_debug_init so that we can set replay logging in GDB if required.

+# Backup the original function so we can call it afterwards

+

+rename gdb_debug_init _gdb_debug_init

+

+proc gdb_debug_init { } {

+    global gdbserverdebug

+    global gdb_prompt

+

+    if [gdbserver_debug_enabled] {

+      foreach entry [split $gdbserverdebug ,] {

+	if { $entry == "replay" } {

+	  set replayfile [standard_output_file_with_gdb_instance gdbserver.replay]

+          send_gdb "set remotelogfile $replayfile\n" optional

+	  gdb_expect 10 {

+	    -re "$gdb_prompt $" {}

+	  }

+	}

+      }

+    }

+

+    # Now call the standard debug init function

+    _gdb_debug_init

+}