Fix gdb.server/solib-list.exp regression
Commit 7817ea4614
(Improve gdb_remote_download, remove gdb_download)
caused:
FAIL: gdb.server/solib-list.exp: non-stop 0: target extended-remote (timeout)
FAIL: gdb.server/solib-list.exp: non-stop 0: continue (the program is no longer running)
FAIL: gdb.server/solib-list.exp: non-stop 0: p libvar
FAIL: gdb.server/solib-list.exp: non-stop 1: target extended-remote (timeout)
FAIL: gdb.server/solib-list.exp: non-stop 1: continue (the program is no longer running)
FAIL: gdb.server/solib-list.exp: non-stop 1: p libvar
gdb.log shows:
system interpreter is: /lib64/ld-linux-x86-64.so.2
...
spawn ../gdbserver/gdbserver --once :2347 /home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite/outputs/gdb.server/solib-list/ld-linux-x86-64.so.2 /home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite/outputs/gdb.server/solib-list/solib-list
Process /home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite/outputs/gdb.server/solib-list/ld-linux-x86-64.so.2 created; pid = 18637
Cannot exec /home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite/outputs/gdb.server/solib-list/ld-linux-x86-64.so.2: No such file or directory.
...
The test copied the interpreter to the outputs directory, however
ld-linux-x86-64.so.2 is a relative symlink that when copied points
nowhere:
$ ls -l testsuite/outputs/gdb.server/solib-list/
total 52
-rwxrwxr-x. 1 pedro pedro 13450 Apr 7 10:52 gdb.log
-rw-rw-r--. 1 pedro pedro 1512 Apr 7 10:52 gdb.sum
lrwxrwxrwx. 1 pedro pedro 10 Apr 7 11:39 ld-linux-x86-64.so.2 -> ld-2.22.so
-rwxrwxr-x. 1 pedro pedro 9464 Apr 7 11:39 solib-list
-rw-rw-r--. 1 pedro pedro 3472 Apr 7 11:39 solib-list-lib.c.o
-rw-rw-r--. 1 pedro pedro 2760 Apr 7 11:39 solib-list.o
-rwxrwxr-x. 1 pedro pedro 9232 Apr 7 11:39 solib-list.so
The copying comes from gdbserver_spawn ->
gdbserver_download_current_prog -> gdb_remote_download.
There's actually no need to download the interpreter to the target -
it's part of the target system/environment. So fix this by making the
test just not use gdb_load (and gdb_file_cmd as consequence) at all,
and instead pass the interpreter filename to gdbserver as an argument.
gdb/testsuite/ChangeLog:
2016-04-08 Pedro Alves <palves@redhat.com>
* gdb.server/solib-list.exp: Don't use gdb_load. Instead pass the
interpreter filename as argument to gdbserver_spawn.
* lib/gdbserver-support.exp (gdbserver_download_current_prog):
Return empty if $last_loaded_file does not exist.
This commit is contained in:
parent
4bf7b526be
commit
096be756aa
|
@ -1,3 +1,10 @@
|
||||||
|
2016-04-08 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* gdb.server/solib-list.exp: Don't use gdb_load. Instead pass the
|
||||||
|
interpreter filename as argument to gdbserver_spawn.
|
||||||
|
* lib/gdbserver-support.exp (gdbserver_download_current_prog):
|
||||||
|
Return empty if $last_loaded_file does not exist.
|
||||||
|
|
||||||
2016-04-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2016-04-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
Fix compatibility with gcc-4.8.5-4.el7.x86_64.
|
Fix compatibility with gcc-4.8.5-4.el7.x86_64.
|
||||||
|
|
|
@ -57,7 +57,6 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
|
||||||
gdb_exit
|
gdb_exit
|
||||||
gdb_start
|
gdb_start
|
||||||
gdb_reinitialize_dir $srcdir/$subdir
|
gdb_reinitialize_dir $srcdir/$subdir
|
||||||
gdb_load ${interp_system}
|
|
||||||
gdb_load_shlibs ${binfile}
|
gdb_load_shlibs ${binfile}
|
||||||
gdb_load_shlibs ${binlibfile}
|
gdb_load_shlibs ${binlibfile}
|
||||||
|
|
||||||
|
@ -72,8 +71,12 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
|
||||||
# But GDB having symbols from the main executable it would try to use
|
# But GDB having symbols from the main executable it would try to use
|
||||||
# displaced-stepping buffer at unmapped that time address _start.
|
# displaced-stepping buffer at unmapped that time address _start.
|
||||||
gdb_test "set displaced-stepping off"
|
gdb_test "set displaced-stepping off"
|
||||||
|
|
||||||
set res [gdbserver_spawn ${binfile}]
|
# Note we pass ${interp_system}, the program gdbserver spawns, as
|
||||||
|
# argument here, instead of using gdb_load, because we don't want
|
||||||
|
# to download the interpreter to the target (it's already there)
|
||||||
|
# or to the test output directory.
|
||||||
|
set res [gdbserver_spawn "${interp_system} ${binfile}"]
|
||||||
set gdbserver_protocol [lindex $res 0]
|
set gdbserver_protocol [lindex $res 0]
|
||||||
set gdbserver_gdbport [lindex $res 1]
|
set gdbserver_gdbport [lindex $res 1]
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,10 @@ proc gdbserver_download_current_prog { } {
|
||||||
global gdbserver_server_exec
|
global gdbserver_server_exec
|
||||||
global last_loaded_file
|
global last_loaded_file
|
||||||
|
|
||||||
|
if { ![info exists last_loaded_file] } {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
set host_exec $last_loaded_file
|
set host_exec $last_loaded_file
|
||||||
|
|
||||||
# If we already downloaded a file to the target, see if we can reuse it.
|
# If we already downloaded a file to the target, see if we can reuse it.
|
||||||
|
|
Loading…
Reference in New Issue