From: Philippe W. <phi...@so...> - 2024-12-21 14:47:27
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=706c5dd0bae49be20ce15c2eeacbbf2c9d49a852 commit 706c5dd0bae49be20ce15c2eeacbbf2c9d49a852 Author: Philippe Waroquiers <phi...@sk...> Date: Sat Dec 21 15:45:20 2024 +0100 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: --- NEWS | 4 ++++ coregrind/m_gdbserver/server.c | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/NEWS b/NEWS index d78d9e9a5d..b668ad2e4b 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 19a360c7a7..939b7f2931 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 |