[PATCH 11/15] winedbg: Support QStartNoAckMode to reduce verbosity.

Rémi Bernon rbernon at codeweavers.com
Mon Jan 27 06:07:14 CST 2020


We don't have to validate and acknowledge the packets as long as this
mode is enabled, this will reduce verbosity especially when tracing.

Also lldb requests that upfront, and may get confused if we don't
support it.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 programs/winedbg/gdbproxy.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index ab8b9bdd07c..160c2df0d20 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -94,6 +94,7 @@ struct gdb_context
     struct dbg_process*         process;
     /* Unix environment */
     unsigned long               wine_segs[3];   /* load addresses of the ELF wine exec segments (text, bss and data) */
+    BOOL                        no_ack_mode;
 };
 
 static BOOL tgt_process_gdbproxy_read(HANDLE hProcess, const void* addr,
@@ -1830,6 +1831,7 @@ static enum packet_return packet_query(struct gdb_context* gdbctx)
         if (strncmp(gdbctx->in_packet, "Supported", 9) == 0)
         {
             packet_reply_open(gdbctx);
+            packet_reply_add(gdbctx, "QStartNoAckMode+;");
             packet_reply_add(gdbctx, "qXfer:features:read+;");
             packet_reply_add(gdbctx, "qXfer:libraries:read+;");
             packet_reply_add(gdbctx, "qXfer:threads:read+;");
@@ -1892,6 +1894,17 @@ static enum packet_return packet_query(struct gdb_context* gdbctx)
     return packet_error;
 }
 
+static enum packet_return packet_set(struct gdb_context* gdbctx)
+{
+    if (strncmp(gdbctx->in_packet, "StartNoAckMode", 14) == 0)
+    {
+        gdbctx->no_ack_mode = TRUE;
+        return packet_reply(gdbctx, "OK");
+    }
+
+    return packet_error;
+}
+
 static enum packet_return packet_step(struct gdb_context* gdbctx)
 {
     /* FIXME: add support for address in packet */
@@ -1969,7 +1982,7 @@ static struct packet_entry packet_entries[] =
         {'p', packet_read_register},
         {'P', packet_write_register},
         {'q', packet_query},
-        /* {'Q', packet_set}, */
+        {'Q', packet_set},
         /* {'R', packet,restart}, only in extended mode ! */
         {'s', packet_step},        
         /*{'S', packet_step_signal}, hard(er) to implement */
@@ -1984,7 +1997,8 @@ static BOOL extract_packets(struct gdb_context* gdbctx)
     unsigned char cksum;
     int i, len;
 
-    while ((ptr = memchr(sum, '$', end - sum)) &&
+    while (!gdbctx->no_ack_mode &&
+           (ptr = memchr(sum, '$', end - sum)) &&
            (sum = memchr(ptr, '#', end - ptr)) &&
            snscanf(sum, end - sum, "#%02x", &cksum) == 1)
     {
@@ -2227,6 +2241,7 @@ static BOOL gdb_init_context(struct gdb_context* gdbctx, unsigned flags, unsigne
     gdbctx->last_sig = 0;
     gdbctx->in_trap = FALSE;
     gdbctx->process = NULL;
+    gdbctx->no_ack_mode = FALSE;
     for (i = 0; i < ARRAY_SIZE(gdbctx->wine_segs); i++)
         gdbctx->wine_segs[i] = 0;
 
-- 
2.25.0




More information about the wine-devel mailing list