Make ftrace tests work with remote targets
[binutils-gdb.git] / gdb / testsuite / lib / gdb.exp
index 4e5c89b0f8733b9feeabddc456678451258e539b..1ef6a9693ed6552c0459f096dc312ab98d4a6421 100644 (file)
@@ -3369,12 +3369,10 @@ proc gdb_compile {source dest type options} {
         }
     }
 
-    # 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 target]) } {
+    # Because we link with libraries using their basename, we may need
+    # (depending on the platform) to set a special rpath value, to allow
+    # the executable to find the libraries it depends on.
+    if { $shlib_load || $shlib_found } {
        if { ([istarget "*-*-mingw*"]
              || [istarget *-*-cygwin*]
              || [istarget *-*-pe*]) } {
@@ -3585,14 +3583,16 @@ proc gdb_compile_shlib {sources dest options} {
                set name ${dest}
            }
            lappend link_options "additional_flags=-Wl,--out-implib,${name}.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).
+       } else {
+           # Set the soname of the library.  This causes the linker on ELF
+           # systems to create the DT_NEEDED entry in the executable referring
+           # to the soname of the library, and not its absolute path.  This
+           # (using the absolute path) would be problem when testing on a
+           # remote target.
+           #
+           # In conjunction with setting the soname, we add the special
+           # rpath=$ORIGIN value when building the executable, so that it's
+           # able to find the library in its own directory.
            set destbase [file tail $dest]
            lappend link_options "additional_flags=-Wl,-soname,$destbase"
        }
@@ -4226,17 +4226,19 @@ proc gdb_remote_download {dest fromfile {tofile {}}} {
 # Copy the listed libraries to the target.
 
 proc gdb_load_shlibs { args } {
-    if {![is_remote target]} {
-       return
-    }
-
     foreach file $args {
        gdb_remote_download target [shlib_target_file $file]
     }
 
-    # Even if the target supplies full paths for shared libraries,
-    # they may not be paths for this system.
-    gdb_test "set solib-search-path [file dirname [lindex $args 0]]" "" ""
+    if {[is_remote target]} {
+       # If the target is remote, we need to tell gdb where to find the
+       # libraries.
+       #
+       # We could set this even when not testing remotely, but a user
+       # generally won't set it unless necessary.  In order to make the tests
+       # more like the real-life scenarios, we don't set it for local testing.
+       gdb_test "set solib-search-path [file dirname [lindex $args 0]]" "" ""
+    }
 }
 
 #