skip "attach" tests when testing against stub-like targets

We already skip "attach" tests if the target board is remote, in
dejagnu's sense, as we use TCL's exec to spawn the program on the
build machine.  We should also skip these tests if testing with
"target remote" or other stub-like targets where "attach" doesn't make
sense.

Add a helper procedure that centralizes the checks a test that needs
to spawn a program for testing "attach" and make all test files that
use spawn_wait_for_attach check it.

gdb/testsuite/
2015-01-09  Pedro Alves  <palves@redhat.com>

	* lib/gdb.exp (can_spawn_for_attach): New procedure.
	(spawn_wait_for_attach): Error out if can_spawn_for_attach returns
	false.
	* gdb.base/attach.exp: Use can_spawn_for_attach instead of
	checking whether the target board is remote.
	* gdb.multi/multi-attach.exp: Likewise.
	* gdb.python/py-sync-interp.exp: Likewise.
	* gdb.server/ext-attach.exp: Likewise.
	* gdb.python/py-prompt.exp: Use can_spawn_for_attach before the
	tests that need to attach, instead of checking whether the target
	board is remote at the top of the file.
This commit is contained in:
Pedro Alves 2015-01-09 11:04:19 +00:00
parent 1710aab8af
commit 60b3033e6e
8 changed files with 50 additions and 15 deletions

View File

@ -1,3 +1,17 @@
2015-01-09 Pedro Alves <palves@redhat.com>
* lib/gdb.exp (can_spawn_for_attach): New procedure.
(spawn_wait_for_attach): Error out if can_spawn_for_attach returns
false.
* gdb.base/attach.exp: Use can_spawn_for_attach instead of
checking whether the target board is remote.
* gdb.multi/multi-attach.exp: Likewise.
* gdb.python/py-sync-interp.exp: Likewise.
* gdb.server/ext-attach.exp: Likewise.
* gdb.python/py-prompt.exp: Use can_spawn_for_attach before the
tests that need to attach, instead of checking whether the target
board is remote at the top of the file.
2015-01-08 Yao Qi <yao@codesourcery.com>
* gdb.trace/entry-values.exp: Set call_insn for MIPS target.

View File

@ -25,8 +25,7 @@ if { [istarget "hppa*-*-hpux*"] } {
return 0
}
# are we on a target board
if [is_remote target] then {
if {![can_spawn_for_attach]} {
return 0
}

View File

@ -31,8 +31,7 @@ if [skip_shlib_tests] {
return 0
}
# Are we on a target board? It is required for attaching to a process.
if [is_remote target] {
if {![can_spawn_for_attach]} {
return 0
}

View File

@ -19,8 +19,7 @@
standard_testfile
# We need to use TCL's exec to get the pid.
if [is_remote target] then {
if {![can_spawn_for_attach]} {
return 0
}

View File

@ -18,11 +18,6 @@
standard_testfile
# We need to use TCL's exec to get the pid.
if [is_remote target] then {
return 0
}
load_lib gdb-python.exp
load_lib prompt.exp
@ -80,6 +75,10 @@ gdb_test "python print (\"'\" + str(p\[0\]) + \"'\")" "'$gdb_prompt_fail '" \
"prompt_hook argument is default prompt. 2"
gdb_exit
if {![can_spawn_for_attach]} {
return 0
}
set testpid [spawn_wait_for_attach $binfile]
set GDBFLAGS [concat $tmp_gdbflags " -ex \"set pagination off\""]

View File

@ -20,8 +20,7 @@
standard_testfile
# We need to use TCL's exec to get the pid.
if [is_remote target] then {
if {![can_spawn_for_attach]} {
return 0
}

View File

@ -26,8 +26,7 @@ if { [skip_gdbserver_tests] } {
return 0
}
# We need to use TCL's exec to get the pid.
if [is_remote target] then {
if {![can_spawn_for_attach]} {
return 0
}

View File

@ -3413,12 +3413,39 @@ proc gdb_exit { } {
catch default_gdb_exit
}
# Return true if we can spawn a program on the target and attach to
# it.
proc can_spawn_for_attach { } {
# We use TCL's exec to get the inferior's pid.
if [is_remote target] then {
return 0
}
# The "attach" command doesn't make sense when the target is
# stub-like, where GDB finds the program already started on
# initial connection.
if {[target_info exists use_gdb_stub]} {
return 0
}
# Assume yes.
return 1
}
# Start a set of programs running and then wait for a bit, to be sure
# that they can be attached to. Return a list of the processes' PIDs.
# It's a test error to call this when [can_spawn_for_attach] is false.
proc spawn_wait_for_attach { executable_list } {
set pid_list {}
if ![can_spawn_for_attach] {
# The caller should have checked can_spawn_for_attach itself
# before getting here.
error "can't spawn for attach with this target/board"
}
foreach {executable} $executable_list {
lappend pid_list [eval exec $executable &]
}