summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Machado <luisgpm@br.ibm.com>2013-09-03 17:22:45 +0000
committerLuis Machado <luisgpm@br.ibm.com>2013-09-03 17:22:45 +0000
commit07107ca6f983e2dde5fa669a56563760a1f44c11 (patch)
treedbc1afaf4e0a4a854a1761f333bbccc64a0c3e72
parent3bec276888142e4f751eaf9011f02b049fed7295 (diff)
downloadbinutils-07107ca6f983e2dde5fa669a56563760a1f44c11.tar.gz
binutils-07107ca6f983e2dde5fa669a56563760a1f44c11.tar.bz2
binutils-07107ca6f983e2dde5fa669a56563760a1f44c11.zip
* 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.
-rw-r--r--gdb/ChangeLog19
-rw-r--r--gdb/inf-child.c3
-rw-r--r--gdb/inf-ptrace.c3
-rw-r--r--gdb/inf-ttrace.c3
-rw-r--r--gdb/inferior.h5
-rw-r--r--gdb/infrun.c10
-rw-r--r--gdb/linux-nat.c3
-rw-r--r--gdb/target.c9
-rw-r--r--gdb/target.h4
9 files changed, 41 insertions, 18 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 06696d8e92f..caecc8d40ac 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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):
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index f5992bb1f16..1878272bc0f 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -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. */
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index 046e0ce9668..9e6e98058b8 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -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;
diff --git a/gdb/inf-ttrace.c b/gdb/inf-ttrace.c
index 511a67cbcbc..3ba830fa669 100644
--- a/gdb/inf-ttrace.c
+++ b/gdb/inf-ttrace.c
@@ -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;
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 2a5770dd358..1b83e52d965 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -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;
diff --git a/gdb/infrun.c b/gdb/infrun.c
index dc1036d7611..57618ae981f 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -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. */
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 46e3dbfec4c..90638e20dfe 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -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;
diff --git a/gdb/target.c b/gdb/target.c
index 3659bb90e4f..d55712d4c1c 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -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;
}
}
diff --git a/gdb/target.h b/gdb/target.h
index 69595032658..76224655546 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -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