From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 113732 invoked by alias); 8 Apr 2016 22:18:30 -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 113708 invoked by uid 89); 8 Apr 2016 22:18:29 -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=sk:get_com, Hx-languages-length:3641 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:18:27 +0000 Received: from EUSAAHC007.ericsson.se (Unknown_Domain [147.117.188.93]) by usplmg20.ericsson.net (Symantec Mail Security) with SMTP id 56.96.30335.0E728075; Fri, 8 Apr 2016 23:51:28 +0200 (CEST) Received: from elxcz23q12-y4.dyn.mo.ca.am.ericsson.se (147.117.188.8) by smtps-am.internal.ericsson.com (147.117.188.93) with Microsoft SMTP Server (TLS) id 14.3.248.2; Fri, 8 Apr 2016 18:18:24 -0400 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH] Make gdb.server/solib-list.exp work for remote targets Date: Fri, 08 Apr 2016 22:18:00 -0000 Message-ID: <1460153899-5185-1-git-send-email-simon.marchi@ericsson.com> MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2016-04/txt/msg00189.txt.bz2 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