This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Make gdb.server/solib-list.exp work for remote targets


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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]