* lib/gdb.exp (gdb_compile): Also set rpath for shlib=, on a
authorNathan Froyd <froydnj@codesourcery.com>
Thu, 12 Nov 2009 17:35:54 +0000 (17:35 +0000)
committerNathan Froyd <froydnj@codesourcery.com>
Thu, 12 Nov 2009 17:35:54 +0000 (17:35 +0000)
remote host.

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

index d50ccc280304bd3357fef09304a0a8391e9f2117..059deaaef54ded9eb09f362cdb701059fbc801a2 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-12  Daniel Jacobowitz  <dan@codesourcery.com>
+           Nathan Froyd  <froydnj@codesourcery.com>
+
+       * lib/gdb.exp (gdb_compile): Also set rpath for shlib=, on a
+       remote host.
+
 2009-11-12  Nathan Froyd  <froydnj@codesourcery.com>
 
        * gdb.base/step-line.exp: Copy step-line.inp to the remote host.
index d42f84ee232464dc558e47e15970805dfe890bed..c9ce9051d6bfc827d1d77439598b57b58c39c8e0 100644 (file)
@@ -1734,6 +1734,7 @@ proc gdb_compile {source dest type options} {
     # "shlib=librarypath" in OPTIONS.
     set new_options ""
     set shlib_found 0
+    set shlib_load 0
     foreach opt $options {
         if [regexp {^shlib=(.*)} $opt dummy_var shlib_name] {
             if [test_compiler_info "xlc-*"] {
@@ -1755,22 +1756,33 @@ proc gdb_compile {source dest type options} {
                }
             }
        } elseif { $opt == "shlib_load" } {
-           if { ([istarget "*-*-mingw*"]
-                 || [istarget *-*-cygwin*]
-                 || [istarget *-*-pe*]
-                 || [istarget arm*-*-symbianelf*]
-                 || [istarget hppa*-*-hpux*])} {
-               # Do not need anything.
-           } elseif { [istarget *-*-openbsd*] } {
-               lappend new_options "additional_flags=-Wl,-rpath,${outdir}"
-           } else {
-               lappend new_options "libs=-ldl"
-               lappend new_options "additional_flags=-Wl,-rpath,\\\$ORIGIN"
-           }
+           set shlib_load 1
         } else {
             lappend new_options $opt
         }
     }
+
+    # We typically link to shared libraries using an absolute path, and
+    # that's how they are found at runtime.  If we are going to
+    # 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 { ([istarget "*-*-mingw*"]
+             || [istarget *-*-cygwin*]
+             || [istarget *-*-pe*]
+             || [istarget arm*-*-symbianelf*]
+             || [istarget hppa*-*-hpux*])} {
+           # Do not need anything.
+       } elseif { [istarget *-*-openbsd*] } {
+           lappend new_options "additional_flags=-Wl,-rpath,${outdir}"
+       } else {
+           if { $shlib_load } {
+               lappend new_options "libs=-ldl"
+           }
+           lappend new_options "additional_flags=-Wl,-rpath,\\\$ORIGIN"
+       }
+    }
     set options $new_options
 
     if [target_info exists gdb_stub] {