Skip to content
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions lldb/docs/resources/lldbgdbremote.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit ambiguous because "unable to read any" could mean they all failed or just one.

You need a way to say "if by applying the rules above, the stub has read 0 bytes from the range...".

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually I'm the one that said to say "any" but I was wrong :) Zero is clearer.

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`.

**Priority to Implement:** Only required for performance, the debugger will
fall back to doing separate read requests if this packet is unavailable.

## QEnvironment:NAME=VALUE

Setup the environment up for a new child process that will soon be
Expand Down
Loading