From: Simon Marchi Date: Fri, 8 Apr 2016 22:45:29 +0000 (-0400) Subject: Make gdb.server/solib-list.exp work for remote targets X-Git-Tag: binutils-2_27~837 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f48e22e3f2fdbe540a807b3ef2e9b5d3b08616e3;p=platform%2Fupstream%2Fbinutils.git 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. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 2ecc1e0..5b4cb58 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2016-04-08 Simon Marchi + + * 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 * gdb.server/solib-list.exp: Don't use gdb_load. Instead pass the diff --git a/gdb/testsuite/gdb.server/solib-list.exp b/gdb/testsuite/gdb.server/solib-list.exp index 9d5cdcc..f60dcb8 100644 --- a/gdb/testsuite/gdb.server/solib-list.exp +++ b/gdb/testsuite/gdb.server/solib-list.exp @@ -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]