* linux-nat.c (linux_child_follow_fork): Copy attach_flag from the
authorPedro Alves <palves@redhat.com>
Mon, 26 Jan 2009 22:34:55 +0000 (22:34 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 26 Jan 2009 22:34:55 +0000 (22:34 +0000)
parent to the child.
* inf-ttrace.c (inf_ttrace_follow_fork): Likewise.
* inf-ptrace.c (inf_ptrace_follow_fork): Likewise.  Use
remove_breakpoints to remove breakpoints from the parent.

gdb/ChangeLog
gdb/inf-ptrace.c
gdb/inf-ttrace.c
gdb/linux-nat.c

index 63ad939..81c50ae 100644 (file)
@@ -1,5 +1,13 @@
 2009-01-26  Pedro Alves  <pedro@codesourcery.com>
 
+       * linux-nat.c (linux_child_follow_fork): Copy attach_flag from the
+       parent to the child.
+       * inf-ttrace.c (inf_ttrace_follow_fork): Likewise.
+       * inf-ptrace.c (inf_ptrace_follow_fork): Likewise.  Use
+       remove_breakpoints to remove breakpoints from the parent.
+
+2009-01-26  Pedro Alves  <pedro@codesourcery.com>
+
        PR backtrace/9458, PR backtrace/8864:
        * frame.c (create_new_frame): Update the frame's cached PC before
        finding its unwinder.  Use frame_id_build to build the new frame's
index 538816d..76cbecc 100644 (file)
@@ -73,7 +73,8 @@ inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
       CORE_ADDR step_range_start = last_tp->step_range_start;
       CORE_ADDR step_range_end = last_tp->step_range_end;
       struct frame_id step_frame_id = last_tp->step_frame_id;
-
+      int attach_flag = find_inferior_pid (pid)->attach_flag;
+      struct inferior *inf;
       struct thread_info *tp;
 
       /* Otherwise, deleting the parent would get rid of this
@@ -82,7 +83,7 @@ inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
 
       /* Before detaching from the parent, remove all breakpoints from
         it.  */
-      detach_breakpoints (pid);
+      remove_breakpoints ();
 
       if (ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
        perror_with_name (("ptrace"));
@@ -94,7 +95,8 @@ inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
       detach_inferior (pid);
 
       /* Add the child.  */
-      add_inferior (fpid);
+      inf = add_inferior (fpid);
+      inf->attach_flag = attach_flag;
       tp = add_thread_silent (inferior_ptid);
 
       tp->step_resume_breakpoint = step_resume_breakpoint;
index 680b896..5255828 100644 (file)
@@ -458,6 +458,8 @@ inf_ttrace_follow_fork (struct target_ops *ops, int follow_child)
 
   if (follow_child)
     {
+      struct inferior *inf;
+
       /* Copy user stepping state to the new inferior thread.  */
       step_resume_breakpoint = last_tp->step_resume_breakpoint;
       step_range_start = last_tp->step_range_start;
@@ -469,7 +471,8 @@ inf_ttrace_follow_fork (struct target_ops *ops, int follow_child)
       last_tp->step_resume_breakpoint = NULL;
 
       inferior_ptid = ptid_build (fpid, flwpid, 0);
-      add_inferior (fpid);
+      inf = add_inferior (fpid);
+      inf->attach_flag = find_inferior_pid (pid)->attach_flag;
       detach_breakpoints (pid);
 
       target_terminal_ours ();
index 9a7e39c..20f1ea5 100644 (file)
@@ -730,9 +730,13 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child)
       else
        {
          struct fork_info *fp;
+         struct inferior *parent_inf, *child_inf;
 
          /* Add process to GDB's tables.  */
-         add_inferior (child_pid);
+         child_inf = add_inferior (child_pid);
+
+         parent_inf = find_inferior_pid (GET_PID (last_ptid));
+         child_inf->attach_flag = parent_inf->attach_flag;
 
          /* Retain child fork in ptrace (stopped) state.  */
          fp = find_fork_pid (child_pid);
@@ -800,6 +804,7 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child)
       struct thread_info *last_tp = find_thread_pid (last_ptid);
       struct thread_info *tp;
       char child_pid_spelling[40];
+      struct inferior *parent_inf, *child_inf;
 
       /* Copy user stepping state to the new inferior thread.  */
       struct breakpoint *step_resume_breakpoint = last_tp->step_resume_breakpoint;
@@ -829,7 +834,10 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child)
       /* Add the new inferior first, so that the target_detach below
         doesn't unpush the target.  */
 
-      add_inferior (child_pid);
+      child_inf = add_inferior (child_pid);
+
+      parent_inf = find_inferior_pid (GET_PID (last_ptid));
+      child_inf->attach_flag = parent_inf->attach_flag;
 
       /* If we're vforking, we may want to hold on to the parent until
         the child exits or execs.  At exec time we can remove the old