2008-12-12 Pedro Alves * linux-nat.c (linux_child_follow_fork): If following the child, and not detaching the parent, also add the child fork to the fork list. * linux-fork.c (linux_fork_context): Remove dead error call. Assert that the incoming newfp argument is not null. Do not add a new fork for inferior_ptid. Assert that there is one already. --- gdb/linux-fork.c | 9 ++++----- gdb/linux-nat.c | 6 ++++++ 2 files changed, 10 insertions(+), 5 deletions(-) Index: src/gdb/linux-nat.c =================================================================== --- src.orig/gdb/linux-nat.c 2008-12-12 20:06:17.000000000 +0000 +++ src/gdb/linux-nat.c 2008-12-12 20:21:00.000000000 +0000 @@ -857,6 +857,12 @@ linux_child_follow_fork (struct target_o if (!fp) fp = add_fork (parent_pid); fork_save_infrun_state (fp, 0); + + /* Also add an entry for the child fork. */ + fp = find_fork_pid (child_pid); + if (!fp) + fp = add_fork (child_pid); + fork_save_infrun_state (fp, 0); } else target_detach (NULL, 0); Index: src/gdb/linux-fork.c =================================================================== --- src.orig/gdb/linux-fork.c 2008-12-12 20:09:43.000000000 +0000 +++ src/gdb/linux-fork.c 2008-12-12 20:09:21.000000000 +0000 @@ -600,15 +600,14 @@ static void linux_fork_context (struct fork_info *newfp, int from_tty) { /* Now we attempt to switch processes. */ - struct fork_info *oldfp = find_fork_ptid (inferior_ptid); + struct fork_info *oldfp; ptid_t ptid; int id, i; - if (!newfp) - error (_("No such fork/process")); + gdb_assert (newfp != NULL); - if (!oldfp) - oldfp = add_fork (ptid_get_pid (inferior_ptid)); + oldfp = find_fork_ptid (inferior_ptid); + gdb_assert (oldfp != NULL); fork_save_infrun_state (oldfp, 1); remove_breakpoints ();