testsuite: Add option to capture gdbserver debug
authorAlan Hayward <alan.hayward@arm.com>
Fri, 12 Apr 2019 15:36:51 +0000 (16:36 +0100)
committerAlan Hayward <alan.hayward@arm.com>
Thu, 25 Apr 2019 15:37:03 +0000 (16:37 +0100)
Add both board option and environment variable which enables gdbserver
debug and sends it to the file gdbserver.debug, located in the output
directory for the current test.  Document this.

Add support for the environment variable in the Makefile.

The testsuite can be run with gdbserver debug enabled in the following way:

make check GDBSERVER_DEBUG=all

Disable tspeed.exp when debugging to prevent the log file filling
many gigabytes then timing out.

gdb/testsuite/ChangeLog:

* Makefile.in: Pass through GDBSERVER_DEBUG.
        * README (Testsuite Parameters): Add GDBSERVER_DEBUG.
        (gdbserver,debug): Add board setting.
        * gdb.trace/tspeed.exp: Skip when debugging.
* lib/gdb.exp (gdbserver_debug_enabled): New procedure.
* lib/gdbserver-support.exp: Likewise

gdb/testsuite/ChangeLog
gdb/testsuite/Makefile.in
gdb/testsuite/README
gdb/testsuite/gdb.trace/tspeed.exp
gdb/testsuite/lib/gdb.exp
gdb/testsuite/lib/gdbserver-support.exp

index 580c15e8fc41114c189cc99c60bf4aaca9d87e7e..ce3ebbc4c77f5b46ad5220d7cbcd90925a382cac 100644 (file)
@@ -1,3 +1,12 @@
+2019-04-25  Alan Hayward  <alan.hayward@arm.com>
+
+        * Makefile.in: Pass through GDBSERVER_DEBUG.
+        * README (Testsuite Parameters): Add GDBSERVER_DEBUG.
+        (gdbserver,debug): Add board setting.
+        * gdb.trace/tspeed.exp: Skip when debugging.
+        * lib/gdb.exp (gdbserver_debug_enabled): New procedure.
+        * lib/gdbserver-support.exp: Likewise
+
 2019-04-24  Tom Tromey  <tromey@adacore.com>
 
        * lib/gdb.exp (gdb_compile): Don't add -fno-stack-protector for
index 6ee4fc36f0e56114becd21b75e78e0db0ffde079..8d46fe15be4128af4cb7bd260c3563b7b11737f6 100644 (file)
@@ -52,6 +52,8 @@ RUNTESTFLAGS =
 
 FORCE_PARALLEL =
 
+GDBSERVER_DEBUG =
+
 # Default number of iterations that we will use to run the testsuite
 # if the user does not specify the RACY_ITER environment variable
 # (e.g., when the user calls the make rule directly from the command
@@ -162,13 +164,15 @@ check-read1:
 # status.
 TIMESTAMP = $(if $(TS),| $(srcdir)/print-ts.py $(if $(TS_FORMAT),$(TS_FORMAT),),)
 
+gdbserver_debug = $(if $(GDBSERVER_DEBUG),GDBSERVER_DEBUG=$(GDBSERVER_DEBUG) ; export GDBSERVER_DEBUG ;,)
+
 # All the hair to invoke dejagnu.  A given invocation can just append
 # $(RUNTESTFLAGS)
 DO_RUNTEST = \
        rootme=`pwd`; export rootme; \
        srcdir=${srcdir} ; export srcdir ; \
        EXPECT=${EXPECT} ; export EXPECT ; \
-       EXEEXT=${EXEEXT} ; export EXEEXT ; \
+       EXEEXT=${EXEEXT} ; export EXEEXT ; $(gdbserver_debug) \
         $(RPATH_ENVVAR)=$$rootme/../../expect:$$rootme/../../libstdc++:$$rootme/../../tk/unix:$$rootme/../../tcl/unix:$$rootme/../../bfd:$$rootme/../../opcodes:$$$(RPATH_ENVVAR); \
        export $(RPATH_ENVVAR); \
        if [ -f $${rootme}/../../expect/expect ] ; then  \
index db90ea46982efa101b29e7cde754b474b7b6f42c..99d574511d2a14d18828e7382c0395c1e1089325 100644 (file)
@@ -293,6 +293,17 @@ can do:
 
        make check TS=1 TS_FORMAT='[%b %H:%S]'
 
+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:
+
+       make check GDBSERVER_DEBUG=all
+
 Race detection
 **************
 
@@ -497,6 +508,14 @@ gdb,nopie_flag
   The flag required to force the compiler to produce non-position-independent
   executables.
 
+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.
+
 Testsuite Organization
 **********************
 
index 6fd812e4f6d6dfea256111175cef3a428908f1ae..9afec64acf8d401d2aa97ed7f2a6ad36187620fa 100644 (file)
@@ -19,6 +19,11 @@ if {[skip_shlib_tests]} {
     return 0
 }
 
+# Do not run if gdbsever debug is enabled - the output file is many Gb.
+if [gdbserver_debug_enabled] {
+    return 0
+}
+
 standard_testfile
 set executable $testfile
 
index eaf7fc4303db0dbe8d00fdcf35d8187e8391b0da..f0f43342e62ee5365468b59dbccb2c2730f6c599 100644 (file)
@@ -6362,5 +6362,12 @@ proc gdb_supported_languages {} {
                opencl rust minimal ada]
 }
 
+# Check if debugging is enabled for gdbserver.
+
+proc gdbserver_debug_enabled { } {
+    # Always disabled for GDB only setups.
+    return 0
+}
+
 # Always load compatibility stuff.
 load_lib future.exp
index 2cb64f7d2f57ed5a6dce93502263fcaa49dbc931..164a1d1d3cd80c2ca213e3a545925908e77eedf2 100644 (file)
@@ -283,12 +283,26 @@ proc gdbserver_start { options arguments } {
        # If gdbserver_reconnect will be called $gdbserver_reconnect_p must be
        # set to true already during gdbserver_start.
        global gdbserver_reconnect_p
+       global srcdir
+       global subdir
        if {![info exists gdbserver_reconnect_p] || !$gdbserver_reconnect_p} {
            # GDB client could accidentally connect to a stale server.
-           # append gdbserver_command " --debug --once"
            append gdbserver_command " --once"
        }
 
+       # 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"
+           }
+       }
+
        if { $options != "" } {
            append gdbserver_command " $options"
        }
@@ -561,3 +575,25 @@ proc mi_gdbserver_start_multi { } {
 
     return [mi_gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
 }
+
+# Check if debugging is enabled for gdbserver.
+
+proc gdbserver_debug_enabled { } {
+    global gdbserverdebug
+
+    # If not already read, get the debug setting from environment or board setting.
+    if ![info exists gdbserverdebug] {
+       global env
+       if [info exists env(GDBSERVER_DEBUG)] {
+           set gdbserverdebug $env(GDBSERVER_DEBUG)
+       } elseif [target_info exists gdbserver,debug] {
+           set gdbserverdebug [target_info gdbserver,debug]
+       } else {
+           return 0
+       }
+    }
+
+    # Only return success on valid values.
+    return [expr { $gdbserverdebug == "debug" || $gdbserverdebug == "remote"
+                  || $gdbserverdebug == "all" }]
+}
This page took 0.034565 seconds and 4 git commands to generate.