[Lldb-commits] [lldb] [gdbremote] Document MultiMemRead packet in protocol extensions (PR #162675)
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Wed Oct 15 01:49:22 PDT 2025
================
@@ -735,6 +735,56 @@ This is a performance optimization, which speeds up debugging by avoiding
multiple round-trips for retrieving thread information. The information from this
packet can be retrieved using a combination of `qThreadStopInfo` and `m` packets.
+### MultiMemRead
+
+Read memory from multiple memory ranges.
+
+This packet has one argument:
+
+* `ranges`: a list of pairs of numbers, formatted in base-16. Each pair is
+separated by a `,`, as is each number in each pair. The first number of the
+pair denotes the base address of the memory read, the second denotes the number
+of bytes to be read. The list must end with a `;`.
+
+The reply packet starts with a comma-separated list of numbers formatted in
+base-16, denoting how many bytes were read from each range, in the same order
+as the request packet. The list is followed by a `;`, followed by a sequence of
+bytes containing binary encoded data for all memory that was read. The length
+of this sequence must be equal to the sum of the numbers provided at the start
+of the reply. The order of the binary data is the same as the order of the
+ranges in the request packet.
+
+If an entire range is not readable, the stub may perform a partial read of a
+prefix of the range.
+
+If the stub is unable to read any bytes from a particular range, it must return
+a length of "zero" for that range in the reply packet; no bytes for this memory
+range are included in the sequence of bytes that follows.
+
+A stub that supports this packet must include `MultiMemRead+` in the reply to
+`qSupported`.
+
+```
+send packet: $MultiMemRead:ranges:100a00,4,200200,a0,400000,4;
+read packet: $4,0,2;<binary encoding of abcd1000><binary encoding of eeff>
+```
+
+In the example above, the first read produced `abcd1000`, the read of `a0`
+bytes from address `200200` failed to read any bytes, and the third read
+produced two bytes – `eeff` – out of the four requested.
+
+```
+send packet: $MultiMemRead:ranges:100a00,0;
+read packet: $0;
+```
+
+In the example above, a read of zero bytes was requested. A zero-length request
+provides an alternative way of testing whether the stub supports
+`MultiMemRead`.
----------------
DavidSpickett wrote:
Given our qSupported discussion, does it actually give a way to check for support? Due to the `M` prefix issue.
Also we say "must" include the qSupported tag. So perhaps we just don't mention this slightly risky alternative.
https://github.com/llvm/llvm-project/pull/162675
More information about the lldb-commits
mailing list