mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-30 13:33:53 +08:00
* gnu-nat.c (gnu_attach): Add process to inferiors table.
(gnu_detach): Remove it. * go32-nat.c (go32_create_inferior): Add process to gdb's inferior table. * inf-ptrace.c (inf_ptrace_follow_fork): Delete and add inferiors to inferior table accordingly. (inf_ptrace_attach): Add new process to inferior table. (inf_ptrace_detach): Remove it. * inf-ttrace.c (inf_ttrace_follow_fork): Delete and add inferiors to inferior table accordingly. (inf_ttrace_attach): Add process to inferior table. (inf_ttrace_detach): Remove it. * linux-fork.c (init_fork_list): Delete any left over inferior. (linux_fork_mourn_inferior, detach_fork_command): Also delete processes from inferior list. * monitor.c (monitor_open): Add process to inferior list. (monitor_close): Remove it. * nto-procfs.c (procfs_attach): Add process to inferior list. Find threads after pushing the target. (procfs_detach): Remove process from inferior list. (procfs_create_inferior): Add process to inferior list. * procfs.c (procfs_detach): Remove process from inferior list. (do_attach): Add process to inferior list. * remote-sim.c (sim_create_inferior): Add process to inferior list. (gdbsim_close): Remove it. * target.c (generic_mourn_inferior): If inferior_ptid is not null_ptid, remove the corresponding inferior from inferior list. * win32-nat.c (do_initial_win32_stuff): Add process to inferior list. (win32_detach): Remove it. * linux-nat.c (linux_child_follow_fork): Delete and add inferiors to inferior list accordingly. * fork-child.c (fork_inferior): Add process to inferior list. * corelow.c (CORELOW_PID): Define. (core_close): Remove core from inferior list. (core_open): Add it.
This commit is contained in:
parent
b77209e000
commit
7f9f62ba18
@ -1,3 +1,41 @@
|
|||||||
|
2008-09-22 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* gnu-nat.c (gnu_attach): Add process to inferiors table.
|
||||||
|
(gnu_detach): Remove it.
|
||||||
|
* go32-nat.c (go32_create_inferior): Add process to gdb's inferior
|
||||||
|
table.
|
||||||
|
* inf-ptrace.c (inf_ptrace_follow_fork): Delete and add inferiors
|
||||||
|
to inferior table accordingly.
|
||||||
|
(inf_ptrace_attach): Add new process to inferior table.
|
||||||
|
(inf_ptrace_detach): Remove it.
|
||||||
|
* inf-ttrace.c (inf_ttrace_follow_fork): Delete and add inferiors
|
||||||
|
to inferior table accordingly.
|
||||||
|
(inf_ttrace_attach): Add process to inferior table.
|
||||||
|
(inf_ttrace_detach): Remove it.
|
||||||
|
* linux-fork.c (init_fork_list): Delete any left over inferior.
|
||||||
|
(linux_fork_mourn_inferior, detach_fork_command): Also delete
|
||||||
|
processes from inferior list.
|
||||||
|
* monitor.c (monitor_open): Add process to inferior list.
|
||||||
|
(monitor_close): Remove it.
|
||||||
|
* nto-procfs.c (procfs_attach): Add process to inferior list.
|
||||||
|
Find threads after pushing the target.
|
||||||
|
(procfs_detach): Remove process from inferior list.
|
||||||
|
(procfs_create_inferior): Add process to inferior list.
|
||||||
|
* procfs.c (procfs_detach): Remove process from inferior list.
|
||||||
|
(do_attach): Add process to inferior list.
|
||||||
|
* remote-sim.c (sim_create_inferior): Add process to inferior list.
|
||||||
|
(gdbsim_close): Remove it.
|
||||||
|
* target.c (generic_mourn_inferior): If inferior_ptid is not
|
||||||
|
null_ptid, remove the corresponding inferior from inferior list.
|
||||||
|
* win32-nat.c (do_initial_win32_stuff): Add process to inferior list.
|
||||||
|
(win32_detach): Remove it.
|
||||||
|
* linux-nat.c (linux_child_follow_fork): Delete and add inferiors
|
||||||
|
to inferior list accordingly.
|
||||||
|
* fork-child.c (fork_inferior): Add process to inferior list.
|
||||||
|
* corelow.c (CORELOW_PID): Define.
|
||||||
|
(core_close): Remove core from inferior list.
|
||||||
|
(core_open): Add it.
|
||||||
|
|
||||||
2008-09-22 Pedro Alves <pedro@codesourcery.com>
|
2008-09-22 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* inferior.h: Forward declare struct ui_out.
|
* inferior.h: Forward declare struct ui_out.
|
||||||
|
@ -93,6 +93,9 @@ void _initialize_corelow (void);
|
|||||||
|
|
||||||
struct target_ops core_ops;
|
struct target_ops core_ops;
|
||||||
|
|
||||||
|
/* An arbitrary identifier for the core inferior. */
|
||||||
|
#define CORELOW_PID 1
|
||||||
|
|
||||||
/* Link a new core_fns into the global core_file_fns list. Called on gdb
|
/* Link a new core_fns into the global core_file_fns list. Called on gdb
|
||||||
startup by the _initialize routine in each core file register reader, to
|
startup by the _initialize routine in each core file register reader, to
|
||||||
register information about each format the the reader is prepared to
|
register information about each format the the reader is prepared to
|
||||||
@ -197,6 +200,7 @@ core_close (int quitting)
|
|||||||
if (core_bfd)
|
if (core_bfd)
|
||||||
{
|
{
|
||||||
inferior_ptid = null_ptid; /* Avoid confusion from thread stuff */
|
inferior_ptid = null_ptid; /* Avoid confusion from thread stuff */
|
||||||
|
delete_inferior_silent (CORELOW_PID);
|
||||||
|
|
||||||
/* Clear out solib state while the bfd is still open. See
|
/* Clear out solib state while the bfd is still open. See
|
||||||
comments in clear_solib in solib.c. */
|
comments in clear_solib in solib.c. */
|
||||||
@ -270,8 +274,7 @@ core_open (char *filename, int from_tty)
|
|||||||
bfd *temp_bfd;
|
bfd *temp_bfd;
|
||||||
int scratch_chan;
|
int scratch_chan;
|
||||||
int flags;
|
int flags;
|
||||||
/* An arbitrary identifier for the core inferior. */
|
int corelow_pid = CORELOW_PID;
|
||||||
int corelow_pid = 1;
|
|
||||||
|
|
||||||
target_preopen (from_tty);
|
target_preopen (from_tty);
|
||||||
if (!filename)
|
if (!filename)
|
||||||
@ -355,6 +358,8 @@ core_open (char *filename, int from_tty)
|
|||||||
push_target (&core_ops);
|
push_target (&core_ops);
|
||||||
discard_cleanups (old_chain);
|
discard_cleanups (old_chain);
|
||||||
|
|
||||||
|
add_inferior_silent (corelow_pid);
|
||||||
|
|
||||||
/* Do this before acknowledging the inferior, so if
|
/* Do this before acknowledging the inferior, so if
|
||||||
post_create_inferior throws (can happen easilly if you're loading
|
post_create_inferior throws (can happen easilly if you're loading
|
||||||
a core file with the wrong exec), we aren't left with threads
|
a core file with the wrong exec), we aren't left with threads
|
||||||
|
@ -394,6 +394,8 @@ fork_inferior (char *exec_file_arg, char *allargs, char **env,
|
|||||||
|
|
||||||
init_thread_list ();
|
init_thread_list ();
|
||||||
|
|
||||||
|
add_inferior (pid);
|
||||||
|
|
||||||
/* Needed for wait_for_inferior stuff below. */
|
/* Needed for wait_for_inferior stuff below. */
|
||||||
inferior_ptid = pid_to_ptid (pid);
|
inferior_ptid = pid_to_ptid (pid);
|
||||||
|
|
||||||
|
@ -2173,6 +2173,8 @@ gnu_attach (char *args, int from_tty)
|
|||||||
|
|
||||||
push_target (&gnu_ops);
|
push_target (&gnu_ops);
|
||||||
|
|
||||||
|
add_inferior (pid);
|
||||||
|
|
||||||
inf_update_procs (inf);
|
inf_update_procs (inf);
|
||||||
|
|
||||||
inferior_ptid = ptid_build (pid, 0, inf_pick_first_thread ());
|
inferior_ptid = ptid_build (pid, 0, inf_pick_first_thread ());
|
||||||
@ -2206,6 +2208,8 @@ gnu_attach (char *args, int from_tty)
|
|||||||
static void
|
static void
|
||||||
gnu_detach (char *args, int from_tty)
|
gnu_detach (char *args, int from_tty)
|
||||||
{
|
{
|
||||||
|
int pid;
|
||||||
|
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
{
|
{
|
||||||
char *exec_file = get_exec_file (0);
|
char *exec_file = get_exec_file (0);
|
||||||
@ -2217,9 +2221,12 @@ gnu_detach (char *args, int from_tty)
|
|||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pid = current_inferior->pid;
|
||||||
|
|
||||||
inf_detach (current_inferior);
|
inf_detach (current_inferior);
|
||||||
|
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
|
detach_inferior (pid);
|
||||||
|
|
||||||
unpush_target (&gnu_ops); /* Pop out of handling an inferior */
|
unpush_target (&gnu_ops); /* Pop out of handling an inferior */
|
||||||
}
|
}
|
||||||
|
@ -662,6 +662,8 @@ go32_create_inferior (char *exec_file, char *args, char **env, int from_tty)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
inferior_ptid = pid_to_ptid (SOME_PID);
|
inferior_ptid = pid_to_ptid (SOME_PID);
|
||||||
|
add_inferior_silent (SOME_PID);
|
||||||
|
|
||||||
push_target (&go32_ops);
|
push_target (&go32_ops);
|
||||||
|
|
||||||
add_thread_silent (inferior_ptid);
|
add_thread_silent (inferior_ptid);
|
||||||
|
@ -89,11 +89,14 @@ inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
|
|||||||
if (ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
|
if (ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
|
||||||
perror_with_name (("ptrace"));
|
perror_with_name (("ptrace"));
|
||||||
|
|
||||||
|
/* Switch inferior_ptid out of the parent's way. */
|
||||||
|
inferior_ptid = pid_to_ptid (fpid);
|
||||||
|
|
||||||
/* Delete the parent. */
|
/* Delete the parent. */
|
||||||
delete_thread_silent (last_tp->ptid);
|
detach_inferior (pid);
|
||||||
|
|
||||||
/* Add the child. */
|
/* Add the child. */
|
||||||
inferior_ptid = pid_to_ptid (fpid);
|
add_inferior (fpid);
|
||||||
tp = add_thread_silent (inferior_ptid);
|
tp = add_thread_silent (inferior_ptid);
|
||||||
|
|
||||||
tp->step_resume_breakpoint = step_resume_breakpoint;
|
tp->step_resume_breakpoint = step_resume_breakpoint;
|
||||||
@ -111,6 +114,7 @@ inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
|
|||||||
|
|
||||||
if (ptrace (PT_DETACH, fpid, (PTRACE_TYPE_ARG3)1, 0) == -1)
|
if (ptrace (PT_DETACH, fpid, (PTRACE_TYPE_ARG3)1, 0) == -1)
|
||||||
perror_with_name (("ptrace"));
|
perror_with_name (("ptrace"));
|
||||||
|
detach_inferior (pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -247,6 +251,8 @@ inf_ptrace_attach (char *args, int from_tty)
|
|||||||
|
|
||||||
inferior_ptid = pid_to_ptid (pid);
|
inferior_ptid = pid_to_ptid (pid);
|
||||||
|
|
||||||
|
add_inferior (pid);
|
||||||
|
|
||||||
/* Always add a main thread. If some target extends the ptrace
|
/* Always add a main thread. If some target extends the ptrace
|
||||||
target, it should decorate the ptid later with more info. */
|
target, it should decorate the ptid later with more info. */
|
||||||
add_thread_silent (inferior_ptid);
|
add_thread_silent (inferior_ptid);
|
||||||
@ -307,6 +313,7 @@ inf_ptrace_detach (char *args, int from_tty)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
|
detach_inferior (pid);
|
||||||
unpush_target (ptrace_ops_hack);
|
unpush_target (ptrace_ops_hack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -468,6 +468,7 @@ inf_ttrace_follow_fork (struct target_ops *ops, int follow_child)
|
|||||||
last_tp->step_resume_breakpoint = NULL;
|
last_tp->step_resume_breakpoint = NULL;
|
||||||
|
|
||||||
inferior_ptid = ptid_build (fpid, flwpid, 0);
|
inferior_ptid = ptid_build (fpid, flwpid, 0);
|
||||||
|
add_inferior (fpid);
|
||||||
detach_breakpoints (pid);
|
detach_breakpoints (pid);
|
||||||
|
|
||||||
target_terminal_ours ();
|
target_terminal_ours ();
|
||||||
@ -537,8 +538,9 @@ Detaching after fork from child process %ld.\n"), (long)fpid);
|
|||||||
|
|
||||||
/* Delete parent. */
|
/* Delete parent. */
|
||||||
delete_thread_silent (ptid_build (pid, lwpid, 0));
|
delete_thread_silent (ptid_build (pid, lwpid, 0));
|
||||||
|
detach_inferior (pid);
|
||||||
|
|
||||||
/* Add child. inferior_ptid was already set above. */
|
/* Add child thread. inferior_ptid was already set above. */
|
||||||
ti = add_thread_silent (inferior_ptid);
|
ti = add_thread_silent (inferior_ptid);
|
||||||
ti->private =
|
ti->private =
|
||||||
xmalloc (sizeof (struct inf_ttrace_private_thread_info));
|
xmalloc (sizeof (struct inf_ttrace_private_thread_info));
|
||||||
@ -742,6 +744,8 @@ inf_ttrace_attach (char *args, int from_tty)
|
|||||||
perror_with_name (("ttrace"));
|
perror_with_name (("ttrace"));
|
||||||
attach_flag = 1;
|
attach_flag = 1;
|
||||||
|
|
||||||
|
add_inferior (pid);
|
||||||
|
|
||||||
/* Set the initial event mask. */
|
/* Set the initial event mask. */
|
||||||
memset (&tte, 0, sizeof (tte));
|
memset (&tte, 0, sizeof (tte));
|
||||||
tte.tte_events |= TTEVT_EXEC | TTEVT_EXIT | TTEVT_FORK | TTEVT_VFORK;
|
tte.tte_events |= TTEVT_EXEC | TTEVT_EXIT | TTEVT_FORK | TTEVT_VFORK;
|
||||||
@ -796,8 +800,10 @@ inf_ttrace_detach (char *args, int from_tty)
|
|||||||
inf_ttrace_num_lwps = 0;
|
inf_ttrace_num_lwps = 0;
|
||||||
inf_ttrace_num_lwps_in_syscall = 0;
|
inf_ttrace_num_lwps_in_syscall = 0;
|
||||||
|
|
||||||
unpush_target (ttrace_ops_hack);
|
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
|
detach_inferior (pid);
|
||||||
|
|
||||||
|
unpush_target (ttrace_ops_hack);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -210,6 +210,7 @@ init_fork_list (void)
|
|||||||
for (fp = fork_list; fp; fp = fpnext)
|
for (fp = fork_list; fp; fp = fpnext)
|
||||||
{
|
{
|
||||||
fpnext = fp->next;
|
fpnext = fp->next;
|
||||||
|
delete_inferior (ptid_get_pid (fp->ptid));
|
||||||
free_fork (fp);
|
free_fork (fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,6 +370,8 @@ linux_fork_mourn_inferior (void)
|
|||||||
We need to delete that one from the fork_list, and switch
|
We need to delete that one from the fork_list, and switch
|
||||||
to the next available fork. */
|
to the next available fork. */
|
||||||
delete_fork (inferior_ptid);
|
delete_fork (inferior_ptid);
|
||||||
|
/* Delete process from GDB's inferior list. */
|
||||||
|
delete_inferior (ptid_get_pid (inferior_ptid));
|
||||||
|
|
||||||
/* There should still be a fork - if there's only one left,
|
/* There should still be a fork - if there's only one left,
|
||||||
delete_fork won't remove it, because we haven't updated
|
delete_fork won't remove it, because we haven't updated
|
||||||
@ -408,6 +411,8 @@ delete_fork_command (char *args, int from_tty)
|
|||||||
printf_filtered (_("Killed %s\n"), target_pid_to_str (ptid));
|
printf_filtered (_("Killed %s\n"), target_pid_to_str (ptid));
|
||||||
|
|
||||||
delete_fork (ptid);
|
delete_fork (ptid);
|
||||||
|
/* Delete process from GDB's inferior list. */
|
||||||
|
delete_inferior (ptid_get_pid (ptid));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -432,6 +437,8 @@ detach_fork_command (char *args, int from_tty)
|
|||||||
printf_filtered (_("Detached %s\n"), target_pid_to_str (ptid));
|
printf_filtered (_("Detached %s\n"), target_pid_to_str (ptid));
|
||||||
|
|
||||||
delete_fork (ptid);
|
delete_fork (ptid);
|
||||||
|
/* Delete process from GDB's process table. */
|
||||||
|
detach_inferior (ptid_get_pid (ptid));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print information about currently known forks. */
|
/* Print information about currently known forks. */
|
||||||
|
@ -711,6 +711,10 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct fork_info *fp;
|
struct fork_info *fp;
|
||||||
|
|
||||||
|
/* Add process to GDB's tables. */
|
||||||
|
add_inferior (child_pid);
|
||||||
|
|
||||||
/* Retain child fork in ptrace (stopped) state. */
|
/* Retain child fork in ptrace (stopped) state. */
|
||||||
fp = find_fork_pid (child_pid);
|
fp = find_fork_pid (child_pid);
|
||||||
if (!fp)
|
if (!fp)
|
||||||
@ -822,7 +826,10 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child)
|
|||||||
safely resume it. */
|
safely resume it. */
|
||||||
|
|
||||||
if (has_vforked)
|
if (has_vforked)
|
||||||
|
{
|
||||||
linux_parent_pid = parent_pid;
|
linux_parent_pid = parent_pid;
|
||||||
|
detach_inferior (parent_pid);
|
||||||
|
}
|
||||||
else if (!detach_fork)
|
else if (!detach_fork)
|
||||||
{
|
{
|
||||||
struct fork_info *fp;
|
struct fork_info *fp;
|
||||||
@ -836,6 +843,7 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child)
|
|||||||
target_detach (NULL, 0);
|
target_detach (NULL, 0);
|
||||||
|
|
||||||
inferior_ptid = ptid_build (child_pid, child_pid, 0);
|
inferior_ptid = ptid_build (child_pid, child_pid, 0);
|
||||||
|
add_inferior (child_pid);
|
||||||
|
|
||||||
/* Reinstall ourselves, since we might have been removed in
|
/* Reinstall ourselves, since we might have been removed in
|
||||||
target_detach (which does other necessary cleanup). */
|
target_detach (which does other necessary cleanup). */
|
||||||
|
@ -817,6 +817,7 @@ monitor_open (char *args, struct monitor_ops *mon_ops, int from_tty)
|
|||||||
|
|
||||||
/* Make run command think we are busy... */
|
/* Make run command think we are busy... */
|
||||||
inferior_ptid = monitor_ptid;
|
inferior_ptid = monitor_ptid;
|
||||||
|
add_inferior_silent (ptid_get_pid (inferior_ptid));
|
||||||
add_thread_silent (inferior_ptid);
|
add_thread_silent (inferior_ptid);
|
||||||
|
|
||||||
/* Give monitor_wait something to read */
|
/* Give monitor_wait something to read */
|
||||||
@ -845,6 +846,7 @@ monitor_close (int quitting)
|
|||||||
monitor_desc = NULL;
|
monitor_desc = NULL;
|
||||||
|
|
||||||
delete_thread_silent (monitor_ptid);
|
delete_thread_silent (monitor_ptid);
|
||||||
|
delete_inferior_silent (ptid_get_pid (monitor_ptid));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Terminate the open connection to the remote debugger. Use this
|
/* Terminate the open connection to the remote debugger. Use this
|
||||||
|
@ -535,8 +535,11 @@ procfs_attach (char *args, int from_tty)
|
|||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
}
|
}
|
||||||
inferior_ptid = do_attach (pid_to_ptid (pid));
|
inferior_ptid = do_attach (pid_to_ptid (pid));
|
||||||
procfs_find_new_threads ();
|
add_inferior (pid);
|
||||||
|
|
||||||
push_target (&procfs_ops);
|
push_target (&procfs_ops);
|
||||||
|
|
||||||
|
procfs_find_new_threads ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -770,6 +773,7 @@ static void
|
|||||||
procfs_detach (char *args, int from_tty)
|
procfs_detach (char *args, int from_tty)
|
||||||
{
|
{
|
||||||
int siggnal = 0;
|
int siggnal = 0;
|
||||||
|
int pid;
|
||||||
|
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
{
|
{
|
||||||
@ -788,9 +792,12 @@ procfs_detach (char *args, int from_tty)
|
|||||||
|
|
||||||
close (ctl_fd);
|
close (ctl_fd);
|
||||||
ctl_fd = -1;
|
ctl_fd = -1;
|
||||||
init_thread_list ();
|
|
||||||
|
pid = ptid_get_pid (inferior_ptid);
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
attach_flag = 0;
|
attach_flag = 0;
|
||||||
|
detach_inferior (pid);
|
||||||
|
init_thread_list ();
|
||||||
unpush_target (&procfs_ops); /* Pop out of handling an inferior. */
|
unpush_target (&procfs_ops); /* Pop out of handling an inferior. */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1077,7 +1084,9 @@ procfs_create_inferior (char *exec_file, char *allargs, char **env,
|
|||||||
|
|
||||||
inferior_ptid = do_attach (pid_to_ptid (pid));
|
inferior_ptid = do_attach (pid_to_ptid (pid));
|
||||||
|
|
||||||
|
add_inferior (pid);
|
||||||
attach_flag = 0;
|
attach_flag = 0;
|
||||||
|
|
||||||
flags = _DEBUG_FLAG_KLC; /* Kill-on-Last-Close flag. */
|
flags = _DEBUG_FLAG_KLC; /* Kill-on-Last-Close flag. */
|
||||||
errn = devctl (ctl_fd, DCMD_PROC_SET_FLAG, &flags, sizeof (flags), 0);
|
errn = devctl (ctl_fd, DCMD_PROC_SET_FLAG, &flags, sizeof (flags), 0);
|
||||||
if (errn != EOK)
|
if (errn != EOK)
|
||||||
|
@ -3634,13 +3634,13 @@ static void
|
|||||||
procfs_detach (char *args, int from_tty)
|
procfs_detach (char *args, int from_tty)
|
||||||
{
|
{
|
||||||
int sig = 0;
|
int sig = 0;
|
||||||
|
int pid = PIDGET (inferior_ptid);
|
||||||
|
|
||||||
if (args)
|
if (args)
|
||||||
sig = atoi (args);
|
sig = atoi (args);
|
||||||
|
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
{
|
{
|
||||||
int pid = PIDGET (inferior_ptid);
|
|
||||||
char *exec_file;
|
char *exec_file;
|
||||||
|
|
||||||
exec_file = get_exec_file (0);
|
exec_file = get_exec_file (0);
|
||||||
@ -3655,6 +3655,7 @@ procfs_detach (char *args, int from_tty)
|
|||||||
do_detach (sig);
|
do_detach (sig);
|
||||||
|
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
|
detach_inferior (pid);
|
||||||
unpush_target (&procfs_ops);
|
unpush_target (&procfs_ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3711,6 +3712,7 @@ do_attach (ptid_t ptid)
|
|||||||
if ((fail = procfs_debug_inferior (pi)) != 0)
|
if ((fail = procfs_debug_inferior (pi)) != 0)
|
||||||
dead_procinfo (pi, "do_attach: failed in procfs_debug_inferior", NOKILL);
|
dead_procinfo (pi, "do_attach: failed in procfs_debug_inferior", NOKILL);
|
||||||
|
|
||||||
|
add_inferior (pi->pid);
|
||||||
/* Let GDB know that the inferior was attached. */
|
/* Let GDB know that the inferior was attached. */
|
||||||
attach_flag = 1;
|
attach_flag = 1;
|
||||||
|
|
||||||
|
@ -480,6 +480,7 @@ gdbsim_create_inferior (char *exec_file, char *args, char **env, int from_tty)
|
|||||||
sim_create_inferior (gdbsim_desc, exec_bfd, argv, env);
|
sim_create_inferior (gdbsim_desc, exec_bfd, argv, env);
|
||||||
|
|
||||||
inferior_ptid = remote_sim_ptid;
|
inferior_ptid = remote_sim_ptid;
|
||||||
|
add_inferior_silent (ptid_get_pid (inferior_ptid);
|
||||||
add_thread_silent (inferior_ptid);
|
add_thread_silent (inferior_ptid);
|
||||||
|
|
||||||
target_mark_running (&gdbsim_ops);
|
target_mark_running (&gdbsim_ops);
|
||||||
@ -591,6 +592,7 @@ gdbsim_close (int quitting)
|
|||||||
end_callbacks ();
|
end_callbacks ();
|
||||||
generic_mourn_inferior ();
|
generic_mourn_inferior ();
|
||||||
delete_thread_silent (remote_sim_ptid);
|
delete_thread_silent (remote_sim_ptid);
|
||||||
|
delete_inferior_silent (ptid_get_pid (remote_sim_ptid));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Takes a program previously attached to and detaches it.
|
/* Takes a program previously attached to and detaches it.
|
||||||
|
@ -2338,8 +2338,17 @@ void
|
|||||||
generic_mourn_inferior (void)
|
generic_mourn_inferior (void)
|
||||||
{
|
{
|
||||||
extern int show_breakpoint_hit_counts;
|
extern int show_breakpoint_hit_counts;
|
||||||
|
ptid_t ptid;
|
||||||
|
|
||||||
|
ptid = inferior_ptid;
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
|
|
||||||
|
if (!ptid_equal (ptid, null_ptid))
|
||||||
|
{
|
||||||
|
int pid = ptid_get_pid (ptid);
|
||||||
|
delete_inferior (pid);
|
||||||
|
}
|
||||||
|
|
||||||
attach_flag = 0;
|
attach_flag = 0;
|
||||||
breakpoint_init_inferior (inf_exited);
|
breakpoint_init_inferior (inf_exited);
|
||||||
registers_changed ();
|
registers_changed ();
|
||||||
|
@ -1544,6 +1544,8 @@ do_initial_win32_stuff (DWORD pid)
|
|||||||
clear_proceed_status ();
|
clear_proceed_status ();
|
||||||
init_wait_for_inferior ();
|
init_wait_for_inferior ();
|
||||||
|
|
||||||
|
add_inferior (pid);
|
||||||
|
|
||||||
terminal_init_inferior_with_pgrp (pid);
|
terminal_init_inferior_with_pgrp (pid);
|
||||||
target_terminal_inferior ();
|
target_terminal_inferior ();
|
||||||
|
|
||||||
@ -1756,7 +1758,10 @@ win32_detach (char *args, int from_tty)
|
|||||||
current_event.dwProcessId);
|
current_event.dwProcessId);
|
||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
|
detach_inferior (current_event.dwProcessId);
|
||||||
|
|
||||||
unpush_target (&win32_ops);
|
unpush_target (&win32_ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1544,6 +1544,8 @@ do_initial_win32_stuff (DWORD pid)
|
|||||||
clear_proceed_status ();
|
clear_proceed_status ();
|
||||||
init_wait_for_inferior ();
|
init_wait_for_inferior ();
|
||||||
|
|
||||||
|
add_inferior (pid);
|
||||||
|
|
||||||
terminal_init_inferior_with_pgrp (pid);
|
terminal_init_inferior_with_pgrp (pid);
|
||||||
target_terminal_inferior ();
|
target_terminal_inferior ();
|
||||||
|
|
||||||
@ -1756,7 +1758,10 @@ win32_detach (char *args, int from_tty)
|
|||||||
current_event.dwProcessId);
|
current_event.dwProcessId);
|
||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
inferior_ptid = null_ptid;
|
inferior_ptid = null_ptid;
|
||||||
|
detach_inferior (current_event.dwProcessId);
|
||||||
|
|
||||||
unpush_target (&win32_ops);
|
unpush_target (&win32_ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user