+2019-05-17  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.
+
 2019-05-17  Alan Hayward  <alan.hayward@arm.com>
 
        * lib/gdb.exp (default_gdb_spawn): Call gdb_write_cmd_file.
 
 
 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
 **************
 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
 **********************
 
        # 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"
            }
        }
 
        }
     }
 
-    # 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.
     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
+}