+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 } {