[v2,1/3] Target remote mode fork and exec tests
Commit Message
This is an updated version of the target remote fork/exec event
test changes. The only difference from the previous version of
the patch is that gdb.trace/report.exp was modified to account for
pid.tid style thread numbering.
Thanks
--Don
This patch updates tests for fork and exec events in target remote mode.
In the majority of cases this was a simple matter of removing some
code that disabled the test for target remote. In a few cases the
test needed to be disabled; in those cases the gdb_protocol was checked
instead of using the [is_remote target] etc.
In a couple of cases we needed to use clean_restart, since target remote
doesn't support the run command, and in one case we had to modify an
expect expression to allow for a "multiprocess-style" ptid.
Tested with the patch that implemented target remote mode fork and exec
event support.
gdb/testsuite/
2015-12-07 Don Breazeal <donb@codesourcery.com>
* gdb.base/execl-update-breakpoints.exp (main): Enable for target
remote.
* gdb.base/foll-exec-mode.exp (main): Disable for target remote.
* gdb.base/foll-exec.exp (main): Enable for target remote.
* gdb.base/foll-fork.exp (main): Likewise.
* gdb.base/foll-vfork.exp (main): Likewise.
* gdb.base/multi-forks.exp (main): Likewise, and use clean_restart.
(proc continue_to_exit_bp_loc): Use clean_restart.
* gdb.base/pie-execl.exp (main): Disable for target remote.
* gdb.base/watch-vfork.exp (main): Enable for target remote.
* gdb.mi/mi-nsthrexec.exp (main): Likewise.
* gdb.threads/execl.exp (main): Likewise.
* gdb.threads/fork-child-threads.exp (main): Likewise.
* gdb.threads/fork-plus-threads.exp (main): Disable for target
remote.
* gdb.threads/fork-thread-pending.exp (main): Enable for target
remote.
* gdb.threads/linux-dp.exp (check_philosopher_stack): Allow
pid.tid style ptids, instead of just tid.
* gdb.threads/thread-execl.exp (main): Enable for target remote.
* gdb.threads/watchpoint-fork.exp (main): Likewise.
* gdb.trace/report.exp (use_collected_data): Allow pid.tid style
ptids, instead of just tid.
---
gdb/testsuite/gdb.base/execl-update-breakpoints.exp | 6 ------
gdb/testsuite/gdb.base/foll-exec-mode.exp | 8 ++++++--
gdb/testsuite/gdb.base/foll-exec.exp | 4 ----
gdb/testsuite/gdb.base/foll-fork.exp | 4 ----
gdb/testsuite/gdb.base/foll-vfork.exp | 4 ----
gdb/testsuite/gdb.base/multi-forks.exp | 6 ++----
gdb/testsuite/gdb.base/pie-execl.exp | 10 ++++++----
gdb/testsuite/gdb.base/watch-vfork.exp | 5 -----
gdb/testsuite/gdb.mi/mi-nsthrexec.exp | 5 -----
gdb/testsuite/gdb.threads/execl.exp | 4 ----
gdb/testsuite/gdb.threads/fork-child-threads.exp | 4 ----
gdb/testsuite/gdb.threads/fork-plus-threads.exp | 8 ++++++++
gdb/testsuite/gdb.threads/fork-thread-pending.exp | 6 ------
gdb/testsuite/gdb.threads/linux-dp.exp | 4 ++--
gdb/testsuite/gdb.threads/thread-execl.exp | 5 -----
gdb/testsuite/gdb.threads/watchpoint-fork.exp | 5 -----
gdb/testsuite/gdb.trace/report.exp | 2 +-
17 files changed, 25 insertions(+), 65 deletions(-)
Comments
On 12/07/2015 10:14 PM, Don Breazeal wrote:
> +# In remote mode we cannot use the 'set args' command, and this
> +# test requires it.
> +if { [target_info exists gdb_protocol] } then {
> + if { [target_info gdb_protocol] == "remote" } then {
> + continue
> + }
> }
>
It looks a little odd to me not to merge that into a single if:
if { [target_info exists gdb_protocol]
&& [target_info gdb_protocol] == "remote" } {
continue
}
> if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
> diff --git a/gdb/testsuite/gdb.threads/fork-plus-threads.exp b/gdb/testsuite/gdb.threads/fork-plus-threads.exp
> index 2b34b6c..d5a915b 100644
> --- a/gdb/testsuite/gdb.threads/fork-plus-threads.exp
> +++ b/gdb/testsuite/gdb.threads/fork-plus-threads.exp
> @@ -20,6 +20,14 @@
> #
> # See https://sourceware.org/bugzilla/show_bug.cgi?id=18600
>
> +# In remote mode, we cannot continue debugging after all
> +# inferiors have terminated, and this test requires that.
> +if { [target_info exists gdb_protocol] } then {
> + if { [target_info gdb_protocol] == "remote" } then {
> + continue
> + }
> +}
Likewise.
In any case, this is OK.
Thanks,
Pedro Alves
@@ -16,12 +16,6 @@
# Test that when following an exec, we don't try to insert breakpoints
# in the new image at the addresses the symbols had before the exec.
-# Remote protocol does not support follow-exec notifications.
-
-if [is_remote target] {
- continue
-}
-
standard_testfile
# Build two copies of the program, each linked at a different address.
@@ -26,8 +26,12 @@
# be a breakpoint in order to stop after the exec, even if we use
# a single-step command to execute past the exec.
-if { [is_remote target] || ![isnative] } then {
- continue
+# Remote mode doesn't support the 'run' command, which is
+# required for follow-exec-mode testing.
+if { [target_info exists gdb_protocol] } then {
+ if { [target_info gdb_protocol] == "remote" } then {
+ continue
+ }
}
# Until "catch exec" is implemented on other targets...
@@ -16,10 +16,6 @@
# This is a test of gdb's ability to follow a process through a
# Unix exec() system call.
-if { [is_remote target] || ![isnative] } then {
- continue
-}
-
# Until "catch exec" is implemented on other targets...
#
if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
@@ -13,10 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-if { [is_remote target] || ![isnative] } then {
- continue
-}
-
# Until "set follow-fork-mode" and "catch fork" are implemented on
# other targets...
#
@@ -18,10 +18,6 @@
# either execs or exits --- since those events take somewhat different
# code paths in GDB, both variants are exercised.
-if { [is_remote target] || ![isnative] } then {
- continue
-}
-
# Until "set follow-fork-mode" and "catch vfork" are implemented on
# other targets...
#
@@ -13,10 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-if { [is_remote target] || ![isnative] } then {
- continue
-}
-
# Until "set follow-fork-mode" and "catch fork" are implemented on
# other targets...
#
@@ -111,6 +107,7 @@ proc continue_to_exit_bp_loc {} {
# First set gdb to follow the child.
# The result should be that each of the 4 forks returns zero.
+clean_restart ${binfile}
runto_main
gdb_test_no_output "set follow-fork child"
continue_to_exit_bp_loc
@@ -120,6 +117,7 @@ gdb_test "print pids" "\\$.* = \\{0, 0, 0, 0\\}.*" "follow child, print pids"
# Now set gdb to follow the parent.
# Result should be that none of the 4 forks returns zero.
+clean_restart ${binfile}
runto_main
gdb_test_no_output "set follow-fork parent" ""
continue_to_exit_bp_loc
@@ -23,10 +23,12 @@ if ![istarget *-linux*] {
continue
}
-# Remote protocol does not support follow-exec notifications.
-
-if [is_remote target] {
- continue
+# In remote mode we cannot use the 'set args' command, and this
+# test requires it.
+if { [target_info exists gdb_protocol] } then {
+ if { [target_info gdb_protocol] == "remote" } then {
+ continue
+ }
}
standard_testfile .c
@@ -15,11 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# There's no support for vfork events in the remote protocol.
-if { [is_remote target] } {
- return 0
-}
-
standard_testfile .c
if { [build_executable ${testfile}.exp ${testfile} $srcfile {debug}] } {
@@ -18,11 +18,6 @@
# the main thread doesn't just silently stop at the first internal
# breakpoint (usually the _dl_debug_state breakpoint).
-# No exec event support in the remote protocol.
-if { [is_remote target] } then {
- continue
-}
-
if { ![support_displaced_stepping] } {
unsupported "displaced stepping"
return -1
@@ -15,10 +15,6 @@
# Test handling of threads across an execl.
-if { [is_remote target] } then {
- continue
-}
-
# Original image, loads a thread library.
standard_testfile
@@ -18,10 +18,6 @@ if { ! [istarget "*-*-linux*"] } {
return 0
}
-if { [is_remote target] || ![isnative] } then {
- return 0
-}
-
standard_testfile
if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
@@ -20,6 +20,14 @@
#
# See https://sourceware.org/bugzilla/show_bug.cgi?id=18600
+# In remote mode, we cannot continue debugging after all
+# inferiors have terminated, and this test requires that.
+if { [target_info exists gdb_protocol] } then {
+ if { [target_info gdb_protocol] == "remote" } then {
+ continue
+ }
+}
+
standard_testfile
proc do_test { detach_on_fork } {
@@ -13,12 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# There's no support for `set follow-fork-mode' in the remote
-# protocol.
-if { [is_remote target] } {
- return 0
-}
-
# Only GNU/Linux is known to support `set follow-fork-mode child'.
#
if { ! [istarget "*-*-linux*"] } {
@@ -64,7 +64,7 @@ for {set i 0} {$i < 5} {incr i} {
-re "^ *Id.*Frame *\[\r\n\]+" {
exp_continue
}
- -re "^. +(\[0-9\]+ *Thread \[-0-9a-fx\]+) \[^\n\]*\n" {
+ -re "^. +(\[0-9\]+ *Thread \[-0-9a-fx.\]+) \[^\n\]*\n" {
verbose -log "found thread $expect_out(1,string)" 2
lappend threads_before $expect_out(1,string)
exp_continue
@@ -126,7 +126,7 @@ for {set i 0} {$i < 5} {incr i} {
-re "^ *Id.*Frame *\[\r\n\]+" {
exp_continue
}
- -re "^. +(\[0-9\]+ *Thread \[-0-9a-fx\]+) \[^\n\]*\n" {
+ -re "^. +(\[0-9\]+ *Thread \[-0-9a-fx.\]+) \[^\n\]*\n" {
set name $expect_out(1,string)
for {set j 0} {$j != [llength $threads_before] } {incr j} {
if {$name == [lindex $threads_before $j]} {
@@ -16,11 +16,6 @@
# Test that GDB doesn't get stuck when stepping over an exec call done
# by a thread other than the main thread.
-# There's no support for exec events in the remote protocol.
-if { [is_remote target] } {
- return 0
-}
-
standard_testfile
if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
@@ -17,11 +17,6 @@
set testfile watchpoint-fork
-if [is_remote target] {
- kfail "remote/13584" "gdbserver does not support debugging across fork"
- return
-}
-
proc test {type symbol} {
with_test_prefix "$type" {
global testfile subdir srcdir gdb_prompt
@@ -386,7 +386,7 @@ proc use_collected_data { data_source } {
# There is always a thread of an inferior, either a live one or
# a faked one.
- gdb_test "info threads" "\\* ${decimal} (process|Thread) ${decimal}\[ \t\].*"
+ gdb_test "info threads" "\\* ${decimal} (process|Thread) \[0-9\.\]+\[ \t\].*"
gdb_test "info inferiors" "\\* 1 process ${decimal} \[ \t\]+${binfile}.*"
}
}