aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2012-11-02 18:13:37 +0000
committerPedro Alves <palves@redhat.com>2012-11-02 18:13:37 +0000
commitf50f4e56a6799a43b13f2a260aaee831bf31c9dc (patch)
tree80f89c919484501caf727dc085e16098bde9e6d9 /gdb
parent71ce889da907b11ec88efa3ddc93ee1f0371f8e9 (diff)
downloadgdb-f50f4e56a6799a43b13f2a260aaee831bf31c9dc.zip
gdb-f50f4e56a6799a43b13f2a260aaee831bf31c9dc.tar.gz
gdb-f50f4e56a6799a43b13f2a260aaee831bf31c9dc.tar.bz2
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".
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/infrun.c11
-rw-r--r--gdb/testsuite/ChangeLog9
-rw-r--r--gdb/testsuite/gdb.base/foll-vfork.exp6
4 files changed, 29 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index adcdb97..95e7777 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 d79c6bd..ab5aacf 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 e7e42d8..91287e3 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 9515d16..0b2eee6 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