+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
+}