Make gdb.server/solib-list.exp work for remote targets
[binutils-gdb.git] / gdb / testsuite / gdb.server / solib-list.exp
index ae6bfc60be09e6db11027ee6164173a74992b320..f60dcb8deeafd675a6c24027310d064f2240fa57 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2010-2015 Free Software Foundation, Inc.
+# Copyright 2010-2016 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -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,10 +48,17 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
     gdb_exit
     gdb_start
     gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${interp_system}
-    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" ".*"
@@ -72,8 +70,12 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
     # But GDB having symbols from the main executable it would try to use
     # displaced-stepping buffer at unmapped that time address _start.
     gdb_test "set displaced-stepping off"
-       
-    set res [gdbserver_spawn ${binfile}]
+
+    # 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} ${remote_binfile}"]
     set gdbserver_protocol [lindex $res 0]
     set gdbserver_gdbport [lindex $res 1]
 
@@ -92,15 +94,6 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
        }
     }
 
-    if $nonstop {
-       set test "non-stop interior stop"
-       gdb_test_multiple "" $test {
-           -re " #1 stopped\\.\r\n" {
-               pass $test
-           }
-       }
-    }
-
     gdb_test "continue" "Program received signal SIGUSR1, .*"
     gdb_test "sharedlibrary" ".*"
     gdb_test "p libvar" " = 23"