* inf-child.c (inf_child_follow_fork): Add OPS argument.
* inf-ptrace.c (inf_ptrace_follow_fork): Likewise. * inf-ttrace.c (inf_ttrace_follow_fork): Likewise. * inftarg.c (child_follow_fork): Likewise. * linux-nat.c (child_follow_fork): Likewise. Use ops instead of &deprecated_child_ops. * target.c (update_current_target): Do not inherit to_follow_fork. (target_follow_fork): New function. (debug_to_follow_fork): Remove. (setup_target_debug): Don't set to_follow_fork. * target.h (struct target_ops): Add struct target_ops * to to_follow_fork. (child_follow_fork): Add struct target_ops * argument. (target_follow_fork): Replace macro with prototype.
This commit is contained in:
parent
7c04e18903
commit
ee05721234
8 changed files with 58 additions and 29 deletions
|
@ -1,3 +1,20 @@
|
||||||
|
2005-09-04 Daniel Jacobowitz <dan@debian.org>
|
||||||
|
|
||||||
|
* inf-child.c (inf_child_follow_fork): Add OPS argument.
|
||||||
|
* inf-ptrace.c (inf_ptrace_follow_fork): Likewise.
|
||||||
|
* inf-ttrace.c (inf_ttrace_follow_fork): Likewise.
|
||||||
|
* inftarg.c (child_follow_fork): Likewise.
|
||||||
|
* linux-nat.c (child_follow_fork): Likewise. Use ops instead of
|
||||||
|
&deprecated_child_ops.
|
||||||
|
* target.c (update_current_target): Do not inherit to_follow_fork.
|
||||||
|
(target_follow_fork): New function.
|
||||||
|
(debug_to_follow_fork): Remove.
|
||||||
|
(setup_target_debug): Don't set to_follow_fork.
|
||||||
|
* target.h (struct target_ops): Add struct target_ops * to
|
||||||
|
to_follow_fork.
|
||||||
|
(child_follow_fork): Add struct target_ops * argument.
|
||||||
|
(target_follow_fork): Replace macro with prototype.
|
||||||
|
|
||||||
2005-09-02 Kevin Buettner <kevinb@redhat.com>
|
2005-09-02 Kevin Buettner <kevinb@redhat.com>
|
||||||
|
|
||||||
* mn10300-tdep.c (mn10300_dwarf2_reg_to_regnum): Use ARRAY_SIZE.
|
* mn10300-tdep.c (mn10300_dwarf2_reg_to_regnum): Use ARRAY_SIZE.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Unix.
|
Unix.
|
||||||
|
|
||||||
Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
|
Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
|
||||||
1998, 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
|
1998, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB.
|
This file is part of GDB.
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ inf_child_remove_vfork_catchpoint (int pid)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
inf_child_follow_fork (int follow_child)
|
inf_child_follow_fork (struct target_ops *ops, int follow_child)
|
||||||
{
|
{
|
||||||
/* This version of Unix doesn't support following fork or vfork
|
/* This version of Unix doesn't support following fork or vfork
|
||||||
events. */
|
events. */
|
||||||
|
|
|
@ -44,7 +44,7 @@ static struct target_ops *ptrace_ops_hack;
|
||||||
#ifdef PT_GET_PROCESS_STATE
|
#ifdef PT_GET_PROCESS_STATE
|
||||||
|
|
||||||
static int
|
static int
|
||||||
inf_ptrace_follow_fork (int follow_child)
|
inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
|
||||||
{
|
{
|
||||||
pid_t pid, fpid;
|
pid_t pid, fpid;
|
||||||
ptrace_state_t pe;
|
ptrace_state_t pe;
|
||||||
|
|
|
@ -404,7 +404,7 @@ inf_ttrace_stopped_by_watchpoint (void)
|
||||||
static pid_t inf_ttrace_vfork_ppid = -1;
|
static pid_t inf_ttrace_vfork_ppid = -1;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
inf_ttrace_follow_fork (int follow_child)
|
inf_ttrace_follow_fork (struct target_ops *ops, int follow_child)
|
||||||
{
|
{
|
||||||
pid_t pid, fpid;
|
pid_t pid, fpid;
|
||||||
lwpid_t lwpid, flwpid;
|
lwpid_t lwpid, flwpid;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* Target-vector operations for controlling Unix child processes, for GDB.
|
/* Target-vector operations for controlling Unix child processes, for GDB.
|
||||||
|
|
||||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
|
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
|
||||||
2000, 2002, 2003, 2004 Free Software Foundation, Inc.
|
2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Contributed by Cygnus Support.
|
Contributed by Cygnus Support.
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ child_remove_vfork_catchpoint (int pid)
|
||||||
|
|
||||||
#if !defined(CHILD_FOLLOW_FORK)
|
#if !defined(CHILD_FOLLOW_FORK)
|
||||||
int
|
int
|
||||||
child_follow_fork (int follow_child)
|
child_follow_fork (struct target_ops *ops, int follow_child)
|
||||||
{
|
{
|
||||||
/* This version of Unix doesn't support following fork or vfork events. */
|
/* This version of Unix doesn't support following fork or vfork events. */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -334,7 +334,7 @@ child_post_startup_inferior (ptid_t ptid)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
child_follow_fork (int follow_child)
|
child_follow_fork (struct target_ops *ops, int follow_child)
|
||||||
{
|
{
|
||||||
ptid_t last_ptid;
|
ptid_t last_ptid;
|
||||||
struct target_waitstatus last_status;
|
struct target_waitstatus last_status;
|
||||||
|
@ -466,7 +466,10 @@ child_follow_fork (int follow_child)
|
||||||
target_detach (NULL, 0);
|
target_detach (NULL, 0);
|
||||||
|
|
||||||
inferior_ptid = pid_to_ptid (child_pid);
|
inferior_ptid = pid_to_ptid (child_pid);
|
||||||
push_target (&deprecated_child_ops);
|
|
||||||
|
/* Reinstall ourselves, since we might have been removed in
|
||||||
|
target_detach (which does other necessary cleanup). */
|
||||||
|
push_target (ops);
|
||||||
|
|
||||||
/* Reset breakpoints in the child as appropriate. */
|
/* Reset breakpoints in the child as appropriate. */
|
||||||
follow_inferior_reset_breakpoints ();
|
follow_inferior_reset_breakpoints ();
|
||||||
|
|
42
gdb/target.c
42
gdb/target.c
|
@ -422,7 +422,7 @@ update_current_target (void)
|
||||||
INHERIT (to_remove_fork_catchpoint, t);
|
INHERIT (to_remove_fork_catchpoint, t);
|
||||||
INHERIT (to_insert_vfork_catchpoint, t);
|
INHERIT (to_insert_vfork_catchpoint, t);
|
||||||
INHERIT (to_remove_vfork_catchpoint, t);
|
INHERIT (to_remove_vfork_catchpoint, t);
|
||||||
INHERIT (to_follow_fork, t);
|
/* Do not inherit to_follow_fork. */
|
||||||
INHERIT (to_insert_exec_catchpoint, t);
|
INHERIT (to_insert_exec_catchpoint, t);
|
||||||
INHERIT (to_remove_exec_catchpoint, t);
|
INHERIT (to_remove_exec_catchpoint, t);
|
||||||
INHERIT (to_reported_exec_events_per_exec_call, t);
|
INHERIT (to_reported_exec_events_per_exec_call, t);
|
||||||
|
@ -579,9 +579,6 @@ update_current_target (void)
|
||||||
de_fault (to_remove_vfork_catchpoint,
|
de_fault (to_remove_vfork_catchpoint,
|
||||||
(int (*) (int))
|
(int (*) (int))
|
||||||
tcomplain);
|
tcomplain);
|
||||||
de_fault (to_follow_fork,
|
|
||||||
(int (*) (int))
|
|
||||||
target_ignore);
|
|
||||||
de_fault (to_insert_exec_catchpoint,
|
de_fault (to_insert_exec_catchpoint,
|
||||||
(void (*) (int))
|
(void (*) (int))
|
||||||
tcomplain);
|
tcomplain);
|
||||||
|
@ -1500,6 +1497,31 @@ target_async_mask (int mask)
|
||||||
return saved_async_masked_status;
|
return saved_async_masked_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Look through the list of possible targets for a target that can
|
||||||
|
follow forks. */
|
||||||
|
|
||||||
|
int
|
||||||
|
target_follow_fork (int follow_child)
|
||||||
|
{
|
||||||
|
struct target_ops *t;
|
||||||
|
|
||||||
|
for (t = current_target.beneath; t != NULL; t = t->beneath)
|
||||||
|
{
|
||||||
|
if (t->to_follow_fork != NULL)
|
||||||
|
{
|
||||||
|
int retval = t->to_follow_fork (t, follow_child);
|
||||||
|
if (targetdebug)
|
||||||
|
fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
|
||||||
|
follow_child, retval);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Some target returned a fork event, but did not know how to follow it. */
|
||||||
|
internal_error (__FILE__, __LINE__,
|
||||||
|
"could not find a target to follow fork");
|
||||||
|
}
|
||||||
|
|
||||||
/* Look through the list of possible targets for a target that can
|
/* Look through the list of possible targets for a target that can
|
||||||
execute a run or attach command without any other data. This is
|
execute a run or attach command without any other data. This is
|
||||||
used to locate the default process stratum.
|
used to locate the default process stratum.
|
||||||
|
@ -2336,17 +2358,6 @@ debug_to_remove_vfork_catchpoint (int pid)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
debug_to_follow_fork (int follow_child)
|
|
||||||
{
|
|
||||||
int retval = debug_target.to_follow_fork (follow_child);
|
|
||||||
|
|
||||||
fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
|
|
||||||
follow_child, retval);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
debug_to_insert_exec_catchpoint (int pid)
|
debug_to_insert_exec_catchpoint (int pid)
|
||||||
{
|
{
|
||||||
|
@ -2539,7 +2550,6 @@ setup_target_debug (void)
|
||||||
current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
|
current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
|
||||||
current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
|
current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
|
||||||
current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
|
current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
|
||||||
current_target.to_follow_fork = debug_to_follow_fork;
|
|
||||||
current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
|
current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
|
||||||
current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
|
current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
|
||||||
current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
|
current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* Interface between GDB and target environments, including files and processes
|
/* Interface between GDB and target environments, including files and processes
|
||||||
|
|
||||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||||
1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Contributed by Cygnus Support. Written by John Gilmore.
|
Contributed by Cygnus Support. Written by John Gilmore.
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ struct target_ops
|
||||||
int (*to_remove_fork_catchpoint) (int);
|
int (*to_remove_fork_catchpoint) (int);
|
||||||
void (*to_insert_vfork_catchpoint) (int);
|
void (*to_insert_vfork_catchpoint) (int);
|
||||||
int (*to_remove_vfork_catchpoint) (int);
|
int (*to_remove_vfork_catchpoint) (int);
|
||||||
int (*to_follow_fork) (int);
|
int (*to_follow_fork) (struct target_ops *, int);
|
||||||
void (*to_insert_exec_catchpoint) (int);
|
void (*to_insert_exec_catchpoint) (int);
|
||||||
int (*to_remove_exec_catchpoint) (int);
|
int (*to_remove_exec_catchpoint) (int);
|
||||||
int (*to_reported_exec_events_per_exec_call) (void);
|
int (*to_reported_exec_events_per_exec_call) (void);
|
||||||
|
@ -582,7 +582,7 @@ extern int child_remove_vfork_catchpoint (int);
|
||||||
|
|
||||||
extern void child_acknowledge_created_inferior (int);
|
extern void child_acknowledge_created_inferior (int);
|
||||||
|
|
||||||
extern int child_follow_fork (int);
|
extern int child_follow_fork (struct target_ops *, int);
|
||||||
|
|
||||||
extern void child_insert_exec_catchpoint (int);
|
extern void child_insert_exec_catchpoint (int);
|
||||||
|
|
||||||
|
@ -747,8 +747,7 @@ extern void target_load (char *arg, int from_tty);
|
||||||
This function returns 1 if the inferior should not be resumed
|
This function returns 1 if the inferior should not be resumed
|
||||||
(i.e. there is another event pending). */
|
(i.e. there is another event pending). */
|
||||||
|
|
||||||
#define target_follow_fork(follow_child) \
|
int target_follow_fork (int follow_child);
|
||||||
(*current_target.to_follow_fork) (follow_child)
|
|
||||||
|
|
||||||
/* On some targets, we can catch an inferior exec event when it
|
/* On some targets, we can catch an inferior exec event when it
|
||||||
occurs. These functions insert/remove an already-created
|
occurs. These functions insert/remove an already-created
|
||||||
|
|
Loading…
Add table
Reference in a new issue