Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [patch] let gdb.base/reread.exp handle multiple binary files
@ 2011-05-04 16:47 Janis Johnson
  2011-05-04 17:55 ` Pedro Alves
  0 siblings, 1 reply; 8+ messages in thread
From: Janis Johnson @ 2011-05-04 16:47 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 530 bytes --]

Test gdb.base/reread.exp fails and reports ERROR for uClinux because it
renames binary files directly using "shell mv", and this doesn't take
into account the pair of binaries that are used for the bFLT format.

This patch moves the file commands into new procedures in lib/gdb.exp
that are used as defaults if the local environment doesn't override
them.

Tested on arm-none-linux-gnueabi as a platform that does not need
overrides.  OK?  I have an FSF copyright assignment for gdb.

Janis Johnson
CodeSourcery / Mentor Graphics

[-- Attachment #2: gdb-20110504-1 --]
[-- Type: text/plain, Size: 4418 bytes --]

20110-5-04  Janis Johnson  <janisjo@codesourcery.com>

	* lib/gdb.exp (exec_target_file, exec_symbol_file,
	gdb_rename_execfile, gdb_touch_execfile): New.
	* gdb.base/reread.exp: Use new procs to handle multiple
	exec files.

Index: gdb/testsuite/lib/gdb.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.172
diff -u -p -r1.172 gdb.exp
--- gdb/testsuite/lib/gdb.exp	27 Apr 2011 19:44:42 -0000	1.172
+++ gdb/testsuite/lib/gdb.exp	4 May 2011 16:07:25 -0000
@@ -2653,6 +2653,54 @@ proc shlib_symbol_file { libname } {
     return $libname
 }
 
+# Return the filename to download to the target and load for this
+# executable.  Normally just BINFILE unless it is renamed to something
+# else for this target.
+
+proc exec_target_file { binfile } {
+    return $binfile
+}
+
+# Return the filename GDB will load symbols from when debugging this
+# executable.  Normally just BINFILE unless executables for this target
+# have separate files for symbols.
+
+proc exec_symbol_file { binfile } {
+    return $binfile
+}
+
+# Rename the executable file.  Normally this is just BINFILE1 being renamed
+# to BINFILE2, but some targets require multiple binary files.
+proc gdb_rename_execfile { binfile1 binfile2 } {
+    catch { file rename -force \
+	    [exec_target_file ${binfile1}] \
+	    [exec_target_file ${binfile2}] }
+    if { [exec_target_file ${binfile1}] != [exec_symbol_file ${binfile1}] } {
+	catch { file rename -force \
+		[exec_symbol_file ${binfile1}] \
+		[exec_symbol_file ${binfile2}] }
+    }
+}
+
+# "Touch" the executable file to update the date.  Normally this is just
+# BINFILE, but some targets require multiple files.
+proc gdb_touch_execfile { binfile } {
+    catch { file copy -force \
+	    [exec_target_file ${binfile}] \
+	    [exec_target_file ${binfile}.tmp] }
+    catch { file rename -force \
+	    [exec_target_file ${binfile}.tmp] \
+	    [exec_target_file ${binfile}] }
+    if { [exec_target_file ${binfile}] != [exec_symbol_file ${binfile}] } {
+	catch { file copy -force \
+		[exec_symbol_file ${binfile}] \
+		[exec_symbol_file ${binfile}.tmp] }
+	catch { file rename -force \
+		[exec_symbol_file ${binfile}.tmp] \
+		[exec_symbol_file ${binfile}] }
+    }
+}
+
 # gdb_download
 #
 # Copy a file to the remote target and return its target filename.
Index: gdb/testsuite/gdb.base/reread.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/reread.exp,v
retrieving revision 1.18
diff -u -p -r1.18 reread.exp
--- gdb/testsuite/gdb.base/reread.exp	7 Mar 2011 16:03:02 -0000	1.18
+++ gdb/testsuite/gdb.base/reread.exp	4 May 2011 16:07:25 -0000
@@ -53,7 +53,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 
 # Load the first executable.
 
-gdb_test "shell mv ${binfile1} ${binfile}" ".*" ""
+gdb_rename_execfile ${binfile1} ${binfile}
 gdb_load ${binfile}
 
 # Set a breakpoint at foo
@@ -82,10 +82,10 @@ gdb_expect {
 # second executable into its place.  Ensure that the new
 # executable is at least a second newer than the old.
 
-gdb_test "shell mv ${binfile} ${binfile1}" ".*" ""
-gdb_test "shell mv ${binfile2} ${binfile}" ".*" ""
+gdb_rename_execfile ${binfile} ${binfile1}
+gdb_rename_execfile ${binfile2} ${binfile}
 gdb_test "shell sleep 1" ".*" ""
-gdb_test "shell touch ${binfile}" ".*" ""
+gdb_touch_execfile ${binfile}
 
 # Run a second time; GDB should detect that the executable has changed
 # and reset the breakpoints correctly.
@@ -120,8 +120,8 @@ if [is_remote target] {
 } else {
 
     # Put the older executable back in place.
-    gdb_test "shell mv ${binfile} ${binfile2}" ".*" ""
-    gdb_test "shell mv ${binfile1} ${binfile}" ".*" ""
+    gdb_rename_execfile ${binfile} ${binfile2}
+    gdb_rename_execfile ${binfile1} ${binfile}
 
     # Restart GDB entirely.
     gdb_start
@@ -154,8 +154,8 @@ if [is_remote target] {
     # Now move the newer executable into place, and re-run.  GDB
     # should still notice that the executable file has changed,
     # and still re-set the breakpoint appropriately.
-    gdb_test "shell mv ${binfile} ${binfile1}" ".*" ""
-    gdb_test "shell mv ${binfile2} ${binfile}" ".*" ""
+    gdb_rename_execfile ${binfile} ${binfile1}
+    gdb_rename_execfile ${binfile2} ${binfile}
     gdb_run_cmd
     gdb_expect {
 	-re ".*Breakpoint.* foo .* at .*:9.*$gdb_prompt $" {

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-05-11  9:12 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-04 16:47 [patch] let gdb.base/reread.exp handle multiple binary files Janis Johnson
2011-05-04 17:55 ` Pedro Alves
2011-05-05 16:32   ` Janis Johnson
2011-05-07  6:05     ` Regression: " Jan Kratochvil
2011-05-08  9:08       ` [patch] Regression: " Jan Kratochvil
2011-05-11  7:08         ` [patch#2] " Jan Kratochvil
2011-05-11  9:03           ` Pedro Alves
2011-05-11  9:12             ` Jan Kratochvil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox