* [PATCH] Make gdb.server/solib-list.exp work for remote targets @ 2016-04-08 22:18 Simon Marchi 2016-04-08 22:33 ` Pedro Alves 0 siblings, 1 reply; 5+ messages in thread From: Simon Marchi @ 2016-04-08 22:18 UTC (permalink / raw) To: gdb-patches; +Cc: Simon Marchi 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: Allow running with remote targets. --- gdb/testsuite/gdb.server/solib-list.exp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/gdb/testsuite/gdb.server/solib-list.exp b/gdb/testsuite/gdb.server/solib-list.exp index 9d5cdcc..a1fa914 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" ".*" @@ -75,8 +74,7 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" { # Note we pass ${interp_system}, the program gdbserver spawns, as # 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] -- 2.8.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Make gdb.server/solib-list.exp work for remote targets 2016-04-08 22:18 [PATCH] Make gdb.server/solib-list.exp work for remote targets Simon Marchi @ 2016-04-08 22:33 ` Pedro Alves 2016-04-08 22:43 ` Simon Marchi 0 siblings, 1 reply; 5+ messages in thread From: Pedro Alves @ 2016-04-08 22:33 UTC (permalink / raw) To: Simon Marchi, gdb-patches Looks good, though see comments below. Thanks for doing this. On 04/08/2016 11:18 PM, Simon Marchi wrote: > gdb/testsuite/ChangeLog: > > * gdb.server/solib-list.exp: Allow running with remote targets. Pedantically, this is really a "why", not a "what". Should be something around: * 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. > @@ -75,8 +74,7 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" { > # Note we pass ${interp_system}, the program gdbserver spawns, as > # 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. Did you remove this line on purpose? If so, missing period. :-) BTW, I actually meant to extended it to: "or to the test output directory, when local testing." before pushing the previous patch, but forgot. > - 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] Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Make gdb.server/solib-list.exp work for remote targets 2016-04-08 22:33 ` Pedro Alves @ 2016-04-08 22:43 ` Simon Marchi 2016-04-08 22:44 ` Pedro Alves 0 siblings, 1 reply; 5+ messages in thread From: Simon Marchi @ 2016-04-08 22:43 UTC (permalink / raw) To: Pedro Alves, gdb-patches On 16-04-08 06:33 PM, Pedro Alves wrote: > Looks good, though see comments below. Thanks for doing this. > > On 04/08/2016 11:18 PM, Simon Marchi wrote: > >> gdb/testsuite/ChangeLog: >> >> * gdb.server/solib-list.exp: Allow running with remote targets. > > Pedantically, this is really a "why", not a "what". Should be something > around: > > * 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. I first started listing everything, and thought "my god this is getting really long". But you're right. I'll steal it, thanks for writing it :). >> @@ -75,8 +74,7 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" { >> # Note we pass ${interp_system}, the program gdbserver spawns, as >> # 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. > > Did you remove this line on purpose? If so, missing period. :-) Oops no. > BTW, I actually meant to extended it to: > > "or to the test output directory, when local testing." > > before pushing the previous patch, but forgot. I'll let you do it in a separate patch, if you want. >> - 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] > > Thanks, > Pedro Alves Updated: From c4d7227e5ac9aa5f7e0b083bd40c9c06d97026f6 Mon Sep 17 00:00:00 2001 From: Simon Marchi <simon.marchi@ericsson.com> Date: Fri, 8 Apr 2016 17:38:46 -0400 Subject: [PATCH] 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. --- gdb/testsuite/gdb.server/solib-list.exp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) 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] -- 2.8.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Make gdb.server/solib-list.exp work for remote targets 2016-04-08 22:43 ` Simon Marchi @ 2016-04-08 22:44 ` Pedro Alves 2016-04-08 22:48 ` Simon Marchi 0 siblings, 1 reply; 5+ messages in thread From: Pedro Alves @ 2016-04-08 22:44 UTC (permalink / raw) To: Simon Marchi, gdb-patches OK. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Make gdb.server/solib-list.exp work for remote targets 2016-04-08 22:44 ` Pedro Alves @ 2016-04-08 22:48 ` Simon Marchi 0 siblings, 0 replies; 5+ messages in thread From: Simon Marchi @ 2016-04-08 22:48 UTC (permalink / raw) To: Pedro Alves, gdb-patches On 16-04-08 06:44 PM, Pedro Alves wrote: > OK. > > Thanks, > Pedro Alves > Thanks, pushed! ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-04-08 22:48 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-04-08 22:18 [PATCH] Make gdb.server/solib-list.exp work for remote targets Simon Marchi 2016-04-08 22:33 ` Pedro Alves 2016-04-08 22:43 ` Simon Marchi 2016-04-08 22:44 ` Pedro Alves 2016-04-08 22:48 ` Simon Marchi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox