From: Pedro Alves Date: Fri, 9 Jan 2015 11:04:19 +0000 (+0000) Subject: skip "attach" tests when testing against stub-like targets X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=60b3033e6e2936af6fcc37cf67cade99a89940ad;p=binutils-gdb.git 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 * 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. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 2154036071b..1a676409e45 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2015-01-09 Pedro Alves + + * 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 * gdb.trace/entry-values.exp: Set call_insn for MIPS target. diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp index 7253bad3bcc..38b19b5624e 100644 --- a/gdb/testsuite/gdb.base/attach.exp +++ b/gdb/testsuite/gdb.base/attach.exp @@ -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 } diff --git a/gdb/testsuite/gdb.base/solib-overlap.exp b/gdb/testsuite/gdb.base/solib-overlap.exp index fbe4b85df21..ad96d02b82e 100644 --- a/gdb/testsuite/gdb.base/solib-overlap.exp +++ b/gdb/testsuite/gdb.base/solib-overlap.exp @@ -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 } diff --git a/gdb/testsuite/gdb.multi/multi-attach.exp b/gdb/testsuite/gdb.multi/multi-attach.exp index 28b7fbef7df..8a7bb089fbc 100644 --- a/gdb/testsuite/gdb.multi/multi-attach.exp +++ b/gdb/testsuite/gdb.multi/multi-attach.exp @@ -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 } diff --git a/gdb/testsuite/gdb.python/py-prompt.exp b/gdb/testsuite/gdb.python/py-prompt.exp index 28f5e9aa104..55f0f5966eb 100644 --- a/gdb/testsuite/gdb.python/py-prompt.exp +++ b/gdb/testsuite/gdb.python/py-prompt.exp @@ -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\""] diff --git a/gdb/testsuite/gdb.python/py-sync-interp.exp b/gdb/testsuite/gdb.python/py-sync-interp.exp index 595db3d950a..0ea31104be9 100644 --- a/gdb/testsuite/gdb.python/py-sync-interp.exp +++ b/gdb/testsuite/gdb.python/py-sync-interp.exp @@ -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 } diff --git a/gdb/testsuite/gdb.server/ext-attach.exp b/gdb/testsuite/gdb.server/ext-attach.exp index a1beb6c1756..f3cbcf65e76 100644 --- a/gdb/testsuite/gdb.server/ext-attach.exp +++ b/gdb/testsuite/gdb.server/ext-attach.exp @@ -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 } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index dcc2f942975..fc6bc83363b 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -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 &] }