From: Philippe Waroquiers Date: Sat, 21 Dec 2024 14:45:20 +0000 (+0100) Subject: Implement the new GDB 16.0 'x addr,len' packet. X-Git-Tag: VALGRIND_3_25_0~197 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=706c5dd0bae49be20ce15c2eeacbbf2c9d49a852;p=thirdparty%2Fvalgrind.git Implement the new GDB 16.0 'x addr,len' packet. GDB can read memory faster with this packet than with the 'm addr,len' packet. --- diff --git a/NEWS b/NEWS index d78d9e9a5..b668ad2e4 100644 --- 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 =================== diff --git a/coregrind/m_gdbserver/server.c b/coregrind/m_gdbserver/server.c index 19a360c7a..939b7f293 100644 --- a/coregrind/m_gdbserver/server.c +++ b/coregrind/m_gdbserver/server.c @@ -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