From: Tom Tromey Date: Fri, 7 Aug 2020 16:26:45 +0000 (-0600) Subject: Fix Ravenscar "process" resume X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=39e2018a4e83522fef595d079c880c9097d70228;p=binutils-gdb.git Fix Ravenscar "process" resume A coworker noticed that gdb would send the wrong vCont packet to qemu when debugging a Ravenscar program: > (gdb) thread 2 > [Switching to thread 2 (Thread 1.2)] > #0 0x0000000000001000 in ?? () > (gdb) c [...] > Sending packet: $vCont;c:p1.1#e2...Ack Here, we've switched to thread 2, but the packet says to resume thread 1. This turned out to be a bug in ravenscar_thread_target::resume, which did not properly handle the case of a "process" resume. In particular, the resume method would be passed a ptid of (1, 0, 0) -- but then rewrite this to its saved ptid. This patch fixes the problem by recognizing this case in the resume method. gdb/ChangeLog 2020-08-07 Tom Tromey * ravenscar-thread.c (ravenscar_thread_target::resume): Handle "is_pid" case. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e67b386b418..0d443a8f72d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-08-07 Tom Tromey + + * ravenscar-thread.c (ravenscar_thread_target::resume): Handle + "is_pid" case. + 2020-08-07 Tom Tromey * ravenscar-thread.c (xfer_partial, enable_btrace, add_thread): diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c index a67a5e9a368..91f09209bbc 100644 --- a/gdb/ravenscar-thread.c +++ b/gdb/ravenscar-thread.c @@ -363,7 +363,12 @@ ravenscar_thread_target::resume (ptid_t ptid, int step, /* If we see a wildcard resume, we simply pass that on. Otherwise, arrange to resume the base ptid. */ inferior_ptid = m_base_ptid; - if (ptid != minus_one_ptid) + if (ptid.is_pid ()) + { + /* We only have one process, so resume all threads of it. */ + ptid = minus_one_ptid; + } + else if (ptid != minus_one_ptid) ptid = m_base_ptid; beneath ()->resume (ptid, step, siggnal); }