diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2012-01-20 09:42:44 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2012-01-20 09:42:44 +0000 |
commit | e714e1bf77429248e080fee199c87376a8649184 (patch) | |
tree | 6d061758ba7fd610a4b282f01a3bde7c78a01fab /gdb | |
parent | 618d666674ca5ab37b3632bf719afa27703f6a72 (diff) | |
download | gdb-e714e1bf77429248e080fee199c87376a8649184.zip gdb-e714e1bf77429248e080fee199c87376a8649184.tar.gz gdb-e714e1bf77429248e080fee199c87376a8649184.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/inferior.c | 1 | ||||
-rw-r--r-- | gdb/inferior.h | 2 | ||||
-rw-r--r-- | gdb/remote.c | 42 |
4 files changed, 43 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c241643..975fd75 100644 --- a/gdb/ChangeLog +++ b/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. diff --git a/gdb/inferior.c b/gdb/inferior.c index 65948c4..4df8c77 100644 --- a/gdb/inferior.c +++ b/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; diff --git a/gdb/inferior.h b/gdb/inferior.h index f05789f..7857cbf 100644 --- a/gdb/inferior.h +++ b/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'. */ diff --git a/gdb/remote.c b/gdb/remote.c index 60d7ecd..3a9e2f6 100644 --- a/gdb/remote.c +++ b/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); |