Make gdb_load_shlibs return the destination path of the library

This patch makes gdb_load_shlibs return the destination path of the
copied library.  To make the procedure implementation and interface more
straightforward, it also changes it so that it accepts a single shared
library path at the time.  Therefore, calls that are passed multiple
libraries:

  gdb_load_shlibs $lib1 $lib2

must be changed to separate calls:

  gdb_load_shlibs $lib1
  gdb_load_shlibs $lib2

A subtle impact is the solib-search-path handling.  In the former
version, solib-search-path is set using the directory of the first
passed lib (further calls overwrite the value).  In the later version,
the directory of the library passed to the last call to gdb_load_shlibs
remnains.  I don't think that's a problem in practice, since if we had
tests that needed multiple different paths in solib-search-path, they
wouldn't work in the first place.

Changed in v2:

	* Split behavioural and rename changes in two separate patches.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (gdb_load_shlibs):  Accept a single argument.  Return
	result of gdb_remote_download.
	* gdb.base/ctxobj.exp: Split gdb_load_shlibs call.
	* gdb.base/dso2dso.exp: Likewise.
	* gdb.base/global-var-nested-by-dso.exp: Likewise.
	* gdb.base/print-file-var.exp: Likewise.
	* gdb.base/shlib-call.exp: Likewise.
	* gdb.base/shreloc.exp: Likewise.
	* gdb.base/solib-overlap.exp: Likewise.
	* gdb.base/solib-weak.exp (do_test): Likewise.
	* gdb.base/unload.exp: Likewise.
This commit is contained in:
Simon Marchi 2016-04-27 18:07:44 -04:00
parent 57809e5e5a
commit fca4cfd9ec
11 changed files with 38 additions and 15 deletions

View File

@ -1,3 +1,17 @@
2016-04-27 Simon Marchi <simon.marchi@ericsson.com>
* lib/gdb.exp (gdb_load_shlibs): Accept a single argument. Return
result of gdb_remote_download.
* gdb.base/ctxobj.exp: Split gdb_load_shlibs call.
* gdb.base/dso2dso.exp: Likewise.
* gdb.base/global-var-nested-by-dso.exp: Likewise.
* gdb.base/print-file-var.exp: Likewise.
* gdb.base/shlib-call.exp: Likewise.
* gdb.base/shreloc.exp: Likewise.
* gdb.base/solib-overlap.exp: Likewise.
* gdb.base/solib-weak.exp (do_test): Likewise.
* gdb.base/unload.exp: Likewise.
2016-04-27 Yao Qi <yao.qi@linaro.org>
* gdb.base/branch-to-self.exp: Skip it if gdb,nosignals

View File

@ -55,7 +55,8 @@ if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \
}
clean_restart $executable
gdb_load_shlibs $libobj1 $libobj2
gdb_load_shlibs $libobj1
gdb_load_shlibs $libobj2
if ![runto_main] {
untested "could not run to main"

View File

@ -57,7 +57,8 @@ if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable \
}
clean_restart $binfile
gdb_load_shlibs $binfile_libdso2 $binfile_libdso1
gdb_load_shlibs $binfile_libdso2
gdb_load_shlibs $binfile_libdso1
if { ![runto_main] } {
return -1

View File

@ -45,7 +45,8 @@ if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable \
}
clean_restart $binfile
gdb_load_shlibs $binfile_lib1 $binfile_lib2
gdb_load_shlibs $binfile_lib1
gdb_load_shlibs $binfile_lib2
if { ![runto_main] } {
return -1

View File

@ -46,7 +46,8 @@ if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \
}
clean_restart $executable
gdb_load_shlibs $libobj1 $libobj2
gdb_load_shlibs $libobj1
gdb_load_shlibs $libobj2
if ![runto_main] {
untested "could not run to main"

View File

@ -57,7 +57,8 @@ if { [gdb_compile_shlib ${lib1src} ${lib1} $lib_opts] != ""
# Start with a fresh gdb.
clean_restart ${binfile}
gdb_load_shlibs $lib1 $lib2
gdb_load_shlibs $lib1
gdb_load_shlibs $lib2
gdb_test_no_output "set print sevenbit-strings"
gdb_test_no_output "set print address off"

View File

@ -72,7 +72,8 @@ if { [gdb_compile_shlib $lib1src $lib1_sl $lib_opts] != ""} {
# Start with a fresh gdb.
clean_restart $binfile
gdb_load_shlibs $lib1_sl $lib2_sl
gdb_load_shlibs $lib1_sl
gdb_load_shlibs $lib2_sl
# Load up the shared objects
if ![runto_main] then {

View File

@ -99,7 +99,8 @@ foreach prelink_lib1 {0x40000000 0x50000000} { with_test_prefix "$prelink_lib1"
clean_restart ${binfile_base}
# This testcase currently does not support remote targets.
# gdb_load_shlibs ${binfile_lib1} ${binfile_lib2}
# gdb_load_shlibs ${binfile_lib1}
# gdb_load_shlibs ${binfile_lib2}
# Here we should get:
# warning: .dynamic section for ".../solib-overlap-lib1.so" is not at the expected address (wrong library or version mismatch?)

View File

@ -94,7 +94,8 @@ proc do_test { lib1opts lib2opts lib1first } {
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_load_shlibs $lib1 $lib2
gdb_load_shlibs $lib1
gdb_load_shlibs $lib2
runto_main

View File

@ -62,7 +62,8 @@ gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_load_shlibs $lib_sl $lib_sl2
gdb_load_shlibs $lib_sl
gdb_load_shlibs $lib_sl2
#
# Test setting a breakpoint in a dynamically loaded library which is

View File

@ -4231,12 +4231,10 @@ proc gdb_remote_download {dest fromfile {tofile {}}} {
# gdb_load_shlibs LIB...
#
# Copy the listed libraries to the target.
# Copy the listed library to the target.
proc gdb_load_shlibs { args } {
foreach file $args {
gdb_remote_download target [shlib_target_file $file]
}
proc gdb_load_shlibs { file } {
set dest [gdb_remote_download target [shlib_target_file $file]]
if {[is_remote target]} {
# If the target is remote, we need to tell gdb where to find the
@ -4245,8 +4243,10 @@ proc gdb_load_shlibs { args } {
# 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]]" "" ""
gdb_test "set solib-search-path [file dirname $file]" "" ""
}
return $dest
}
#