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 <[email protected]>--- 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
