Browse Source

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.
cygwin-64bit-branch
Ulrich Weigand 15 years ago
parent
commit
e714e1bf77
  1. 8
      gdb/ChangeLog
  2. 1
      gdb/inferior.c
  3. 2
      gdb/inferior.h
  4. 42
      gdb/remote.c

8
gdb/ChangeLog

@ -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.

1
gdb/inferior.c

@ -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;

2
gdb/inferior.h

@ -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

@ -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;
}
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;
}
remote_add_inferior (ptid_get_pid (inferior_ptid), -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…
Cancel
Save