diff options
author | Vladimir Prus <vladimir@codesourcery.com> | 2008-11-09 11:27:18 +0000 |
---|---|---|
committer | Vladimir Prus <vladimir@codesourcery.com> | 2008-11-09 11:27:18 +0000 |
commit | 136d6dae62acd18254ced95f2ae6e6423bcda3c9 (patch) | |
tree | e615203f169c8eed4229e70fdd3b22a231778aee /gdb/inf-ptrace.c | |
parent | ed406532765b59fbd78f011179f7174611412e12 (diff) | |
download | gdb-136d6dae62acd18254ced95f2ae6e6423bcda3c9.zip gdb-136d6dae62acd18254ced95f2ae6e6423bcda3c9.tar.gz gdb-136d6dae62acd18254ced95f2ae6e6423bcda3c9.tar.bz2 |
Kill pthread_ops_hack
* target.h (struct target_ops): Make to_attach, to_detach,
to_create_inferior and to_mourn_inferior accept a pointer
to struct target_ops.
(target_attach, target_create_inferior, target_create_inferior):
Convert from macros to function. Find the right target to
invoke a method of.
(find_default_attach, find_default_create_inferior): New parameter
ops.
* corefile.c (core_file_command): Pass target to to_detach.
* corelow.c (core_detach): Add 'ops' parameter.
* fork-child.c (fork_inferior): Return the pid. Allow
init_trace_fun to be NULL.
* inf-ptrace (ptrace_ops_hack): Remove.
(inf_ptrace_him): Remove, moving all logic into....
(inf_ptrace_create_inferior): ... here. Push the target
passed as parameter.
(inf_ptrace_mourn_inferior, inf_ptrace_attach, inf_ptrace_detach):
Push/pop target passed as parameter, no ptrace_ops_hack.
(inf_ptrace_target): Don't remember result.
* inferior.h (fork_inferior): Adjust prototype.
* linux-nat.c (linux_nat_create_inferior, linux_nat_attach)
(linux_nat_detach, linux_nat_mourn_inferior): New parameter ops.
Pass it to linux_ops target.
* linux-thread-db.c (thread_db_detach, thread_db_mourn_inferior):
New parameter ops. Pass it to the target beneath.
* remote.c (remote_mourn, extended_remote_mourn, remote_detach)
(extended_remote_create_inferior): New parameter ops. Pass it
further.
* target.c (debug_to_attach, debug_to_detach)
(debug_to_mourn_inferior): New parameter ops.
(target_create_inferior): New.
(update_current_target): Do not inherit to_attach, to_detach,
to_create_inferiour, to_mourn_inferior. Do not default
to_detach and to_mourn_inferior.
(target_detach): Find the right target to use.
(target_mourn_inferior): New.
(find_default_attach, find_default_create_inferior): New parameter
ops. Pass the found target when calling its method.
(init_dummy_target): Provide fallback definition of to_detach.
(target_attach): New.
(debug_to_attach, debug_to_detach, debug_to_create_inferior)
(debug_to_mourn_inferiour): New parameter ops.
* aix-thread.c: Adjust.
* bsd-uthread.c: Adjust.
* gnu-nat.c: Adjust.
* go32-nat.c: Adjust.
* hpux-thread.c: Adjust.
* inf-ttrace.c: Ajust.
* monitor.c: Adjust.
* nto-procfs.c: Adjust.
* procfs.c: Adjust.
* remote-m32r-sdi.c: Adjust.
* remote-mips.c: Adjust.
* remote-sim.c: Adjust.
* rs6000-nat.c: Adjust.
* sol-thread.c: Adjust.
* win32-nat.c: Adjust.
* dec-thread.c: Adjust.
Diffstat (limited to 'gdb/inf-ptrace.c')
-rw-r--r-- | gdb/inf-ptrace.c | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c index 57af79a..bf3d0a8 100644 --- a/gdb/inf-ptrace.c +++ b/gdb/inf-ptrace.c @@ -35,8 +35,6 @@ #include "inf-child.h" #include "gdbthread.h" -/* HACK: Save the ptrace ops returned by inf_ptrace_target. */ -static struct target_ops *ptrace_ops_hack; #ifdef PT_GET_PROCESS_STATE @@ -132,12 +130,22 @@ inf_ptrace_me (void) ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3)0, 0); } -/* Start tracing PID. */ +/* Start a new inferior Unix child process. EXEC_FILE is the file to + run, ALLARGS is a string containing the arguments to the program. + ENV is the environment vector to pass. If FROM_TTY is non-zero, be + chatty about it. */ static void -inf_ptrace_him (int pid) +inf_ptrace_create_inferior (struct target_ops *ops, + char *exec_file, char *allargs, char **env, + int from_tty) { - push_target (ptrace_ops_hack); + int pid; + + pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL, + NULL, NULL); + + push_target (ops); /* On some targets, there must be some explicit synchronization between the parent and child processes after the debugger @@ -156,19 +164,6 @@ inf_ptrace_him (int pid) target_post_startup_inferior (pid_to_ptid (pid)); } -/* Start a new inferior Unix child process. EXEC_FILE is the file to - run, ALLARGS is a string containing the arguments to the program. - ENV is the environment vector to pass. If FROM_TTY is non-zero, be - chatty about it. */ - -static void -inf_ptrace_create_inferior (char *exec_file, char *allargs, char **env, - int from_tty) -{ - fork_inferior (exec_file, allargs, env, inf_ptrace_me, inf_ptrace_him, - NULL, NULL); -} - #ifdef PT_GET_PROCESS_STATE static void @@ -189,7 +184,7 @@ inf_ptrace_post_startup_inferior (ptid_t pid) /* Clean up a rotting corpse of an inferior after it died. */ static void -inf_ptrace_mourn_inferior (void) +inf_ptrace_mourn_inferior (struct target_ops *ops) { int status; @@ -199,7 +194,7 @@ inf_ptrace_mourn_inferior (void) only report its exit status to its original parent. */ waitpid (ptid_get_pid (inferior_ptid), &status, 0); - unpush_target (ptrace_ops_hack); + unpush_target (ops); generic_mourn_inferior (); } @@ -207,7 +202,7 @@ inf_ptrace_mourn_inferior (void) be chatty about it. */ static void -inf_ptrace_attach (char *args, int from_tty) +inf_ptrace_attach (struct target_ops *ops, char *args, int from_tty) { char *exec_file; pid_t pid; @@ -258,7 +253,7 @@ inf_ptrace_attach (char *args, int from_tty) target, it should decorate the ptid later with more info. */ add_thread_silent (inferior_ptid); - push_target (ptrace_ops_hack); + push_target(ops); } #ifdef PT_GET_PROCESS_STATE @@ -282,7 +277,7 @@ inf_ptrace_post_attach (int pid) specified by ARGS. If FROM_TTY is non-zero, be chatty about it. */ static void -inf_ptrace_detach (char *args, int from_tty) +inf_ptrace_detach (struct target_ops *ops, char *args, int from_tty) { pid_t pid = ptid_get_pid (inferior_ptid); int sig = 0; @@ -314,7 +309,7 @@ inf_ptrace_detach (char *args, int from_tty) inferior_ptid = null_ptid; detach_inferior (pid); - unpush_target (ptrace_ops_hack); + unpush_target (ops); } /* Kill the inferior. */ @@ -644,7 +639,6 @@ inf_ptrace_target (void) t->to_stop = inf_ptrace_stop; t->to_xfer_partial = inf_ptrace_xfer_partial; - ptrace_ops_hack = t; return t; } |