This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH v2 05/17] fix up gdb.xml


This fixes the gdb.xml tests to be parallel-safe.

	* gdb.xml/tdesc-arch.exp: Use standard_output_file.  Make
	downloads conditional on remote host.
	(set_arch): Likewise.
	* gdb.xml/tdesc-regs.exp: Use gdb_remote_download.
	(load_description): Use standard_output_file.  Add "should_cd"
	argument.
---
 gdb/testsuite/gdb.xml/tdesc-arch.exp | 28 +++++++++++++++-----------
 gdb/testsuite/gdb.xml/tdesc-regs.exp | 39 ++++++++++++++++++++++++++----------
 2 files changed, 44 insertions(+), 23 deletions(-)

diff --git a/gdb/testsuite/gdb.xml/tdesc-arch.exp b/gdb/testsuite/gdb.xml/tdesc-arch.exp
index 5fde2ff..241ad28 100644
--- a/gdb/testsuite/gdb.xml/tdesc-arch.exp
+++ b/gdb/testsuite/gdb.xml/tdesc-arch.exp
@@ -60,17 +60,20 @@ proc set_arch { arch which } {
     global gdb_prompt
     global subdir
 
-    set fd [open "$subdir/tdesc-arch.xml" w]
+    set filename [standard_output_file tdesc-arch.xml]
+    set fd [open $filename w]
     puts $fd \
 	"<target>
 	    <architecture>$arch</architecture>
 	 </target>"
     close $fd
-    remote_download host "${subdir}/tdesc-arch.xml" "tdesc-arch.xml"
+    if {[is_remote host]} {
+	set filename [remote_download host $filename tdesc-arch.xml]
+    }
 
     # Anchor the test output, so that error messages are detected.
-    set cmd "set tdesc filename tdesc-arch.xml"
-    set msg "$cmd ($which architecture)"
+    set cmd "set tdesc filename $filename"
+    set msg "set tdesc filename tdesc-arch.xml ($which architecture)"
     set cmd_regex [string_to_regexp $cmd]
     gdb_test_multiple $cmd $msg {
 	-re "^$cmd_regex\r\n$gdb_prompt $" {
@@ -86,31 +89,32 @@ proc set_arch { arch which } {
 	"The target architecture is set automatically \\(currently $arch\\)" \
 	"$cmd ($which architecture)"
 
-    file delete "${subdir}/tdesc-arch.xml"
-    remote_file host delete "tdesc-arch.xml"
+    remote_file host delete $filename
 }
 
 set_arch $arch1 first
 set_arch $arch2 second
 
 # Check an invalid architecture setting.
-set fd [open "${subdir}/tdesc-arch.xml" w]
+set filename [standard_output_file tdesc-arch.xml]
+set fd [open $filename w]
 puts $fd \
     "<target>
        <architecture>invalid</architecture>
      </target>"
 close $fd
-remote_download host "$subdir/tdesc-arch.xml" "tdesc-arch.xml"
+if {[is_remote host]} {
+    set filename [remote_download host $filename "tdesc-arch.xml"]
+}
 
-set cmd "set tdesc filename tdesc-arch.xml"
+set cmd "set tdesc filename $filename"
 gdb_test $cmd \
     "warning:.*Target description specified unknown architecture.*" \
-    "$cmd (invalid architecture)"
+    "set tdesc filename tdesc-arch.xml (invalid architecture)"
 
 set cmd "show architecture"
 gdb_test $cmd \
     "The target architecture is set automatically \\(currently $default_arch\\)" \
     "$cmd (invalid architecture)"
 
-file delete "${subdir}/tdesc-arch.xml"
-remote_file host delete "tdesc-arch.xml"
+remote_file host delete $filename
diff --git a/gdb/testsuite/gdb.xml/tdesc-regs.exp b/gdb/testsuite/gdb.xml/tdesc-regs.exp
index 533812f..c0f4978 100644
--- a/gdb/testsuite/gdb.xml/tdesc-regs.exp
+++ b/gdb/testsuite/gdb.xml/tdesc-regs.exp
@@ -94,20 +94,27 @@ gdb_test "set tdesc file $srcdir/$subdir/single-reg.xml" \
 # Copy the core registers into the objdir if necessary, so that they
 # will be found by <xi:include>.
 foreach src ${core-regs} {
-    set file [remote_download host "$srcdir/../features/$regdir$src" "$src"]
+    set remote_filename($src) \
+	[gdb_remote_download host "$srcdir/../features/$regdir$src"]
 }
 
-# Similarly, we need to copy files under test into the objdir.
-proc load_description { file errmsg } {
+# Similarly, we need to copy files under test into the objdir.  If
+# SHOULD_CD is set, it causes the gdb under test to "cd" to the
+# directory holding the XML code.  This should only be set once; so
+# the first call should use it and subsequent calls should not.
+proc load_description { file errmsg {should_cd 1} } {
     global srcdir
     global subdir
     global gdb_prompt
     global core-regs
     global architecture
+    global remote_filename
 
-    file delete "$subdir/regs.xml"
+    set regs_file [standard_output_file regs.xml]
+
+    file delete $regs_file
     set ifd [open "$srcdir/$subdir/$file" r]
-    set ofd [open "$subdir/regs.xml" w]
+    set ofd [open $regs_file w]
     while {[gets $ifd line] >= 0} {
 	if {[regexp {<xi:include href="core-regs.xml"/>} $line]} {
 	    if {! [string equal ${architecture} ""]} {
@@ -122,11 +129,18 @@ proc load_description { file errmsg } {
     }
     close $ifd
     close $ofd
-    remote_download host "$subdir/regs.xml" "regs.xml"
-    file delete "$subdir/regs.xml"
+
+    if {[is_remote host]} {
+	set regs_file [remote_download host "$subdir/regs.xml" "regs.xml"]
+    }
+
+    if {$should_cd && ![is_remote host]} {
+	gdb_test "cd [file dirname $regs_file]" "Working directory .*" \
+	    "cd to directory holding xml"
+    }
 
     # Anchor the test output, so that error messages are detected.
-    set cmd "set tdesc filename regs.xml"
+    set cmd "set tdesc filename [file tail $regs_file]"
     set msg "set tdesc filename regs.xml - from $file"
     set cmd_regex [string_to_regexp $cmd]
     gdb_test_multiple $cmd $msg {
@@ -134,7 +148,10 @@ proc load_description { file errmsg } {
 	    pass $msg
 	}
     }
-    remote_file host delete "regs.xml"
+
+    if {[is_remote host]} {
+	remote_file host delete "regs.xml"
+    }
 }
 
 load_description "extra-regs.xml" ""
@@ -150,10 +167,10 @@ gdb_test "ptype \$structreg.v4" "type = int8_t __attribute__ \\(\\(vector_size\\
 gdb_test "ptype \$bitfields" \
     "type = struct struct2 {\r\n *uint64_t f1 : 35;\r\n *uint64_t f2 : 1;\r\n}"
 
-load_description "core-only.xml" ""
+load_description "core-only.xml" "" 0
 # The extra register from the previous description should be gone.
 gdb_test "ptype \$extrareg" "type = void"
 
 foreach src ${core-regs} {
-    remote_file host delete "$src"
+    remote_file host delete $remote_filename($src)
 }
-- 
1.8.1.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]