diff options
author | Pedro Alves <palves@redhat.com> | 2012-11-02 18:13:34 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2012-11-02 18:13:34 +0000 |
commit | 720915dfa0bd0b95a4a709850a94a39e57e67498 (patch) | |
tree | c294cabc7b278ec44c0d63bf78c2054d3befaa2d | |
parent | 2e2051fc8b1022775822e8f5b4a16fcfcc394907 (diff) | |
download | gdb-720915dfa0bd0b95a4a709850a94a39e57e67498.tar.gz |
gdb/
2012-11-02 Pedro Alves <palves@redhat.com>
PR gdb/14766
* infrun.c (handle_inferior_event)
<TARGET_WAITKIND_EXITED/TARGET_WAITKIND_SIGNALLED>: Switch to
null_ptid before handling a vfork child exec or exit. Switch to
the event ptid afterwards.
gdb/testsuite/
2012-11-02 Pedro Alves <palves@redhat.com>
PR gdb/14766
* gdb.base/foll-vfork.exp (vfork_child_follow_to_exit): Remove
setup_kfail.
(tcatch_vfork_then_child_follow_exit): No longer expect "Couldn't
get registers".
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/infrun.c | 11 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/foll-vfork.exp | 6 |
4 files changed, 29 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index adcdb978d98..95e7777aa48 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2012-11-02 Pedro Alves <palves@redhat.com> + + PR gdb/14766 + + * infrun.c (handle_inferior_event) + <TARGET_WAITKIND_EXITED/TARGET_WAITKIND_SIGNALLED>: Switch to + null_ptid before handling a vfork child exec or exit. Switch to + the event ptid afterwards. + 2012-11-02 Yao Qi <yao@codesourcery.com> * std-operator.def: Remove OP_LABELED. diff --git a/gdb/infrun.c b/gdb/infrun.c index d79c6bd1b3e..ab5aacf584d 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -663,7 +663,16 @@ handle_vfork_child_exec_or_exit (int exec) /* follow-fork child, detach-on-fork on. */ - old_chain = make_cleanup_restore_current_thread (); + if (!exec) + { + /* If we're handling a child exit, then inferior_ptid + points at the inferior's pid, not to a thread. */ + old_chain = save_inferior_ptid (); + save_current_program_space (); + save_current_inferior (); + } + else + old_chain = save_current_space_and_thread (); /* We're letting loose of the parent. */ tp = any_live_thread_of_process (inf->vfork_parent->pid); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e7e42d8e0db..91287e34ae7 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,14 @@ 2012-11-02 Pedro Alves <palves@redhat.com> + PR gdb/14766 + + * gdb.base/foll-vfork.exp (vfork_child_follow_to_exit): Remove + setup_kfail. + (tcatch_vfork_then_child_follow_exit): No longer expect "Couldn't + get registers". + +2012-11-02 Pedro Alves <palves@redhat.com> + * gdb.base/foll-vfork-exit.c: New file. * gdb.base/foll-vfork.exp (top level): New file-describing comment. diff --git a/gdb/testsuite/gdb.base/foll-vfork.exp b/gdb/testsuite/gdb.base/foll-vfork.exp index 9515d1618ec..0b2eee69e30 100644 --- a/gdb/testsuite/gdb.base/foll-vfork.exp +++ b/gdb/testsuite/gdb.base/foll-vfork.exp @@ -164,7 +164,7 @@ proc vfork_child_follow_to_exit {} { set test "continue to child exit" gdb_test_multiple "continue" $test { -re "Couldn't get registers.*$gdb_prompt " { - setup_kfail "gdb/14766" *-*-* + # PR gdb/14766 fail "$test" } -re "Attaching after.* vfork to.*Detaching vfork parent .* after child exit.*$gdb_prompt " { @@ -369,10 +369,6 @@ proc tcatch_vfork_then_child_follow_exit {} { set test "finish" gdb_test_multiple "finish" $test { - -re "Couldn't get registers.*$gdb_prompt " { - setup_kfail "gdb/14766" *-*-* - fail "$test " - } -re "Run till exit from.*vfork.*exited normally.*$gdb_prompt " { setup_kfail "gdb/14762" *-*-* fail $test |