* lib/gdb.exp (default_gdb_init): Set gdb_test_file_name.
authorTom Tromey <tromey@redhat.com>
Fri, 22 Jun 2012 16:39:11 +0000 (16:39 +0000)
committerTom Tromey <tromey@redhat.com>
Fri, 22 Jun 2012 16:39:11 +0000 (16:39 +0000)
(standard_output_file, standard_testfile): New procs.
(build_executable, clean_restart): Use standard_output_file.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdb.exp

index d101c23903a1767e5451b9d0bd97ca16f0d703ff..2da69ace282106b37f63bf8c9483a26ed4c29e18 100644 (file)
@@ -1,3 +1,9 @@
+2012-06-22  Tom Tromey  <tromey@redhat.com>
+
+       * lib/gdb.exp (default_gdb_init): Set gdb_test_file_name.
+       (standard_output_file, standard_testfile): New procs.
+       (build_executable, clean_restart): Use standard_output_file.
+
 2012-06-22  Yao Qi  <yao@codesourcery.com>
 
        * boards/native-gdbserver.exp: New proc ${board}_exec.
index 6489c1547202d14d101435a41a51abb9604c4209..b40eef8361ccedbd20e82a7c06b1a4354094b8a9 100644 (file)
@@ -3024,12 +3024,15 @@ proc gdb_continue { function } {
 proc default_gdb_init { args } {
     global gdb_wrapper_initialized
     global gdb_wrapper_target
+    global gdb_test_file_name
     global cleanfiles
     
     set cleanfiles {}
 
     gdb_clear_suppressed;
 
+    set gdb_test_file_name [file rootname [file tail [lindex $args 0]]]
+
     # Make sure that the wrapper is rebuilt
     # with the appropriate multilib option.
     if { $gdb_wrapper_target != [current_target_name] } {
@@ -3063,6 +3066,70 @@ proc default_gdb_init { args } {
     }
 }
 
+# Turn BASENAME into a full file name in the standard output
+# directory.
+
+proc standard_output_file {basename} {
+    global objdir subdir
+
+    return $objdir/$subdir/$basename
+}
+
+# Set 'testfile', 'srcfile', and 'binfile'.
+#
+# ARGS is a list of source file specifications.
+# Without any arguments, the .exp file's base name is used to
+# compute the source file name.  The ".c" extension is added in this case.
+# If ARGS is not empty, each entry is a source file specification.
+# If the specification starts with a ".", it is treated as a suffix
+# to append to the .exp file's base name.
+# If the specification is the empty string, it is treated as if it
+# were ".c".
+# Otherwise it is a file name.
+# The first file in the list is used to set the 'srcfile' global.
+# Each subsequent name is used to set 'srcfile2', 'srcfile3', etc.
+#
+# Most tests should call this without arguments.
+#
+# If a completely different binary file name is needed, then it
+# should be handled in the .exp file with a suitable comment.
+
+proc standard_testfile {args} {
+    global gdb_test_file_name
+    global objdir subdir
+
+    # Outputs.
+    global testfile binfile
+
+    set testfile $gdb_test_file_name
+    set binfile [standard_output_file ${testfile}]
+
+    if {[llength $args] == 0} {
+       set args .c
+    }
+
+    set suffix ""
+    foreach arg $args {
+       set varname srcfile$suffix
+       global $varname
+
+       # Handle an extension.
+       if {$arg == ""} {
+           set arg $testfile.c
+       } elseif {[string range $arg 0 0] == "."} {
+           set arg $testfile$arg
+       }
+
+       set $varname $arg
+
+       if {$suffix == ""} {
+           set suffix 2
+       } else {
+           incr suffix
+       }
+    }
+}
+
 # The default timeout used when testing GDB commands.  We want to use
 # the same timeout as the default dejagnu timeout, unless the user has
 # already provided a specific value (probably through a site.exp file).
@@ -3666,7 +3733,7 @@ proc build_executable { testname executable {sources ""} {options {debug}} } {
         set sources ${executable}.c
     }
 
-    set binfile ${objdir}/${subdir}/${executable}
+    set binfile [standard_output_file $executable]
 
     set objects {}
     for {set i 0} "\$i<[llength $sources]" {incr i} {
@@ -3694,12 +3761,12 @@ proc build_executable { testname executable {sources ""} {options {debug}} } {
 }
 
 # Starts fresh GDB binary and loads EXECUTABLE into GDB. EXECUTABLE is
-# the name of binary in ${objdir}/${subdir}.
+# the basename of the binary.
 proc clean_restart { executable } {
     global srcdir
     global objdir
     global subdir
-    set binfile ${objdir}/${subdir}/${executable}
+    set binfile [standard_output_file ${executable}]
 
     gdb_exit
     gdb_start