diff options
author | Daniel Jacobowitz <drow@false.org> | 2005-09-04 16:18:20 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2005-09-04 16:18:20 +0000 |
commit | ee057212343faef868b546ce17e9dfc3b370f8e0 (patch) | |
tree | a2b1f32ba5ad16e317c1d9b695959efef068b462 /gdb/target.c | |
parent | 7c04e189032a40c4d4dd414ed8e563b4385bd8bc (diff) | |
download | gdb-ee057212343faef868b546ce17e9dfc3b370f8e0.zip gdb-ee057212343faef868b546ce17e9dfc3b370f8e0.tar.gz gdb-ee057212343faef868b546ce17e9dfc3b370f8e0.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/target.c')
-rw-r--r-- | gdb/target.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/gdb/target.c b/gdb/target.c index 83501e6..d842f50 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -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); @@ -1501,6 +1498,31 @@ target_async_mask (int mask) } /* 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; |