mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
2012-01-20 Pedro Alves <palves@redhat.com>
Ulrich Weigand <ulrich.weigand@linaro.org> * inferior.h (struct inferior): Add fake_pid_p. * inferior.c (exit_inferior_1): Clear fake_pid_p. * remote.c (remote_start_remote): Set fake_pid_p if we have to use magic_null_ptid since the remote side doesn't provide a real PID.
This commit is contained in:
parent
618d666674
commit
e714e1bf77
@ -1,3 +1,11 @@
|
||||
2012-01-20 Pedro Alves <palves@redhat.com>
|
||||
Ulrich Weigand <ulrich.weigand@linaro.org>
|
||||
|
||||
* inferior.h (struct inferior): Add fake_pid_p.
|
||||
* inferior.c (exit_inferior_1): Clear fake_pid_p.
|
||||
* remote.c (remote_start_remote): Set fake_pid_p if we have to use
|
||||
magic_null_ptid since the remote side doesn't provide a real PID.
|
||||
|
||||
2012-01-19 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* NEWS: Combine the two Python sections.
|
||||
|
@ -276,6 +276,7 @@ exit_inferior_1 (struct inferior *inftoex, int silent)
|
||||
observer_notify_inferior_exit (inf);
|
||||
|
||||
inf->pid = 0;
|
||||
inf->fake_pid_p = 0;
|
||||
if (inf->vfork_parent != NULL)
|
||||
{
|
||||
inf->vfork_parent->vfork_child = NULL;
|
||||
|
@ -421,6 +421,8 @@ struct inferior
|
||||
/* Actual target inferior id, usually, a process id. This matches
|
||||
the ptid_t.pid member of threads of this inferior. */
|
||||
int pid;
|
||||
/* True if the PID was actually faked by GDB. */
|
||||
int fake_pid_p;
|
||||
|
||||
/* State of GDB control of inferior process execution.
|
||||
See `struct inferior_control_state'. */
|
||||
|
42
gdb/remote.c
42
gdb/remote.c
@ -3253,6 +3253,10 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
|
||||
|
||||
if (!non_stop)
|
||||
{
|
||||
ptid_t ptid;
|
||||
int fake_pid_p = 0;
|
||||
struct inferior *inf;
|
||||
|
||||
if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
|
||||
{
|
||||
if (!extended_p)
|
||||
@ -3272,19 +3276,37 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
|
||||
/* Let the stub know that we want it to return the thread. */
|
||||
set_continue_thread (minus_one_ptid);
|
||||
|
||||
/* Without this, some commands which require an active target
|
||||
(such as kill) won't work. This variable serves (at least)
|
||||
double duty as both the pid of the target process (if it has
|
||||
such), and as a flag indicating that a target is active.
|
||||
These functions should be split out into seperate variables,
|
||||
especially since GDB will someday have a notion of debugging
|
||||
several processes. */
|
||||
inferior_ptid = magic_null_ptid;
|
||||
inferior_ptid = minus_one_ptid;
|
||||
|
||||
/* Now, if we have thread information, update inferior_ptid. */
|
||||
inferior_ptid = remote_current_thread (inferior_ptid);
|
||||
ptid = remote_current_thread (inferior_ptid);
|
||||
if (!ptid_equal (ptid, minus_one_ptid))
|
||||
{
|
||||
if (ptid_get_pid (ptid) == -1)
|
||||
{
|
||||
ptid = ptid_build (ptid_get_pid (magic_null_ptid),
|
||||
ptid_get_lwp (ptid),
|
||||
ptid_get_tid (ptid));
|
||||
fake_pid_p = 1;
|
||||
}
|
||||
|
||||
remote_add_inferior (ptid_get_pid (inferior_ptid), -1);
|
||||
inferior_ptid = ptid;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Without this, some commands which require an active
|
||||
target (such as kill) won't work. This variable serves
|
||||
(at least) double duty as both the pid of the target
|
||||
process (if it has such), and as a flag indicating that a
|
||||
target is active. These functions should be split out
|
||||
into seperate variables, especially since GDB will
|
||||
someday have a notion of debugging several processes. */
|
||||
inferior_ptid = magic_null_ptid;
|
||||
fake_pid_p = 1;
|
||||
}
|
||||
|
||||
inf = remote_add_inferior (ptid_get_pid (inferior_ptid), -1);
|
||||
inf->fake_pid_p = fake_pid_p;
|
||||
|
||||
/* Always add the main thread. */
|
||||
add_thread_silent (inferior_ptid);
|
||||
|
Loading…
Reference in New Issue
Block a user