[PATCH] remote.c: Ensure that inferior_ptid is on the thread list
Pedro Alves
palves@redhat.com
Tue Jul 14 10:18:00 GMT 2015
On 07/10/2015 09:50 PM, Kevin Buettner wrote:
> get_current_thread() then calls remote_current_thread with (a null)
> inferior_ptid. After the calls to putpkt() and getpkt(), rs->buf[0] is 'Q',
> so read_ptid() is called and its result is returned.
>
> The buffer passed to read_ptid() is " not supported". read_ptid ultimately
> returns a ptid of {pid = 4200, lwp = 0, tid = 0}.
>
Urgh.
Showing a snippet of the "set debug remote 1" logs in question
here would make this explanation clearer I think.
> However, this thread is not on the thread list. An earlier call to
> target_update_thread_list() had placed {pid = 42000, lwp = 1, tid = 0}
> on the list. This is the only thread in the list.
>
> When these calls ultimately return to remote_start_remote(),
> inferior_ptid gets set to {pid = 4200, lwp = 0, tid = 0}, which
> (again) is not on the thread list.
>
Seems like read_ptid should return null_ptid if it parsed nothing
instead of that. And/or remote_current_thread should return null_ptid
if there's more text after the read ptid string.
> I'm guessing that the string " not supported" is coming from the
> debug agent. If so, it should be fixed, but I don't see a reason
> to not consult the thread list in order to place a valid thread id
> in inferior_ptid.
Yeah, that seems fine.
>
> This (consultation of the thread list) is what is done when
> inferior_ptid is null_ptid:
>
> if (ptid_equal (inferior_ptid, null_ptid))
> {
Would you mind adding a remote_debug log here?
> /* Odd... The target was able to list threads, but not
> tell us which thread was current (no "thread"
> register in T stop reply?). Just pick the first
> thread in the thread list then. */
> inferior_ptid = thread_list->ptid;
> }
>
> This change simply extends the test so that the "Odd..." case will
> be used when inferior_ptid is not in the current set of threads.
>
> gdb/ChangeLog:
>
> * remote.c (remote_start_remote): Ensure that inferior_ptid is
> set to a ptid from the thread list.
Thanks,
Pedro Alves
More information about the Gdb-patches
mailing list