This fixes a regression in rsp packet vCont due to recently added multiprocess support. (Short commit hash: e40e520).
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 <lucienmp_antis...@yahoo.com>--- 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