]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement the new GDB 16.0 'x addr,len' packet.
authorPhilippe Waroquiers <philippe.waroquiers@skynet.be>
Sat, 21 Dec 2024 14:45:20 +0000 (15:45 +0100)
committerPhilippe Waroquiers <philippe.waroquiers@skynet.be>
Sat, 21 Dec 2024 14:45:20 +0000 (15:45 +0100)
GDB can read memory faster with this packet than with the 'm addr,len' packet.

NEWS
coregrind/m_gdbserver/server.c

diff --git a/NEWS b/NEWS
index d78d9e9a5dc86af0721fd336b609d1eab3188456..b668ad2e4becb8ab54903a0c3d06bdcd2ca6bf64 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,10 @@ AMD64/macOS 10.13 and nanoMIPS/Linux.
 
 * ==================== CORE CHANGES ===================
 
+* The valgrind gdbserver now supports the GDB remote protocol packet
+  'x addr,len' (available in GDB release >= 16).
+  The x packet can reduce the time taken by GDB to read memory from valgrind.
+
 * ================== PLATFORM CHANGES =================
 
 * ==================== TOOL CHANGES ===================
index 19a360c7a774a46f7a877d3631cbbef9164367e3..939b7f29319a5ca2eb088e107e4305d19c0ada5e 100644 (file)
@@ -1376,6 +1376,20 @@ void server_main (void)
          else
             write_enn (own_buf);
          break;
+      case 'x':
+         decode_m_packet (&own_buf[1], &mem_addr, &len);
+         if (valgrind_read_memory (mem_addr, mem_buf, len) == 0) {
+            // Read memory is successful.
+            // Complete the reply packet and indicate its length.
+            int out_len;
+            own_buf[0] = 'b';
+            new_packet_len
+               = 1 + remote_escape_output(mem_buf, len,
+                                          (unsigned char *) &own_buf[1], &out_len,
+                                          PBUFSIZ - POVERHSIZ - 1);
+         } else
+            write_enn (own_buf);
+         break;
       case 'X':
          if (decode_X_packet (&own_buf[1], packet_len - 1,
                               &mem_addr, &len, mem_buf) < 0