mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
Eliminate is_remote check in gdb.base/scope.exp
This commit makes --target_board=native-gdbserver (and in principle all other is_remote boards) pass all the same gdb.base/scope.exp tests as native testing. I first wrote the gdb.base/scope.exp change described in the ChangeLog below and in the new comments in the patch, knowing that gdb_file_cmd was the right thing to use here. However, that revealed that the native-extended-gdbserver board should be overriding gdb_file_cmd+gdb_reload instead of gdb_load, as is hinted at by the comments on top of the default implementations in testsuite/lib/gdb.exp, because otherwise a gdb_run_cmd after gdb_file_cmd misses setting "set remote exec-file". However, if we do that and remove gdb_load, then we regress gdb.base/dbx.exp, so for now keep the gdb_load override as well. gdb/testsuite/ChangeLog: 2017-10-13 Pedro Alves <palves@redhat.com> * gdb.base/scope.exp: Use build_executable + clean_restart + gdb_file_cmd instead of prepare_for_testing and no longer skip "before run" tests on is_remote target boards. Update comments. * boards/native-extended-gdbserver.exp (extended_gdbserver_load_last_file): New, factored out from ... (gdb_load): ... this. Move further below and add comment. (extended_gdbserver_gdb_file_cmd, gdb_file_cmd, gdb_reload): New.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
2017-10-13 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* gdb.base/scope.exp: Use build_executable + clean_restart +
|
||||||
|
gdb_file_cmd instead of prepare_for_testing and no longer skip
|
||||||
|
"before run" tests on is_remote target boards. Update comments.
|
||||||
|
* boards/native-extended-gdbserver.exp
|
||||||
|
(extended_gdbserver_load_last_file): New, factored out from ...
|
||||||
|
(gdb_load): ... this. Move further below and add comment.
|
||||||
|
(extended_gdbserver_gdb_file_cmd, gdb_file_cmd, gdb_reload): New.
|
||||||
|
|
||||||
2017-10-12 Pedro Alves <palves@redhat.com>
|
2017-10-12 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* gdb.base/attach.exp: Remove references to gdb64.
|
* gdb.base/attach.exp: Remove references to gdb64.
|
||||||
|
@ -80,17 +80,12 @@ proc mi_gdb_start { args } {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Overriden in order to set the remote exec-file whenever a file is
|
# Helper that runs "set remote exec-file" with the last loaded file.
|
||||||
# loaded to gdb.
|
|
||||||
#
|
proc extended_gdbserver_load_last_file {} {
|
||||||
proc gdb_load { arg } {
|
|
||||||
global gdb_prompt
|
global gdb_prompt
|
||||||
global last_loaded_file
|
global last_loaded_file
|
||||||
|
|
||||||
if { $arg != "" } {
|
|
||||||
if [gdb_file_cmd $arg] then { return -1 }
|
|
||||||
}
|
|
||||||
|
|
||||||
send_gdb "set remote exec-file $last_loaded_file\n"
|
send_gdb "set remote exec-file $last_loaded_file\n"
|
||||||
gdb_expect {
|
gdb_expect {
|
||||||
-re "$gdb_prompt $" {}
|
-re "$gdb_prompt $" {}
|
||||||
@ -103,6 +98,37 @@ proc gdb_load { arg } {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Overriden in order to set the remote exec-file whenever a file is
|
||||||
|
# loaded to gdb.
|
||||||
|
#
|
||||||
|
if { [info procs extended_gdbserver_gdb_file_cmd] == "" } {
|
||||||
|
rename gdb_file_cmd extended_gdbserver_gdb_file_cmd
|
||||||
|
}
|
||||||
|
proc gdb_file_cmd { arg } {
|
||||||
|
if [extended_gdbserver_gdb_file_cmd $arg] {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
return [extended_gdbserver_load_last_file]
|
||||||
|
}
|
||||||
|
|
||||||
|
proc gdb_reload { } {
|
||||||
|
return [extended_gdbserver_load_last_file]
|
||||||
|
}
|
||||||
|
|
||||||
|
# With the two procedure overrides above, it shouldn't be necessary to
|
||||||
|
# override this one too. However, not doing so regresses
|
||||||
|
# gdb.base/dbx.exp. See comments above gdb.base/dbx.exp:gdb_file_cmd.
|
||||||
|
# Once testing of the "symbol-file"/"exec-file" commands is moved out
|
||||||
|
# to a separate non-dbx testcase, we should be able to remove this.
|
||||||
|
proc gdb_load { arg } {
|
||||||
|
if { $arg != "" } {
|
||||||
|
if [gdb_file_cmd $arg] then { return -1 }
|
||||||
|
}
|
||||||
|
|
||||||
|
return [extended_gdbserver_load_last_file]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Likewise, for MI.
|
# Likewise, for MI.
|
||||||
#
|
#
|
||||||
if { [info procs extended_gdbserver_mi_gdb_load] == "" } {
|
if { [info procs extended_gdbserver_mi_gdb_load] == "" } {
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
standard_testfile scope0.c scope1.c
|
standard_testfile scope0.c scope1.c
|
||||||
|
|
||||||
if {[prepare_for_testing "failed to prepare" ${testfile} \
|
if {[build_executable "failed to build" ${testfile} \
|
||||||
[list $srcfile $srcfile2] {debug}]} {
|
[list $srcfile $srcfile2] {debug}]} {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
@ -497,6 +497,13 @@ proc test_at_localscopes {} {
|
|||||||
gdb_stop_suppressing_tests
|
gdb_stop_suppressing_tests
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Note, we don't pass a binfile to clean_restart because we need to
|
||||||
|
# avoid gdb_load here. With remote targets, gdb_load connects to the
|
||||||
|
# remote target, and we specificaly want the following tests to run
|
||||||
|
# before the program is started.
|
||||||
|
clean_restart
|
||||||
|
gdb_file_cmd $binfile
|
||||||
|
|
||||||
# Test that variables in various segments print out correctly before
|
# Test that variables in various segments print out correctly before
|
||||||
# the program is run.
|
# the program is run.
|
||||||
|
|
||||||
@ -505,21 +512,15 @@ setup_xfail "rs6000-*-*"
|
|||||||
|
|
||||||
gdb_test "print 'scope0.c'::filelocal_ro" "= 201"
|
gdb_test "print 'scope0.c'::filelocal_ro" "= 201"
|
||||||
|
|
||||||
# gdb currently cannot access bss memory on some targets if the inferior
|
# Check that gdb can access bss memory if the inferior is not running.
|
||||||
# is not running.
|
|
||||||
#
|
#
|
||||||
# For PA boards using monitor/remote-pa.c, the bss test is going to
|
# Note the care above about avoiding gdb_load. Otherwise, for
|
||||||
# randomly fail. We've already put remote-pa on the target stack,
|
# embedded stub-like boards, this test would randomly fail. If we'd
|
||||||
# so we actually read memory from the board. Problem is crt0.o
|
# already put target remote on the target stack, we'd read memory from
|
||||||
# is responsible for clearing bss and that hasnt' happened yet.
|
# the board instead of the program's binary, and we would have
|
||||||
#
|
# connected before crt0.o had had a chance to clear bss.
|
||||||
# This is a problem for all non-native targets. -- manson
|
gdb_test "print 'scope0.c'::filelocal_bss" "= 0" \
|
||||||
if [is_remote target] {
|
"print 'scope0.c'::filelocal_bss before run"
|
||||||
unsupported "print 'scope0.c'::filelocal_bss before run"
|
|
||||||
} else {
|
|
||||||
gdb_test "print 'scope0.c'::filelocal_bss" "= 0" \
|
|
||||||
"print 'scope0.c'::filelocal_bss before run"
|
|
||||||
}
|
|
||||||
|
|
||||||
gdb_test "print 'scope0.c'::filelocal" "= 1" \
|
gdb_test "print 'scope0.c'::filelocal" "= 1" \
|
||||||
"print 'scope0.c'::filelocal before run"
|
"print 'scope0.c'::filelocal before run"
|
||||||
|
Reference in New Issue
Block a user