* lib/gdb.exp (gdb_compile): Specify rpath if the *target* is
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 15 Jul 2011 14:10:26 +0000 (14:10 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Fri, 15 Jul 2011 14:10:26 +0000 (14:10 +0000)
a remote machine, not the host.
(gdb_compile_shlib): Set soname if target is remote.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdb.exp

index 569f0954a020830ec995034b3496b24939ad8292..3befd3b93c7e17c2602430cb9daa40749976c6c8 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-15  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+       * lib/gdb.exp (gdb_compile): Specify rpath if the *target* is
+       a remote machine, not the host.
+       (gdb_compile_shlib): Set soname if target is remote.
+
 2011-07-14  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
        * gdb.cp/minsym-fallback.exp: Link in C++ mode.
index d69527d9d642ff9f1b7d568552f8c4939cb68c5a..7ddcb13d4e59647bfa8ac31f3223f7b526294ab4 100644 (file)
@@ -2168,7 +2168,7 @@ proc gdb_compile {source dest type options} {
     # dynamically load one by basename, we must specify rpath.  If we
     # are using a remote host, DejaGNU will link to the shared library
     # using a relative path, so again we must specify an rpath.
-    if { $shlib_load || ($shlib_found && [is_remote host]) } {
+    if { $shlib_load || ($shlib_found && [is_remote target]) } {
        if { ([istarget "*-*-mingw*"]
              || [istarget *-*-cygwin*]
              || [istarget *-*-pe*]
@@ -2383,7 +2383,17 @@ proc gdb_compile_shlib {sources dest options} {
                 || [istarget *-*-cygwin*]
                 || [istarget *-*-pe*])} {
               lappend link_options "additional_flags=-Wl,--out-implib,${dest}.a"
-          }
+          } elseif [is_remote target] {
+            # By default, we do not set the soname.  This causes the linker
+            # on ELF systems to create a DT_NEEDED entry in the executable
+            # refering to the full path name of the library.  This is a
+            # problem in remote testing if the library is in a different
+            # directory there.  To fix this, we set a soname of just the
+            # base filename for the library, and add an appropriate -rpath
+            # to the main executable (in gdb_compile).
+             set destbase [file tail $dest]
+             lappend link_options "additional_flags=-Wl,-soname,$destbase"
+           }
        }
        if {[gdb_compile "${objects}" "${dest}" executable $link_options] != ""} {
            return -1