+2016-04-05  Simon Marchi  <simon.marchi@ericsson.com>
+
+       * gdb.trace/ftrace-lock.exp: Check for IPA basename instead of
+       absolute.
+       * gdb.trace/ftrace.exp: Likewise.
+       * lib/gdb.exp (gdb_compile): Set rpath $ORIGIN for non-remote
+       targets as well.
+       (gdb_compile_shlib): Set SONAME for non-remote targets as well.
+       (gdb_load_shlibs): Copy libraries to test directory when testing
+       natively.  Only set solib-search-path if testing remotely.
+       * lib/mi-support.exp (mi_load_shlibs): Likewise.
+
 2016-04-05  Simon Marchi  <simon.marchi@ericsson.com>
 
        * gdb.base/jit-so.exp: Use gdb_remote_download instead of
 
         }
     }
 
-    # 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*]) } {
                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"
        }
 # 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]]" "" ""
+    }
 }
 
 #
 
 
 # Download shared libraries to the target.
 proc mi_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.
-    mi_gdb_test "set solib-search-path [file dirname [lindex $args 0]]" "\^done" ""
+    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.
+       mi_gdb_test "set solib-search-path [file dirname [lindex $args 0]]" "\^done" ""
+    }
 }
 
 proc mi_check_thread_states { states test } {