* 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:
Daniel Jacobowitz
2005-09-04 16:18:20 +00:00
parent 7c04e18903
commit ee05721234
8 changed files with 58 additions and 29 deletions

View File

@ -422,7 +422,7 @@ update_current_target (void)
INHERIT (to_remove_fork_catchpoint, t);
INHERIT (to_insert_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_remove_exec_catchpoint, t);
INHERIT (to_reported_exec_events_per_exec_call, t);
@ -579,9 +579,6 @@ update_current_target (void)
de_fault (to_remove_vfork_catchpoint,
(int (*) (int))
tcomplain);
de_fault (to_follow_fork,
(int (*) (int))
target_ignore);
de_fault (to_insert_exec_catchpoint,
(void (*) (int))
tcomplain);
@ -1500,6 +1497,31 @@ target_async_mask (int mask)
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
execute a run or attach command without any other data. This is
used to locate the default process stratum.
@ -2336,17 +2358,6 @@ debug_to_remove_vfork_catchpoint (int pid)
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
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_insert_vfork_catchpoint = debug_to_insert_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_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;