[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Fix for RSP vCont packet
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH] Fix for RSP vCont packet |
Date: |
Wed, 30 Jan 2019 21:47:19 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 |
On 1/30/19 6:41 PM, Lucien Anti-Spam via Qemu-devel wrote:
> This fixes a regression in rsp packet vCont due to recently added
> multiprocess support. (Short commit hash: e40e520).
>
Your mailer completely botched the message (wrong line endings?) Can
you please resend, preferably using git send-email, or at a minimum
attaching git format-patch output rather than inline pasting, so that we
stand a chance of seeing what you actually intended?
> The result is that vCont now does not recognise the case where no
> process/thread is provided after the action.
> This may not show up with GDB, but using Lauterbach Trace32, and Hexrays IDA
> Pro this issue is immediately seen.The response is a "$#00" empty packet,
> showing it is unsupported packet.
> This is defined in the RSP document as "An action with no thread-id matches
> all
> threads."(https://sourceware.org/gdb/current/onlinedocs/gdb/Packets.html#vCont-packet
> )
> Thus the valid vCont packets now are as below, however parsing is still not
> very strict. vCont;c/s - Step/Continue all threads
> vCont;c/s:[pX.]Y - Step/Continue optional process X, thread Y
> vCont;C##/S##:[pX.]Y - Step/Continue with signal ## on optional process
> X, thread Y * If X or Y are -1 then it applies the action to all
> processes/threads.
> Signed-off-by: Lucien Murray-Pitts <address@hidden>--- gdbstub.c | 16
> ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
> diff --git a/gdbstub.c b/gdbstub.cindex bfc7afb509..ce0dde2e24 100644---
> a/gdbstub.c+++ b/gdbstub.c@@ -1169,6 +1169,7 @@ static int
> is_query_packet(const char *p, const char *query, char separator) */ static
> int gdb_handle_vcont(GDBState *s, const char *p) {+ GDBThreadIdKind
> vcontThreadType ; int res, signal = 0; char cur_action; char
> *newstates;@@ -1218,12 +1219,23 @@ static int gdb_handle_vcont(GDBState *s,
> const char *p) goto out; } - if (*p++ != ':') {+
> /*+ * In the case we have vCont;c or vCont;s - action is on all
> threads+ * Alternatively vCont;c;s:p1.1 is a possible, but
> meaningless format,+ * And in the else the "vCont;c:p1.1;... format
> is supported.+ */+ if (*p == '\0' || *p == ';') {+
> vcontThreadType = GDB_ALL_THREADS ;+ pid = 1 ;+ tid = 1
> ;+ } else if (*p++ == ':') {+ vcontThreadType =
> read_thread_id(p, &p, &pid, &tid) ;+ } else { res =
> -ENOTSUP; goto out; } - switch (read_thread_id(p,
> &p, &pid, &tid)) {+ switch (vcontThreadType) { case
> GDB_READ_THREAD_ERR: res = -EINVAL; goto out;-- 2.17.2
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature