aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/gdbserver/ChangeLog4
-rw-r--r--gdb/gdbserver/Makefile.in2
-rw-r--r--gdb/testsuite/ChangeLog12
-rw-r--r--gdb/testsuite/gdb.trace/ftrace-lock.exp2
-rw-r--r--gdb/testsuite/gdb.trace/ftrace.exp2
-rw-r--r--gdb/testsuite/lib/gdb.exp44
-rw-r--r--gdb/testsuite/lib/mi-support.exp16
7 files changed, 51 insertions, 31 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index a94cf03..8b8c2c1 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,7 @@
+2016-04-05 Simon Marchi <simon.marchi@ericsson.com>
+
+ * Makefile.in ($(IPA_LIB)): Set SONAME of the IPA lib.
+
2016-04-05 Marcin Koƛcielnicki <koriakin@0x04.net>
* tracepoint.c (getauxval): Move to #ifdef IN_PROCESS_AGENT.
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 953c07a..8bf3376 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -327,7 +327,7 @@ IPA_LIB=libinproctrace.so
$(IPA_LIB): $(IPA_OBJS) ${ADD_DEPS} ${CDEPS}
rm -f $(IPA_LIB)
- $(CC_LD) -shared -fPIC -Wl,--no-undefined $(INTERNAL_CFLAGS) \
+ $(CC_LD) -shared -fPIC -Wl,--soname=$(IPA_LIB) -Wl,--no-undefined $(INTERNAL_CFLAGS) \
$(INTERNAL_LDFLAGS) -o $(IPA_LIB) ${IPA_OBJS} -ldl -pthread
# Put the proper machine-specific files first, so M-. on a machine
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 32c20de..69aea5e 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,17 @@
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
gdb_download. Use it even if the target is not remote.
* gdb.base/jit.exp (compile_jit_test): Likewise.
diff --git a/gdb/testsuite/gdb.trace/ftrace-lock.exp b/gdb/testsuite/gdb.trace/ftrace-lock.exp
index 0b73086..077a261 100644
--- a/gdb/testsuite/gdb.trace/ftrace-lock.exp
+++ b/gdb/testsuite/gdb.trace/ftrace-lock.exp
@@ -64,7 +64,7 @@ if ![runto_main] {
return -1
}
-if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
+if { [gdb_test "info sharedlibrary" ".*[file tail ${libipa}].*" "IPA loaded"] != 0 } {
untested "Could not find IPA lib loaded"
return 1
}
diff --git a/gdb/testsuite/gdb.trace/ftrace.exp b/gdb/testsuite/gdb.trace/ftrace.exp
index 4736f0f..23e7d1e 100644
--- a/gdb/testsuite/gdb.trace/ftrace.exp
+++ b/gdb/testsuite/gdb.trace/ftrace.exp
@@ -213,7 +213,7 @@ proc test_ftrace_condition { condexp var list } \
gdb_reinitialize_dir $srcdir/$subdir
-if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
+if { [gdb_test "info sharedlibrary" ".*[file tail ${libipa}].*" "IPA loaded"] != 0 } {
untested "Could not find IPA lib loaded"
return 1
}
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 4e5c89b..1ef6a96 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -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]]" "" ""
+ }
}
#
diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp
index cf3005d..87ce634 100644
--- a/gdb/testsuite/lib/mi-support.exp
+++ b/gdb/testsuite/lib/mi-support.exp
@@ -1955,17 +1955,19 @@ proc check_mi_and_console_threads {name} {
# 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 } {