Make gdb.server/solib-list.exp work for remote targets

There are a few small changes needed to make it work with a real remote
target.

 - Remove the [is_remote target] check.
 - Remove soname setting when building the lib, it's done by default now
   anyway.
 - In the compilation of the executable, pass the shared lib using the
   shlib option, so that RPATH is set.
 - Download the program to the target using gdb_remote_download, and
   record the remote path.  Remove loading of the program using
   gdb_load_shlibs, which was not really appropriate anyway.
 - Run the remote path through readlink (see comment in the code).
 - Start gdbserver with the remote path.

Also, don't set executable and objfile variables, as they are unused.

Tested with native, native-gdbserver, native-extended-gdbserver, and a
remote gdbserver.

gdb/testsuite/ChangeLog:

	* gdb.server/solib-list.exp: Remove is_remote check.
	Pass shlib= to gdb_compile.  Don't link shared library with
	-soname.  Call gdb_remote_download instead of gdb_load_shlibs.
	Run binary filename through "readlink -f" on the target.
This commit is contained in:
Simon Marchi 2016-04-08 18:45:29 -04:00
parent 096be756aa
commit f48e22e3f2
2 changed files with 19 additions and 13 deletions

View File

@ -1,3 +1,10 @@
2016-04-08 Simon Marchi <simon.marchi@ericsson.com>
* gdb.server/solib-list.exp: Remove is_remote check.
Pass shlib= to gdb_compile. Don't link shared library with
-soname. Call gdb_remote_download instead of gdb_load_shlibs.
Run binary filename through "readlink -f" on the target.
2016-04-08 Pedro Alves <palves@redhat.com>
* gdb.server/solib-list.exp: Don't use gdb_load. Instead pass the

View File

@ -27,22 +27,13 @@ if {[skip_gdbserver_tests] || [skip_shlib_tests]} {
return
}
# This test case (currently) does not support remote targets, since it
# assumes the ELF interpreter can be found on the host system
if [is_remote target] then {
return
}
standard_testfile solib-list-main.c
set srclibfile ${testfile}-lib.c
set binlibfile [standard_output_file ${testfile}.so]
set executable ${testfile}
set objfile ${binfile}.o
if { [get_compiler_info]
|| [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" "${binlibfile}" [list debug ldflags=-Wl,-soname,${binlibfile}]] != ""
|| [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != ""
|| [gdb_compile "${objfile} ${binlibfile}" "${binfile}" executable {}] != "" } {
|| [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" "${binlibfile}" {debug}] != ""
|| [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "shlib=${binlibfile}"] != "" } {
untested "could not compile sources"
return -1
}
@ -57,9 +48,17 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load_shlibs ${binfile}
gdb_load_shlibs ${binlibfile}
set remote_binfile [gdb_remote_download target $binfile]
# When testing remote, the file path we receive may be only the file name,
# "solib-list". ld-linux doesn't seem to be able to find the file when
# passing just the file name, it wants either the absolute path or a
# relative path with at least one directory component. Calling readlink on
# the target to get the full path will make it happy.
set remote_binfile [lindex [remote_exec target "readlink -f $remote_binfile"] 1]
# Make sure we're disconnected, in case we're testing with an
# extended-remote board, therefore already connected.
gdb_test "disconnect" ".*"
@ -76,7 +75,7 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
# argument here, instead of using gdb_load, because we don't want
# to download the interpreter to the target (it's already there)
# or to the test output directory.
set res [gdbserver_spawn "${interp_system} ${binfile}"]
set res [gdbserver_spawn "${interp_system} ${remote_binfile}"]
set gdbserver_protocol [lindex $res 0]
set gdbserver_gdbport [lindex $res 1]