Improve gdb_remote_download, remove gdb_download

This patch removes gdb_download in favor of gdb_remote_download, since
they are very close in functionality.  Also, in preparation for the
following patch about shared library handling during tests, it improves
gdb_remote_download so that it uses standard_output_file for any
destination board that is local, not only host.

If the destination board is remote, gdb_remote_download will use the
standard remote_download from DejaGnu, resulting in the file being
transferred on the remote system.

If the destination is local, gdb_remote_download will copy the file to
the standard test directory (found using standard_output_file).  Tcl's
file copy seems to handle gracefully cases where the source file is the
same as the destination, so I don't think it's necessary to check for
that case ourselves, as a previous version of the patch did.

I'd prefer to keep the name gdb_download instead of gdb_remote_download,
since I don't like the fact that gdb_remote_download implies that the
destination is remote, when it's not always the case.  However,
gdb_remote_download is used at many more places than gdb_download, so
it's easier to reuse that.  Also, since it's a wrapper around DejaGnu's
remote_download, it might be better to keep that name.  I don't know.

I ran the testsuite native, with native-gdbserver and with a
remote gdbserver, and didn't see any related failure.

gdb/testsuite/ChangeLog:

	* gdb.base/jit-so.exp: Use gdb_remote_download instead of
	gdb_download.  Use it even if the target is not remote.
	* gdb.base/jit.exp (compile_jit_test): Likewise.
	* lib/gdb.exp (gdb_remote_download): Copy files to the standard
	output directory if the destination board is local, otherwise use
	the standard remote_download from DejaGnu.
	(gdb_download): Remove.
	(gdb_load_shlibs): Use gdb_remote_download instead of
	gdb_download.
	* lib/gdbserver-support.exp (gdbserver_download_current_prog):
	Use gdb_remote_download instead of gdb_download.  Use it even if
	the target is not remote.
	* lib/mi-support.exp (mi_load_shlibs): Use gdb_remote_download
	instead of gdb_download.
This commit is contained in:
Simon Marchi 2016-04-05 13:59:49 -04:00
parent 4dca19f828
commit 7817ea4614
6 changed files with 52 additions and 39 deletions

View File

@ -1,3 +1,20 @@
2016-04-05 Simon Marchi <simon.marchi@ericsson.com>
* gdb.base/jit-so.exp: Use gdb_remote_download instead of
gdb_download. Use it even if the target is not remote.
* gdb.base/jit.exp (compile_jit_test): Likewise.
* lib/gdb.exp (gdb_remote_download): Copy files to the standard
output directory if the destination board is local, otherwise use
the standard remote_download from DejaGnu.
(gdb_download): Remove.
(gdb_load_shlibs): Use gdb_remote_download instead of
gdb_download.
* lib/gdbserver-support.exp (gdbserver_download_current_prog):
Use gdb_remote_download instead of gdb_download. Use it even if
the target is not remote.
* lib/mi-support.exp (mi_load_shlibs): Use gdb_remote_download
instead of gdb_download.
2016-04-04 Simon Marchi <simon.marchi@polymtl.ca> 2016-04-04 Simon Marchi <simon.marchi@polymtl.ca>
* gdb.mi/mi-breakpoint-changed.exp: Add some with_test_prefix. * gdb.mi/mi-breakpoint-changed.exp: Add some with_test_prefix.

View File

@ -61,11 +61,7 @@ if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {}] != "" } {
return -1 return -1
} }
if {[is_remote target]} { set solib_binfile_target [gdb_remote_download target ${solib_binfile}]
set solib_binfile_target [gdb_download ${solib_binfile}]
} else {
set solib_binfile_target $solib_binfile
}
proc one_jit_test {count match_str} { proc one_jit_test {count match_str} {
with_test_prefix "one_jit_test-$count" { with_test_prefix "one_jit_test-$count" {

View File

@ -57,11 +57,7 @@ proc compile_jit_test {testname binsuffix options} {
return -1 return -1
} }
if {[is_remote target]} { set solib_binfile_target [gdb_remote_download target ${solib_binfile}]
set solib_binfile_target [gdb_download ${solib_binfile}]
} else {
set solib_binfile_target $solib_binfile
}
return 0 return 0
} }

View File

@ -4183,36 +4183,44 @@ proc gdb_touch_execfile { binfile } {
} }
} }
# Like remote_download but provides a gdb-specific behavior. If DEST # Like remote_download but provides a gdb-specific behavior.
# is "host", and the host is not remote, and TOFILE is not specified, #
# then the [file tail] of FROMFILE is passed through # If the destination board is remote, the local file FROMFILE is transferred as
# standard_output_file to compute the destination. # usual with remote_download to TOFILE on the remote board. The destination
# filename is added to the CLEANFILES global, so it can be cleaned up at the
# end of the test.
#
# If the destination board is local, the destination path TOFILE is passed
# through standard_output_file, and FROMFILE is copied there.
#
# In both cases, if TOFILE is omitted, it defaults to the [file tail] of
# FROMFILE.
proc gdb_remote_download {dest fromfile {tofile {}}} { proc gdb_remote_download {dest fromfile {tofile {}}} {
if {$dest == "host" && ![is_remote host] && $tofile == ""} { # If TOFILE is not given, default to the same filename as FROMFILE.
set tofile [standard_output_file [file tail $fromfile]] if {[string length $tofile] == 0} {
set tofile [file tail $fromfile]
} }
if { $tofile == "" } { if {[is_remote $dest]} {
return [remote_download $dest $fromfile] # When the DEST is remote, we simply send the file to DEST.
global cleanfiles
set destname [remote_download $dest $fromfile $tofile]
lappend cleanfiles $destname
return $destname
} else { } else {
return [remote_download $dest $fromfile $tofile] # When the DEST is local, we copy the file to the test directory
# (where the executable is), except if that's already where it is.
set tofile [standard_output_file $tofile]
file copy -force $fromfile $tofile
return $tofile
} }
} }
# gdb_download
#
# Copy a file to the remote target and return its target filename.
# Schedule the file to be deleted at the end of this test.
proc gdb_download { filename } {
global cleanfiles
set destname [remote_download target $filename]
lappend cleanfiles $destname
return $destname
}
# gdb_load_shlibs LIB... # gdb_load_shlibs LIB...
# #
# Copy the listed libraries to the target. # Copy the listed libraries to the target.
@ -4223,7 +4231,7 @@ proc gdb_load_shlibs { args } {
} }
foreach file $args { foreach file $args {
gdb_download [shlib_target_file $file] gdb_remote_download target [shlib_target_file $file]
} }
# Even if the target supplies full paths for shared libraries, # Even if the target supplies full paths for shared libraries,

View File

@ -176,11 +176,7 @@ proc gdbserver_download_current_prog { } {
if { $reuse == 0 } { if { $reuse == 0 } {
set gdbserver_host_exec $host_exec set gdbserver_host_exec $host_exec
set gdbserver_host_mtime [file mtime $host_exec] set gdbserver_host_mtime [file mtime $host_exec]
if [is_remote target] { set gdbserver_server_exec [gdb_remote_download target $host_exec]
set gdbserver_server_exec [gdb_download $host_exec]
} else {
set gdbserver_server_exec $host_exec
}
} }
return $gdbserver_server_exec return $gdbserver_server_exec

View File

@ -1960,7 +1960,7 @@ proc mi_load_shlibs { args } {
} }
foreach file $args { foreach file $args {
gdb_download [shlib_target_file $file] gdb_remote_download target [shlib_target_file $file]
} }
# Even if the target supplies full paths for shared libraries, # Even if the target supplies full paths for shared libraries,