diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/gdbserver/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/gdbserver/Makefile.in | 2 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/ftrace-lock.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/ftrace.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 44 | ||||
-rw-r--r-- | gdb/testsuite/lib/mi-support.exp | 16 |
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 } { |