From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12854 invoked by alias); 8 Apr 2016 22:43:33 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 12842 invoked by uid 89); 8 Apr 2016 22:43:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS autolearn=ham version=3.3.2 spammy=god X-HELO: usplmg20.ericsson.net Received: from usplmg20.ericsson.net (HELO usplmg20.ericsson.net) (198.24.6.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Fri, 08 Apr 2016 22:43:22 +0000 Received: from EUSAAHC008.ericsson.se (Unknown_Domain [147.117.188.96]) by usplmg20.ericsson.net (Symantec Mail Security) with SMTP id 05.87.30335.7BD28075; Sat, 9 Apr 2016 00:16:23 +0200 (CEST) Received: from [142.133.110.144] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.98) with Microsoft SMTP Server id 14.3.248.2; Fri, 8 Apr 2016 18:43:19 -0400 Subject: Re: [PATCH] Make gdb.server/solib-list.exp work for remote targets To: Pedro Alves , References: <1460153899-5185-1-git-send-email-simon.marchi@ericsson.com> <570831A6.7070901@redhat.com> From: Simon Marchi Message-ID: <57083407.5070005@ericsson.com> Date: Fri, 08 Apr 2016 22:43:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <570831A6.7070901@redhat.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-04/txt/msg00192.txt.bz2 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 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