diff options
author | Tom Tromey <tromey@adacore.com> | 2020-08-07 10:26:45 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-08-07 10:26:47 -0600 |
commit | 39e2018a4e83522fef595d079c880c9097d70228 (patch) | |
tree | d1493fcd58ccd012745193687adf27ac8249eaab /gdb | |
parent | e09eef98a607f06b6de8165ce1e3ad00ce1c111a (diff) | |
download | gdb-39e2018a4e83522fef595d079c880c9097d70228.zip gdb-39e2018a4e83522fef595d079c880c9097d70228.tar.gz gdb-39e2018a4e83522fef595d079c880c9097d70228.tar.bz2 |
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 <tromey@adacore.com>
* ravenscar-thread.c (ravenscar_thread_target::resume): Handle
"is_pid" case.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ravenscar-thread.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e67b386..0d443a8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2020-08-07 Tom Tromey <tromey@adacore.com> + * ravenscar-thread.c (ravenscar_thread_target::resume): Handle + "is_pid" case. + +2020-08-07 Tom Tromey <tromey@adacore.com> + * ravenscar-thread.c (xfer_partial, enable_btrace, add_thread): New methods. (ravenscar_thread_target::get_thread_base_cpu): Check m_cpu_map diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c index a67a5e9..91f0920 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); } |