* inf-child.c (inf_child_follow_fork) New parameter
authorLuis Machado <luisgpm@br.ibm.com>
Tue, 3 Sep 2013 17:22:45 +0000 (17:22 +0000)
committerLuis Machado <luisgpm@br.ibm.com>
Tue, 3 Sep 2013 17:22:45 +0000 (17:22 +0000)
detach_fork.
* inf-ptrace.c (inf_ptrace_follow_fork): Likewise.
* inf-ttrace.c (inf_ttrace_follow_fork): Likewise.
* inferior.h (detach_fork): Remove.
* infrun.c (detach_fork): Adjust comment and make it
static.
(follow_fork): Pass detach_fork parameter to
target_follow_fork.
* linux-nat.c (linux_child_follow_fork): New parameter
detach_fork.
* target.c (target_follow_fork): New parameter detach_fork.
Pass detach_fork as parameter and print its value.
* target.h (struct target_ops) <to_follow_fork>: New int
parameter.
(target_follow_fork): New parameter detach_fork.

gdb/ChangeLog
gdb/inf-child.c
gdb/inf-ptrace.c
gdb/inf-ttrace.c
gdb/inferior.h
gdb/infrun.c
gdb/linux-nat.c
gdb/target.c
gdb/target.h

index 06696d8e92f9067e452bd0580531529d1a2bdc18..caecc8d40ac4d3142ed7ce7978148f9cfc20b292 100644 (file)
@@ -1,3 +1,22 @@
+2013-09-03  Luis Machado  <lgustavo@codesourcery.com>
+
+       * inf-child.c (inf_child_follow_fork) New parameter
+       detach_fork.
+       * inf-ptrace.c (inf_ptrace_follow_fork): Likewise.
+       * inf-ttrace.c (inf_ttrace_follow_fork): Likewise.
+       * inferior.h (detach_fork): Remove.
+       * infrun.c (detach_fork): Adjust comment and make it
+       static.
+       (follow_fork): Pass detach_fork parameter to
+       target_follow_fork.
+       * linux-nat.c (linux_child_follow_fork): New parameter
+       detach_fork.
+       * target.c (target_follow_fork): New parameter detach_fork.
+       Pass detach_fork as parameter and print its value.
+       * target.h (struct target_ops) <to_follow_fork>: New int
+       parameter.
+       (target_follow_fork): New parameter detach_fork.
+
 2013-09-03  Joel Brobecker  <brobecker@adacore.com>
 
        * solib-ia64-hpux.c (ia64_hpux_relocate_section_addresses):
index f5992bb1f1615e18301c73d44a6210401a9edcdf..1878272bc0fcecb4e772012cb3dacd9a75a2e2bc 100644 (file)
@@ -118,7 +118,8 @@ inf_child_post_startup_inferior (ptid_t ptid)
 }
 
 static int
-inf_child_follow_fork (struct target_ops *ops, int follow_child)
+inf_child_follow_fork (struct target_ops *ops, int follow_child,
+                      int detach_fork)
 {
   /* This version of Unix doesn't support following fork or vfork
      events.  */
index 046e0ce9668a8f67d146b0556eb65079e5c5ce23..9e6e98058b8277dadc5578012943792990ae1e8c 100644 (file)
@@ -40,7 +40,8 @@
 #ifdef PT_GET_PROCESS_STATE
 
 static int
-inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
+inf_ptrace_follow_fork (struct target_ops *ops, int follow_child,
+                       int detach_fork)
 {
   pid_t pid, fpid;
   ptrace_state_t pe;
index 511a67cbcbc3e59300bcb2b2d16539a123de627c..3ba830fa6692fa6ece84141aa0f250dc5d68da6d 100644 (file)
@@ -409,7 +409,8 @@ inf_ttrace_stopped_by_watchpoint (void)
 static pid_t inf_ttrace_vfork_ppid = -1;
 
 static int
-inf_ttrace_follow_fork (struct target_ops *ops, int follow_child)
+inf_ttrace_follow_fork (struct target_ops *ops, int follow_child,
+                       int detach_fork)
 {
   pid_t pid, fpid;
   lwpid_t lwpid, flwpid;
index 2a5770dd358be6dc37256e3f6da4c902ec95e699..1b83e52d96537d83dc71e3c69acfb25181bd0d1f 100644 (file)
@@ -119,11 +119,6 @@ extern int step_stop_if_no_debug;
    are kept running freely.  */
 extern int non_stop;
 
-/* If set (default), when following a fork, GDB will detach from one
-   the fork branches, child or parent.  Exactly which branch is
-   detached depends on 'set follow-fork-mode' setting.  */
-extern int detach_fork;
-
 /* When set (default), the target should attempt to disable the operating
    system's address space randomization feature when starting an inferior.  */
 extern int disable_randomization;
index dc1036d76114f8687fe948716e5ddbd78f4cd98c..57618ae981f5fdc3f96cf98d7af6f4f200093124 100644 (file)
@@ -132,8 +132,12 @@ int sync_execution = 0;
 
 static ptid_t previous_inferior_ptid;
 
-/* Default behavior is to detach newly forked processes (legacy).  */
-int detach_fork = 1;
+/* If set (default for legacy reasons), when following a fork, GDB
+   will detach from one of the fork branches, child or parent.
+   Exactly which branch is detached depends on 'set follow-fork-mode'
+   setting.  */
+
+static int detach_fork = 1;
 
 int debug_displaced = 0;
 static void
@@ -497,7 +501,7 @@ follow_fork (void)
 
        /* Tell the target to do whatever is necessary to follow
           either parent or child.  */
-       if (target_follow_fork (follow_child))
+       if (target_follow_fork (follow_child, detach_fork))
          {
            /* Target refused to follow, or there's some other reason
               we shouldn't resume.  */
index 46e3dbfec4c9d7ecd6c944e5e2a7df8473e1da30..90638e20dfeba3ffc1d454882fe2fed3f9cd8f2e 100644 (file)
@@ -376,7 +376,8 @@ delete_lwp_cleanup (void *lp_voidp)
 }
 
 static int
-linux_child_follow_fork (struct target_ops *ops, int follow_child)
+linux_child_follow_fork (struct target_ops *ops, int follow_child,
+                        int detach_fork)
 {
   int has_vforked;
   int parent_pid, child_pid;
index 3659bb90e4fe65d32913b109ea9b5c8b1e8309bc..d55712d4c1c4ac7a41e3a4f9971e9d69b9752c62 100644 (file)
@@ -2811,7 +2811,7 @@ target_program_signals (int numsigs, unsigned char *program_signals)
    follow forks.  */
 
 int
-target_follow_fork (int follow_child)
+target_follow_fork (int follow_child, int detach_fork)
 {
   struct target_ops *t;
 
@@ -2819,11 +2819,12 @@ target_follow_fork (int follow_child)
     {
       if (t->to_follow_fork != NULL)
        {
-         int retval = t->to_follow_fork (t, follow_child);
+         int retval = t->to_follow_fork (t, follow_child, detach_fork);
 
          if (targetdebug)
-           fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
-                               follow_child, retval);
+           fprintf_unfiltered (gdb_stdlog,
+                               "target_follow_fork (%d, %d) = %d\n",
+                               follow_child, detach_fork, retval);
          return retval;
        }
     }
index 695950326589b8d41124eabff833deed8187c84b..7622465554638dc945799b2e4eebc12474773e50 100644 (file)
@@ -440,7 +440,7 @@ struct target_ops
     int (*to_remove_fork_catchpoint) (int);
     int (*to_insert_vfork_catchpoint) (int);
     int (*to_remove_vfork_catchpoint) (int);
-    int (*to_follow_fork) (struct target_ops *, int);
+    int (*to_follow_fork) (struct target_ops *, int, int);
     int (*to_insert_exec_catchpoint) (int);
     int (*to_remove_exec_catchpoint) (int);
     int (*to_set_syscall_catchpoint) (int, int, int, int, int *);
@@ -1235,7 +1235,7 @@ void target_create_inferior (char *exec_file, char *args,
    This function returns 1 if the inferior should not be resumed
    (i.e. there is another event pending).  */
 
-int target_follow_fork (int follow_child);
+int target_follow_fork (int follow_child, int detach_fork);
 
 /* On some targets, we can catch an inferior exec event when it
    occurs.  These functions insert/remove an already-created