diff options
author | Pedro Alves <palves@redhat.com> | 2012-11-02 17:58:39 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2012-11-02 17:58:39 +0000 |
commit | 6dbc89975ec5436e2132a79412651ade6e465bdb (patch) | |
tree | 2afb2ff55718a8b7b59d52a8bb79fd82e53383a9 /gdb | |
parent | 43ae8f0101cda91a1d34e00ebce2a3b67d678cdb (diff) | |
download | gdb-6dbc89975ec5436e2132a79412651ade6e465bdb.zip gdb-6dbc89975ec5436e2132a79412651ade6e465bdb.tar.gz gdb-6dbc89975ec5436e2132a79412651ade6e465bdb.tar.bz2 |
2012-11-02 Pedro Alves <palves@redhat.com>
* gdb.base/foll-vfork.exp
(vfork_and_exec_child_follow_through_step): Don't skip on
non-HP/UX targets. Expect the next to only step one line on
non-HP/UX targets, rather than stopping only after the exec.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/foll-vfork.exp | 47 |
2 files changed, 40 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 426b07b..aa8388a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2012-11-02 Pedro Alves <palves@redhat.com> + * gdb.base/foll-vfork.exp + (vfork_and_exec_child_follow_through_step): Don't skip on + non-HP/UX targets. Expect the next to only step one line on + non-HP/UX targets, rather than stopping only after the exec. + +2012-11-02 Pedro Alves <palves@redhat.com> + Don't hard code line numbers. * gdb.base/foll-vfork.exp (vfork_parent_follow_through_step): diff --git a/gdb/testsuite/gdb.base/foll-vfork.exp b/gdb/testsuite/gdb.base/foll-vfork.exp index 67d077d..54f5971 100644 --- a/gdb/testsuite/gdb.base/foll-vfork.exp +++ b/gdb/testsuite/gdb.base/foll-vfork.exp @@ -183,15 +183,17 @@ proc vfork_and_exec_child_follow_through_step {} { global gdb_prompt global srcfile2 -# This test cannot be performed prior to HP-UX 10.30, because ptrace-based -# debugging of a vforking program basically doesn't allow the child to do -# things like hit a breakpoint between a vfork and exec. This means that -# saying "set follow-fork child; next" at a vfork() call won't work, because -# the implementation of "next" sets a "step resume" breakpoint at the -# return from the vfork(), which the child will hit on its way to exec'ing. -# - if { ![istarget "hppa*-*-hpux11.*"] } { - verbose "vfork child-following next test ignored for non-hppa or pre-HP/UX-10.30 targets." + if { [istarget "hppa*-*-hpux*"] && ![istarget "hppa*-*-hpux11.*"] } { + # This test cannot be performed prior to HP-UX 10.30, because + # ptrace-based debugging of a vforking program basically doesn't + # allow the child to do things like hit a breakpoint between a + # vfork and exec. This means that saying "set follow-fork + # child; next" at a vfork() call won't work, because the + # implementation of "next" sets a "step resume" breakpoint at + # the return from the vfork(), which the child will hit on its + # way to exec'ing. + # + verbose "vfork child-following next test ignored for pre-HP/UX-10.30 targets." return 0 } @@ -200,11 +202,28 @@ proc vfork_and_exec_child_follow_through_step {} { "set follow-fork child, vfork and exec through step" set test "vfork and exec child follow, through step" - set linenum [gdb_get_line_number "printf(\"Hello from vforked-prog" ${srcfile2}] - gdb_test_multiple "next" $test { - -re "Attaching after fork to.*Executing new program.*Breakpoint.*vforked-prog.c:${linenum}.*$gdb_prompt " { - pass "$test" - } + if { [istarget "hppa*-*-hpux*"]} { + # Since the child cannot be debugged until after it has exec'd, + # and since there's a bp on "main" in the parent, and since the + # bp's for the parent are recomputed in the exec'd child, the + # step through a vfork should land us in the "main" for the + # exec'd child, too. + # + set linenum [gdb_get_line_number "printf(\"Hello from vforked-prog" ${srcfile2}] + gdb_test_multiple "next" $test { + -re "Attaching after fork to.*Executing new program.*Breakpoint.*vforked-prog.c:${linenum}.*$gdb_prompt " { + pass "$test" + } + } + } else { + # The ideal support is to be able to debug the child even + # before it execs. Thus, "next" lands on the next line after + # the vfork. + gdb_test_multiple "next" $test { + -re "Attaching after .* vfork to child.*if \\(pid == 0\\).*$gdb_prompt " { + pass "$test" + } + } } # The parent has been detached; allow time for any output it might # generate to arrive, so that output doesn't get confused with |