diff options
-rw-r--r-- | gdb/testsuite/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/attach.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/solib-overlap.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/multi-attach.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-prompt.exp | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-sync-interp.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.server/ext-attach.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 27 |
8 files changed, 50 insertions, 15 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 2154036..1a67640 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -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. diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp index 7253bad..38b19b5 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 fbe4b85..ad96d02 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 28b7fbe..8a7bb08 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 28f5e9a..55f0f59 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 595db3d..0ea3110 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 a1beb6c..f3cbcf6 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 dcc2f94..fc6bc83 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 &] } |