LLDB has added new GDB server packets to better support multi-threaded and
remote debugging. Why? Normally you need to start the correct GDB and the
correct GDB server when debugging. If you have mismatch, then things go wrong
very quickly. LLDB makes extensive use of the GDB remote protocol and we 
wanted to make sure that the experience was a bit more dynamic where we can
discover information about a remote target with having to know anything up
front. We also ran into performance issues with the existing GDB remote 
protocol that can be overcome when using a reliable communications layer.
Some packets improve performance, others allow for remote process launching
(if you have an OS), and others allow us to dynamically figure out what
registers a thread might have. Again with GDB, both sides pre-agree on how the
registers will look (how many, their register number,name and offsets). We 
prefer to be able to dynamically determine what kind of architecture, OS and
vendor we are debugging, as well as how things are laid out when it comes to
the thread register contexts. Below are the details on the new packets we have
added above and beyond the standard GDB remote protocol packets.

//----------------------------------------------------------------------
// "QStartNoAckMode"
//
// BRIEF
//  Try to enable no ACK mode to skip sending ACKs and NACKs.
//
// PRIORITY TO IMPLEMENT
//  High. Any GDB remote server that can implement this should if the
//  connection is reliable. This improves packet throughput and increases
//  the performance of the connection.
//----------------------------------------------------------------------
Having to send an ACK/NACK after every packet slows things down a bit, so we
have a way to disable ACK packets to minimize the traffic for reliable
communication interfaces (like sockets). Below GDB or LLDB will send this
packet to try and disable ACKs. All lines that start with "send packet: " are
from GDB/LLDB, and all lines that start with "read packet: " are from the GDB
remote server:

send packet: $QStartNoAckMode#b0
read packet: +
read packet: $OK#9a
send packet: +



//----------------------------------------------------------------------
// "A" - launch args packet
//
// BRIEF
//  Launch a program using the supplied arguments
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed if the remote target wants to launch a target after
//  making a connection to a GDB server that isn't already connected to
//  an inferior process.
//----------------------------------------------------------------------

We have added support for the "set program arguments" packet where we can
start a connection to a remote server and then later supply the path to the
executable and the arguments to use when executing:

GDB remote docs for this:

set program arguments(reserved) Aarglen,argnum,arg,...

Where A is followed by the length in bytes of the hex encoded argument,
followed by an argument integer, and followed by the ASCII characters
converted into hex bytes foreach arg

send packet: $A98,0,2f566f6c756d65732f776f726b2f67636c6179746f6e2f446f63756d656e74732f7372632f6174746163682f612e6f7574#00
read packet: $OK#00

The above packet helps when you have remote debugging abilities where you
could launch a process on a remote host, this isn't needed for bare board
debugging.

//----------------------------------------------------------------------
// "QEnvironment:NAME=VALUE"
//
// BRIEF
//  Setup the environment up for a new child process that will soon be
//  launched using the "A" packet.
//
// NB: key/value pairs are sent as-is so gdb-remote protocol meta characters
//     (e.g. '#' or '$') are not acceptable.  If any non-printable or 
//     metacharacters are present in the strings, QEnvironmentHexEncoded
//     should be used instead if it is available.  If you don't want to
//     scan the environment strings before sending, prefer 
//     the QEnvironmentHexEncoded packet over QEnvironment, if it is
//     available.
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed if the remote target wants to launch a target after
//  making a connection to a GDB server that isn't already connected to
//  an inferior process.
//----------------------------------------------------------------------

Both GDB and LLDB support passing down environment variables. Is it ok to
respond with a "$#00" (unimplemented):

send packet: $QEnvironment:ACK_COLOR_FILENAME=bold yellow#00
read packet: $OK#00

This packet can be sent one or more times _prior_ to sending a "A" packet.

//----------------------------------------------------------------------
// "QEnvironmentHexEncoded:HEX-ENCODING(NAME=VALUE)"
//
// BRIEF
//  Setup the environment up for a new child process that will soon be
//  launched using the "A" packet.
//
// The only difference between this packet and QEnvironment is that the
// environment key-value pair is ascii hex encoded for transmission.
// This allows values with gdb-remote metacharacters like '#' to be sent.
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed if the remote target wants to launch a target after
//  making a connection to a GDB server that isn't already connected to
//  an inferior process.
//----------------------------------------------------------------------

Both GDB and LLDB support passing down environment variables. Is it ok to
respond with a "$#00" (unimplemented):

send packet: $QEnvironment:41434b5f434f4c4f525f46494c454e414d453d626f6c642379656c6c6f77#00
read packet: $OK#00

This packet can be sent one or more times _prior_ to sending a "A" packet.

//----------------------------------------------------------------------
// "QEnableErrorStrings"
//
// BRIEF
//  This packet enables reporting of Error strings in remote packet
//  replies from the server to client. If the server supports this
//  feature, it should send an OK response. The client can expect the
//  following error replies if this feature is enabled in the server ->
//
//  EXX;AAAAAAAAA
//
//  where AAAAAAAAA will be a hex encoded ASCII string.
//  XX is hex encoded byte number.
//
//  It must be noted that even if the client has enabled reporting
//  strings in error replies, it must not expect error strings to all
//  error replies.
// 
// PRIORITY TO IMPLEMENT
//  Low. Only needed if the remote target wants to provide strings that
//  are human readable along with an error code.
//----------------------------------------------------------------------

send packet: $QErrorStringInPacketSupported
read packet: $OK#00

//----------------------------------------------------------------------
// "QSetSTDIN:<ascii-hex-path>"
// "QSetSTDOUT:<ascii-hex-path>"
// "QSetSTDERR:<ascii-hex-path>"
//
// BRIEF
//  Setup where STDIN, STDOUT, and STDERR go prior to sending an "A" 
//  packet.
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed if the remote target wants to launch a target after
//  making a connection to a GDB server that isn't already connected to
//  an inferior process.
//----------------------------------------------------------------------

When launching a program through the GDB remote protocol with the "A" packet,
you might also want to specify where stdin/out/err go:

QSetSTDIN:<ascii-hex-path>
QSetSTDOUT:<ascii-hex-path>
QSetSTDERR:<ascii-hex-path>

These packets must be sent  _prior_ to sending a "A" packet.

//----------------------------------------------------------------------
// "QSetWorkingDir:<ascii-hex-path>"
//
// BRIEF
//  Set the working directory prior to sending an "A" packet.
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed if the remote target wants to launch a target after
//  making a connection to a GDB server that isn't already connected to
//  an inferior process.
//----------------------------------------------------------------------

Or specify the working directory:

QSetWorkingDir:<ascii-hex-path>

This packet must be sent  _prior_ to sending a "A" packet.

//----------------------------------------------------------------------
// "QSetDisableASLR:<bool>"
//
// BRIEF
//  Enable or disable ASLR on the next "A" packet.
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed if the remote target wants to launch a target after
//  making a connection to a GDB server that isn't already connected to
//  an inferior process and if the target supports disabling ASLR
//  (Address space layout randomization).
//----------------------------------------------------------------------

Or control if ASLR is enabled/disabled:

send packet: QSetDisableASLR:1
read packet: OK

send packet: QSetDisableASLR:0
read packet: OK

This packet must be sent  _prior_ to sending a "A" packet.

//----------------------------------------------------------------------
// QListThreadsInStopReply
//
// BRIEF
//  Enable the threads: and thread-pcs: data in the question-mark packet
//  ("T packet") responses when the stub reports that a program has 
//  stopped executing.
//
// PRIORITY TO IMPLEMENT
//  Performance.  This is a performance benefit to lldb if the thread id's
//  and thread pc values are provided to lldb in the T stop packet -- if
//  they are not provided to lldb, lldb will likely need to send one to
//  two packets per thread to fetch the data at every private stop.
//----------------------------------------------------------------------

send packet: QListThreadsInStopReply
read packet: OK

//----------------------------------------------------------------------
// jTraceStart:
//
// BRIEF
//  Packet for starting trace of type lldb::TraceType. The following
//  parameters should be appended to the packet formatted as a JSON
//  dictionary, where the schematic for the JSON dictionary in terms of
//  the recognized Keys is given below in the table.
//  Different tracing types could require different custom parameters.
//  Such custom tracing parameters if needed should be collectively
//  specified in a JSON dictionary and the dictionary can be appended
//  to this packet (as Value corresponding to "params"). Since sending
//  JSON data over gdb-remote protocol has certain limitations, binary
//  escaping convention should be used.
//
//  Following is the list of parameters -
//
//  Key             Value (Integer)                         (O)Optional/
//                  (except params which should be a        (M)Mandatory
//                  JSON dictionary)
//  ==========      ====================================================
//
//  type            The type of trace to start (see          M
//                  lldb-enumerations for TraceType)
//
//  buffersize      The size of the buffer to allocate       M
//                  for trace gathering.
//
//  threadid        The id of the thread to start tracing    O
//                  on.
//
//  metabuffersize  The size of buffer to hold meta data     O
//                  used for decoding the trace data.
//
//  params          Any parameters that are specific to      O
//                  certain trace technologies should be
//                  collectively specified as a JSON
//                  dictionary
//  ==========      ====================================================
//
//  Each tracing instance is identified by a trace id which is returned
//  as the reply to this packet. In case the tracing failed to begin an
//  error code along with a hex encoded ASCII message is returned
//  instead.
//----------------------------------------------------------------------

send packet: jTraceStart:{"type":<type>,"buffersize":<buffersize>}]
read packet: <trace id>/E<error code>;AAAAAAAAA

//----------------------------------------------------------------------
// jTraceStop:
//
// BRIEF
//  Stop tracing instance with trace id <trace id>, of course trace
//  needs to be started before. The following parameters should be
//  formatted as a JSON dictionary to the packet. Since sending
//  JSON data over gdb-remote protocol has certain limitations, binary
//  escaping convention should be used.
//
//  Following is the list of parameters -
//
//  Key             Value (Integer)                         (O)Optional/
//                                                          (M)Mandatory
//  ==========      ====================================================
//
//  traceid         The trace id of the tracing instance    M
//
//  threadid        The id of the thread to stop tracing    O
//                  on. Since <trace id> could map to
//                  multiple trace instances (in case it
//                  maps to the complete process), the
//                  threadid of a particular thread could
//                  be appended as "threadid:<thread id>;"
//                  to stop tracing on that thread.
//  ==========      ====================================================
//
//  An OK response is sent in case of success else an error code along
//  with a hex encoded ASCII message is returned.
//----------------------------------------------------------------------

send packet: jTraceStop:{"traceid":<trace id>}]
read packet: <OK response>/E<error code>;AAAAAAAAA

//----------------------------------------------------------------------
// jTraceBufferRead:
//
// BRIEF
//  Packet for reading the trace for tracing instance <trace id>, i.e the
//  id obtained from StartTrace API. The following parameters should be
//  formatted as a JSON dictionary to the packet. Since sending
//  JSON data over gdb-remote protocol has certain limitations, binary
//  escaping convention should be used.
//
//  Following is the list of parameters -
//
//  Key             Value (Integer)                         (O)Optional/
//                                                          (M)Mandatory
//  ==========      ====================================================
//  traceid         The trace id of the tracing instance    M
//
//  offset          The offset to start reading the data    M
//                  from.
//
//  buffersize      The size of the data intended to read.  M
//
//  threadid        The id of the thread to retrieve data   O
//                  from.
//  ==========      ====================================================
//
//  The trace data is sent as raw binary data if the read was successful
//  else an error code along with a hex encoded ASCII message is sent.
//----------------------------------------------------------------------

send packet: jTraceBufferRead:{"traceid":<trace id>,"offset":<byteoffset>,"buffersize":<byte_count>}]
read packet: <binary trace data>/E<error code>;AAAAAAAAA

//----------------------------------------------------------------------
// jTraceMetaRead:
//
// BRIEF
//  Similar Packet as above except it reads meta data.
//----------------------------------------------------------------------

/----------------------------------------------------------------------
// jTraceConfigRead:
//
// BRIEF
//  Request the trace configuration for the tracing instance with id
//  <trace id>.
//
//  Following is the list of parameters -
//
//  Key             Value (Integer)                         (O)Optional/
//                                                          (M)Mandatory
//  ==========      ====================================================
//  traceid         The trace id of the tracing instance    M
//
//  threadid        The id of the thread to obtain trace    O
//                  configuration from. Since <trace id>
//                  could map to multiple trace instances
//                  (in case it maps to the complete
//                  process), the threadid of a particular
//                  thread could be appended as
//                  "threadid:<thread id>;" to obtain the
//                  trace configuration of that thread.
//  ==========      ====================================================
//
//  In the response packet the trace configuration is sent as text,
//  formatted as a JSON dictionary. Since sending JSON data over
//  gdb-remote protocol has certain limitations, binary escaping
//  convention is used.
//  In case the trace instance with the <trace id> was not found, an
//  error code along with a hex encoded ASCII message is returned.
//----------------------------------------------------------------------

send packet: jTraceConfigRead:{"traceid":<trace id>}
read packet: {"conf1":<conf1>,"conf2":<conf2>,"params":{"paramName":paramValue}]}];/E<error code>;AAAAAAAAA

//----------------------------------------------------------------------
// "qRegisterInfo<hex-reg-id>"
//
// BRIEF
//  Discover register information from the remote GDB server.
//
// PRIORITY TO IMPLEMENT
//  High. Any target that can self describe its registers, should do so.
//  This means if new registers are ever added to a remote target, they
//  will get picked up automatically, and allows registers to change
//  depending on the actual CPU type that is used.
//
//  NB: As of summer 2015, lldb can get register information from the 
//  "qXfer:features:read:target.xml" FSF gdb standard register packet
//  where the stub provides register definitions in an XML file.
//  If qXfer:features:read:target.xml is supported, qRegisterInfo does
//  not need to be implemented.
//----------------------------------------------------------------------

With LLDB, for register information, remote GDB servers can add
support for the "qRegisterInfoN" packet where "N" is a zero based
base16 register number that must start at zero and increase by one
for each register that is supported.  The response is done in typical
GDB remote fashion where a series of "KEY:VALUE;" pairs are returned.
An example for the x86_64 registers is included below:

send packet: $qRegisterInfo0#00
read packet: $name:rax;bitsize:64;offset:0;encoding:uint;format:hex;set:General Purpose Registers;gcc:0;dwarf:0;#00
send packet: $qRegisterInfo1#00
read packet: $name:rbx;bitsize:64;offset:8;encoding:uint;format:hex;set:General Purpose Registers;gcc:3;dwarf:3;#00
send packet: $qRegisterInfo2#00
read packet: $name:rcx;bitsize:64;offset:16;encoding:uint;format:hex;set:General Purpose Registers;gcc:2;dwarf:2;#00
send packet: $qRegisterInfo3#00
read packet: $name:rdx;bitsize:64;offset:24;encoding:uint;format:hex;set:General Purpose Registers;gcc:1;dwarf:1;#00
send packet: $qRegisterInfo4#00
read packet: $name:rdi;bitsize:64;offset:32;encoding:uint;format:hex;set:General Purpose Registers;gcc:5;dwarf:5;#00
send packet: $qRegisterInfo5#00
read packet: $name:rsi;bitsize:64;offset:40;encoding:uint;format:hex;set:General Purpose Registers;gcc:4;dwarf:4;#00
send packet: $qRegisterInfo6#00
read packet: $name:rbp;alt-name:fp;bitsize:64;offset:48;encoding:uint;format:hex;set:General Purpose Registers;gcc:6;dwarf:6;generic:fp;#00
send packet: $qRegisterInfo7#00
read packet: $name:rsp;alt-name:sp;bitsize:64;offset:56;encoding:uint;format:hex;set:General Purpose Registers;gcc:7;dwarf:7;generic:sp;#00
send packet: $qRegisterInfo8#00
read packet: $name:r8;bitsize:64;offset:64;encoding:uint;format:hex;set:General Purpose Registers;gcc:8;dwarf:8;#00
send packet: $qRegisterInfo9#00
read packet: $name:r9;bitsize:64;offset:72;encoding:uint;format:hex;set:General Purpose Registers;gcc:9;dwarf:9;#00
send packet: $qRegisterInfoa#00
read packet: $name:r10;bitsize:64;offset:80;encoding:uint;format:hex;set:General Purpose Registers;gcc:10;dwarf:10;#00
send packet: $qRegisterInfob#00
read packet: $name:r11;bitsize:64;offset:88;encoding:uint;format:hex;set:General Purpose Registers;gcc:11;dwarf:11;#00
send packet: $qRegisterInfoc#00
read packet: $name:r12;bitsize:64;offset:96;encoding:uint;format:hex;set:General Purpose Registers;gcc:12;dwarf:12;#00
send packet: $qRegisterInfod#00
read packet: $name:r13;bitsize:64;offset:104;encoding:uint;format:hex;set:General Purpose Registers;gcc:13;dwarf:13;#00
send packet: $qRegisterInfoe#00
read packet: $name:r14;bitsize:64;offset:112;encoding:uint;format:hex;set:General Purpose Registers;gcc:14;dwarf:14;#00
send packet: $qRegisterInfof#00
read packet: $name:r15;bitsize:64;offset:120;encoding:uint;format:hex;set:General Purpose Registers;gcc:15;dwarf:15;#00
send packet: $qRegisterInfo10#00
read packet: $name:rip;alt-name:pc;bitsize:64;offset:128;encoding:uint;format:hex;set:General Purpose Registers;gcc:16;dwarf:16;generic:pc;#00
send packet: $qRegisterInfo11#00
read packet: $name:rflags;alt-name:flags;bitsize:64;offset:136;encoding:uint;format:hex;set:General Purpose Registers;#00
send packet: $qRegisterInfo12#00
read packet: $name:cs;bitsize:64;offset:144;encoding:uint;format:hex;set:General Purpose Registers;#00
send packet: $qRegisterInfo13#00
read packet: $name:fs;bitsize:64;offset:152;encoding:uint;format:hex;set:General Purpose Registers;#00
send packet: $qRegisterInfo14#00
read packet: $name:gs;bitsize:64;offset:160;encoding:uint;format:hex;set:General Purpose Registers;#00
send packet: $qRegisterInfo15#00
read packet: $name:fctrl;bitsize:16;offset:176;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo16#00
read packet: $name:fstat;bitsize:16;offset:178;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo17#00
read packet: $name:ftag;bitsize:8;offset:180;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo18#00
read packet: $name:fop;bitsize:16;offset:182;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo19#00
read packet: $name:fioff;bitsize:32;offset:184;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo1a#00
read packet: $name:fiseg;bitsize:16;offset:188;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo1b#00
read packet: $name:fooff;bitsize:32;offset:192;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo1c#00
read packet: $name:foseg;bitsize:16;offset:196;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo1d#00
read packet: $name:mxcsr;bitsize:32;offset:200;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo1e#00
read packet: $name:mxcsrmask;bitsize:32;offset:204;encoding:uint;format:hex;set:Floating Point Registers;#00
send packet: $qRegisterInfo1f#00
read packet: $name:stmm0;bitsize:80;offset:208;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:33;dwarf:33;#00
send packet: $qRegisterInfo20#00
read packet: $name:stmm1;bitsize:80;offset:224;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:34;dwarf:34;#00
send packet: $qRegisterInfo21#00
read packet: $name:stmm2;bitsize:80;offset:240;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:35;dwarf:35;#00
send packet: $qRegisterInfo22#00
read packet: $name:stmm3;bitsize:80;offset:256;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:36;dwarf:36;#00
send packet: $qRegisterInfo23#00
read packet: $name:stmm4;bitsize:80;offset:272;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:37;dwarf:37;#00
send packet: $qRegisterInfo24#00
read packet: $name:stmm5;bitsize:80;offset:288;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:38;dwarf:38;#00
send packet: $qRegisterInfo25#00
read packet: $name:stmm6;bitsize:80;offset:304;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:39;dwarf:39;#00
send packet: $qRegisterInfo26#00
read packet: $name:stmm7;bitsize:80;offset:320;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:40;dwarf:40;#00
send packet: $qRegisterInfo27#00
read packet: $name:xmm0;bitsize:128;offset:336;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:17;dwarf:17;#00
send packet: $qRegisterInfo28#00
read packet: $name:xmm1;bitsize:128;offset:352;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:18;dwarf:18;#00
send packet: $qRegisterInfo29#00
read packet: $name:xmm2;bitsize:128;offset:368;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:19;dwarf:19;#00
send packet: $qRegisterInfo2a#00
read packet: $name:xmm3;bitsize:128;offset:384;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:20;dwarf:20;#00
send packet: $qRegisterInfo2b#00
read packet: $name:xmm4;bitsize:128;offset:400;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:21;dwarf:21;#00
send packet: $qRegisterInfo2c#00
read packet: $name:xmm5;bitsize:128;offset:416;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:22;dwarf:22;#00
send packet: $qRegisterInfo2d#00
read packet: $name:xmm6;bitsize:128;offset:432;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:23;dwarf:23;#00
send packet: $qRegisterInfo2e#00
read packet: $name:xmm7;bitsize:128;offset:448;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:24;dwarf:24;#00
send packet: $qRegisterInfo2f#00
read packet: $name:xmm8;bitsize:128;offset:464;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:25;dwarf:25;#00
send packet: $qRegisterInfo30#00
read packet: $name:xmm9;bitsize:128;offset:480;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:26;dwarf:26;#00
send packet: $qRegisterInfo31#00
read packet: $name:xmm10;bitsize:128;offset:496;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:27;dwarf:27;#00
send packet: $qRegisterInfo32#00
read packet: $name:xmm11;bitsize:128;offset:512;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:28;dwarf:28;#00
send packet: $qRegisterInfo33#00
read packet: $name:xmm12;bitsize:128;offset:528;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:29;dwarf:29;#00
send packet: $qRegisterInfo34#00
read packet: $name:xmm13;bitsize:128;offset:544;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:30;dwarf:30;#00
send packet: $qRegisterInfo35#00
read packet: $name:xmm14;bitsize:128;offset:560;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:31;dwarf:31;#00
send packet: $qRegisterInfo36#00
read packet: $name:xmm15;bitsize:128;offset:576;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:32;dwarf:32;#00
send packet: $qRegisterInfo37#00
read packet: $name:trapno;bitsize:32;offset:696;encoding:uint;format:hex;set:Exception State Registers;#00
send packet: $qRegisterInfo38#00
read packet: $name:err;bitsize:32;offset:700;encoding:uint;format:hex;set:Exception State Registers;#00
send packet: $qRegisterInfo39#00
read packet: $name:faultvaddr;bitsize:64;offset:704;encoding:uint;format:hex;set:Exception State Registers;#00
send packet: $qRegisterInfo3a#00
read packet: $E45#00

As we see above we keep making subsequent calls to the remote server to
discover all registers by increasing the number appended to qRegisterInfo and
we get a response back that is a series of "key=value;" strings. 

The offset: fields should not leave a gap anywhere in the g/G packet -- the
register values should be appended one after another.  For instance, if the
register context for a thread looks like 

struct rctx {
    uint32_t gpr1;  // offset 0
    uint32_t gpr2;  // offset 4
    uint32_t gpr3;  // offset 8
    uint64_t fp1;   // offset 16
};

You may end up with a 4-byte gap between gpr3 and fp1 on architectures
that align values like this.  The correct offset: value for fp1 is 12 -
in the g/G packet fp1 will immediately follow gpr3, even though the 
in-memory thread structure has an empty 4 bytes for alignment between 
these two registers.

The keys and values are detailed below:

Key         Value
==========  ================================================================
name        The primary register name as a string ("rbp" for example)

alt-name    An alternate name for a register as a string ("fp" for example for
            the above "rbp")

bitsize     Size in bits of a register (32, 64, etc).  Base 10.

offset      The offset within the "g" and "G" packet of the register data for
            this register.  This is the byte offset once the data has been
            transformed into binary, not the character offset into the g/G 
            packet.  Base 10.

encoding    The encoding type of the register which must be one of: 

                 uint (unsigned integer)
                 sint (signed integer)
                 ieee754 (IEEE 754 float)
                 vector (vector register)

format      The preferred format for display of this register. The value must
            be one of:

                binary
                decimal
                hex
                float
                vector-sint8
                vector-uint8 
                vector-sint16
                vector-uint16
                vector-sint32
                vector-uint32
                vector-float32
                vector-uint128

set         The register set name as a string that this register belongs to.

gcc         The GCC compiler registers number for this register (used for
            EH frame and other compiler information that is encoded in the
            executable files). The supplied number will be decoded like a
            string passed to strtoul() with a base of zero, so the number
            can be decimal, or hex if it is prefixed with "0x".

            NOTE: If the compiler doesn't have a register number for this 
            register, this key/value pair should be omitted.

dwarf       The DWARF register number for this register that is used for this
            register in the debug information. The supplied number will be decoded
            like a string passed to strtoul() with a base of zero, so the number
            can be decimal, or hex if it is prefixed with "0x".

            NOTE: If the compiler doesn't have a register number for this 
            register, this key/value pair should be omitted.

generic     If the register is a generic register that most CPUs have, classify
            it correctly so the debugger knows. Valid values are one of:
             pc  (a program counter register. for example "name=eip;" (i386), 
                  "name=rip;" (x86_64), "name=r15;" (32 bit arm) would 
                  include a "generic=pc;" key value pair)
             sp  (a stack pointer register. for example "name=esp;" (i386), 
                  "name=rsp;" (x86_64), "name=r13;" (32 bit arm) would 
                  include a "generic=sp;" key value pair)
             fp  (a frame pointer register. for example "name=ebp;" (i386), 
                   "name=rbp;" (x86_64), "name=r7;" (32 bit arm with macosx 
                   ABI) would include a "generic=fp;" key value pair)
             ra  (a return address register. for example "name=lr;" (32 bit ARM) 
                  would include a "generic=ra;" key value pair)
             fp  (a CPU flags register. for example "name=eflags;" (i386), 
                  "name=rflags;" (x86_64), "name=cpsr;" (32 bit ARM) 
                  would include a "generic=flags;" key value pair)
             arg1 - arg8 (specified for registers that contain function 
                      arguments when the argument fits into a register)

container-regs
            The value for this key is a comma separated list of raw hex (optional 
            leading "0x") register numbers.

            This specifies that this register is contained in other concrete
            register values. For example "eax" is in the lower 32 bits of the
            "rax" register value for x86_64, so "eax" could specify that it is
            contained in "rax" by specifying the register number for "rax" (whose
            register number is 0x00)
            
            "container-regs:00;"
            
            If a register is comprised of one or more registers, like "d0" is ARM
            which is a 64 bit register, it might be made up of "s0" and "s1". If
            the register number for "s0" is 0x20, and the register number of "s1"
            is "0x21", the "container-regs" key/value pair would be:
            
            "container-regs:20,21;"
            
            This is handy for defining what GDB used to call "pseudo" registers.
            These registers are never requested by LLDB via the register read
            or write packets, the container registers will be requested on behalf
            of this register.
            
invalidate-regs
            The value for this key is a comma separated list of raw hex (optional 
            leading "0x") register numbers.
            
            This specifies which register values should be invalidated when this
            register is modified. For example if modifying "eax" would cause "rax",
            "eax", "ax", "ah", and "al" to be modified where rax is 0x0, eax is 0x15,
            ax is 0x25, ah is 0x35, and al is 0x39, the "invalidate-regs" key/value
            pair would be:

            "invalidate-regs:0,15,25,35,39;"
            
            If there is a single register that gets invalidated, then omit the comma
            and just list a single register:
            
            "invalidate-regs:0;"
            
            This is handy when modifying a specific register can cause other
            register values to change. For example, when debugging an ARM target,
            modifying the CPSR register can cause the r8 - r14 and cpsr value to
            change depending on if the mode has changed. 

//----------------------------------------------------------------------
// "qPlatform_shell"
//
// BRIEF
//  Run a command in a shell on the connected remote machine.
//
// PRIORITY TO IMPLEMENT
//  High. This command allows LLDB clients to run arbitrary shell
//  commands on a remote host.
//
/----------------------------------------------------------------------

The request consists of the command to be executed encoded in ASCII characters
converted into hex bytes.

The response to this packet consists of the letter F followed by the return code,
followed by the signal number (or 0 if no signal was delivered), and escaped bytes
of captured program output.

Below is an example communication from a client sending an "ls -la" command:

send packet: $qPlatform_shell:6c73202d6c61,00000002#ec
read packet: $F,00000000,00000000,total 4736
drwxrwxr-x 16 username groupname    4096 Aug 15 21:36 .
drwxr-xr-x 17 username groupname    4096 Aug 10 16:39 ..
-rw-rw-r--  1 username groupname   73875 Aug 12 16:46 notes.txt
drwxrwxr-x  5 username groupname    4096 Aug 15 21:36 source.cpp
-rw-r--r--  1 username groupname    2792 Aug 12 16:46 a.out
-rw-r--r--  1 username groupname    3190 Aug 12 16:46 Makefile

//----------------------------------------------------------------------
// "qPlatform_mkdir"
//
// BRIEF
//  Creates a new directory on the connected remote machine.
//
// PRIORITY TO IMPLEMENT
//  Low. This command allows LLDB clients to create new directories on
//  a remote host.
//
/----------------------------------------------------------------------

Request:
    qPlatform_mkdir:<hex-file-mode>,<ascii-hex-path>

Reply:
    F<mkdir-return-code>
        mkdir called successfully and returned with the given return code
    Exx
        An error occurred

//----------------------------------------------------------------------
// "qPlatform_chmod"
//
// BRIEF
//  Change the permissions of a file on the connected remote machine.
//
// PRIORITY TO IMPLEMENT
//  Low. This command allows LLDB clients to change the permissions of
//  a file on the remote host.
//
/----------------------------------------------------------------------

Request:
    qPlatform_chmod:<hex-file-mode>,<ascii-hex-path>

Reply:
    F<chmod-return-code>
        chmod called successfully and returned with the given return code
    Exx
        An error occurred

//----------------------------------------------------------------------
// "qHostInfo"
//
// BRIEF
//  Get information about the host we are remotely connected to.
//
// PRIORITY TO IMPLEMENT
//  High. This packet is usually very easy to implement and can help
//  LLDB select the correct plug-ins for the job based on the target
//  triple information that is supplied.
//----------------------------------------------------------------------

LLDB supports a host info call that gets all sorts of details of the system
that is being debugged:

send packet: $qHostInfo#00
read packet: $cputype:16777223;cpusubtype:3;ostype:darwin;vendor:apple;endian:little;ptrsize:8;#00

Key value pairs are one of:

cputype: is a number that is the mach-o CPU type that is being debugged (base 10)
cpusubtype: is a number that is the mach-o CPU subtype type that is being debugged (base 10)
triple: a string for the target triple (x86_64-apple-macosx) that can be used to specify arch + vendor + os in one entry
vendor: a string for the vendor (apple), not needed if "triple" is specified
ostype: a string for the OS being debugged (macosx, linux, freebsd, ios, watchos), not needed if "triple" is specified
endian: is one of "little", "big", or "pdp"
ptrsize: an unsigned number that represents how big pointers are in bytes on the debug target
hostname: the hostname of the host that is running the GDB server if available
os_build: a string for the OS build for the remote host as a string value
os_kernel: a string describing the kernel version
os_version: a version string that represents the current OS version (10.8.2)
watchpoint_exceptions_received: one of "before" or "after" to specify if a watchpoint is triggered before or after the pc when it stops
default_packet_timeout: an unsigned number that specifies the default timeout in seconds
distribution_id: optional. For linux, specifies distribution id (e.g. ubuntu, fedora, etc.)
osmajor: optional, specifies the major version number of the OS (e.g. for Mac OS X 10.11.2, it would be 10)
osminor: optional, specifies the minor version number of the OS (e.g. for Mac OS X 10.11.2, it would be 11)
ospatch: optional, specifies the patch level number of the OS (e.g. for Mac OS X 10.11.2, it would be 2)

//----------------------------------------------------------------------
// "qGDBServerVersion"
//
// BRIEF
//  Get version information about this implementation of the gdb-remote 
//  protocol.
//
// PRIORITY TO IMPLEMENT
//  High. This packet is usually very easy to implement and can help
//  LLDB to work around bugs in a server's implementation when they 
//  are found.
//----------------------------------------------------------------------

The goal of this packet is to provide enough information about an
implementation of the gdb-remote-protocol server that lldb can
work around implementation problems that are discovered after the
version has been released/deployed.  The name and version number
should be sufficiently unique that lldb can unambiguously identify
the origin of the program (for instance, debugserver from lldb) and
the version/submission number/patch level of the program - whatever
is appropriate for your server implementation.

The packet follows the key-value pair model, semicolon separated.

send packet: $qGDBServerVersion#00
read packet: $name:debugserver;version:310.2;#00

Other clients may find other key-value pairs to be useful for identifying
a gdb stub.  Patch level, release name, build number may all be keys that 
better describe your implementation's version.  
Suggested key names:

  name   : the name of your remote server - "debugserver" is the lldb standard
           implementation

  version : identifies the version number of this server

  patch_level : the patch level of this server

  release_name : the name of this release, if your project uses names

  build_number : if you use a build system with increasing build numbers,
                 this may be the right key name for your server

  major_version : major version number
  minor_version : minor version number

//----------------------------------------------------------------------
// "qProcessInfo"
//
// BRIEF
//  Get information about the process we are currently debugging.
//
// PRIORITY TO IMPLEMENT
//  Medium.  On systems which can launch multiple different architecture processes,
//  the qHostInfo may not disambiguate sufficiently to know what kind of 
//  process is being debugged.
//  e.g. on a 64-bit x86 Mac system both 32-bit and 64-bit user processes are possible,
//  and with Mach-O universal files, the executable file may contain both 32- and 
//  64-bit slices so it may be impossible to know until you're attached to a real
//  process to know what you're working with.
//
//  All numeric fields return base-16 numbers without any "0x" prefix.
//----------------------------------------------------------------------

An i386 process:

send packet: $qProcessInfo#00
read packet: $pid:42a8;parent-pid:42bf;real-uid:ecf;real-gid:b;effective-uid:ecf;effective-gid:b;cputype:7;cpusubtype:3;ostype:macosx;vendor:apple;endian:little;ptrsize:4;#00

An x86_64 process:

send packet: $qProcessInfo#00
read packet: $pid:d22c;parent-pid:d34d;real-uid:ecf;real-gid:b;effective-uid:ecf;effective-gid:b;cputype:1000007;cpusubtype:3;ostype:macosx;vendor:apple;endian:little;ptrsize:8;#00

Key value pairs include:

pid: the process id
parent-pid: the process of the parent process (often debugserver will become the parent when attaching)
real-uid: the real user id of the process
real-gid: the real group id of the process
effective-uid: the effective user id of the process
effective-gid: the effective group id of the process
cputype: the Mach-O CPU type of the process  (base 16)
cpusubtype: the Mach-O CPU subtype of the process  (base 16)
ostype: is a string the represents the OS being debugged (darwin, linux, freebsd)
vendor: is a string that represents the vendor (apple)
endian: is one of "little", "big", or "pdp"
ptrsize: is a number that represents how big pointers are in bytes


//----------------------------------------------------------------------
// "qShlibInfoAddr"
//
// BRIEF
//  Get an address where the dynamic linker stores information about 
//  where shared libraries are loaded.
//
// PRIORITY TO IMPLEMENT
//  High if you have a dynamic loader plug-in in LLDB for your target
//  triple (see the "qHostInfo" packet) that can use this information.
//  Many times address load randomization can make it hard to detect 
//  where the dynamic loader binary and data structures are located and
//  some platforms know, or can find out where this information is.
//
//  Low if you have a debug target where all object and symbol files 
//  contain static load addresses.
//----------------------------------------------------------------------

LLDB and GDB both support the "qShlibInfoAddr" packet which is a hint to each
debugger as to where to find the dynamic loader information. For darwin
binaries that run in user land this is the address of the "all_image_infos"
structure in the "/usr/lib/dyld" executable, or the result of a TASK_DYLD_INFO
call. The result is returned as big endian hex bytes that are the address
value:

send packet: $qShlibInfoAddr#00
read packet: $7fff5fc40040#00



//----------------------------------------------------------------------
// "qThreadStopInfo<tid>"
//
// BRIEF
//  Get information about why a thread, whose ID is "<tid>", is stopped.
//
// PRIORITY TO IMPLEMENT
//  High if you need to support multi-threaded or multi-core debugging.
//  Many times one thread will hit a breakpoint and while the debugger
//  is in the process of suspending the other threads, other threads
//  will also hit a breakpoint. This packet allows LLDB to know why all
//  threads (live system debug) / cores (JTAG) in your program have 
//  stopped and allows LLDB to display and control your program 
//  correctly.
//----------------------------------------------------------------------
    
LLDB tries to use the "qThreadStopInfo" packet which is formatted as
"qThreadStopInfo%x" where %x is the hex thread ID. This requests information
about why a thread is stopped. The response is the same as the stop reply
packets and tells us what happened to the other threads. The standard GDB
remote packets love to think that there is only _one_ reason that _one_ thread
stops at a time. This allows us to see why all threads stopped and allows us
to implement better multi-threaded debugging support.

//----------------------------------------------------------------------
// "QThreadSuffixSupported"
//
// BRIEF
//  Try to enable thread suffix support for the 'g', 'G', 'p', and 'P'
//  packets.
//
// PRIORITY TO IMPLEMENT
//  High. Adding a thread suffix allows us to read and write registers
//  more efficiently and stops us from having to select a thread with
//  one packet and then read registers with a second packet. It also
//  makes sure that no errors can occur where the debugger thinks it
//  already has a thread selected (see the "Hg" packet from the standard
//  GDB remote protocol documentation) yet the remote GDB server actually
//  has another thread selected.
//----------------------------------------------------------------------

When reading thread registers, you currently need to set the current
thread, then read the registers. This is kind of cumbersome, so we added the
ability to query if the remote GDB server supports adding a "thread:<tid>;"
suffix to all packets that request information for a thread. To test if the
remote GDB server supports this feature:

send packet: $QThreadSuffixSupported#00
read packet: OK

If "OK" is returned, then the 'g', 'G', 'p' and 'P' packets can accept a
thread suffix. So to send a 'g' packet (read all register values):

send packet: $g;thread:<tid>;#00
read packet: ....

send packet: $G;thread:<tid>;#00
read packet: ....

send packet: $p1a;thread:<tid>;#00
read packet: ....

send packet: $P1a=1234abcd;thread:<tid>;#00
read packet: ....


otherwise, without this you would need to always send two packets:

send packet: $Hg<tid>#00
read packet: ....
send packet: $g#00
read packet: ....

We also added support for allocating and deallocating memory. We use this to
allocate memory so we can run JITed code.

//----------------------------------------------------------------------
// "_M<size>,<permissions>"
//
// BRIEF
//  Allocate memory on the remote target with the specified size and
//  permissions.
//
// PRIORITY TO IMPLEMENT
//  High if you want LLDB to be able to JIT code and run that code. JIT
//  code also needs data which is also allocated and tracked.
//
//  Low if you don't support running JIT'ed code.
//----------------------------------------------------------------------

The allocate memory packet starts with "_M<size>,<permissions>". It returns a
raw big endian address value, or "" for unimplemented, or "EXX" for an error
code. The packet is formatted as:

char packet[256];
int packet_len;
packet_len = ::snprintf (
    packet, 
    sizeof(packet), 
    "_M%zx,%s%s%s", 
    (size_t)size,
    permissions & lldb::ePermissionsReadable ? "r" : "",
    permissions & lldb::ePermissionsWritable ? "w" : "",
    permissions & lldb::ePermissionsExecutable ? "x" : "");

You request a size and give the permissions. This packet does NOT need to be
implemented if you don't want to support running JITed code. The return value
is just the address of the newly allocated memory as raw big endian hex bytes.

//----------------------------------------------------------------------
// "_m<addr>"
//
// BRIEF
//  Deallocate memory that was previously allocated using an allocate
//  memory pack.
//
// PRIORITY TO IMPLEMENT
//  High if you want LLDB to be able to JIT code and run that code. JIT
//  code also needs data which is also allocated and tracked.
//
//  Low if you don't support running JIT'ed code.
//----------------------------------------------------------------------

The deallocate memory packet is "_m<addr>" where you pass in the address you
got back from a previous call to the allocate memory packet. It returns "OK"
if the memory was successfully deallocated, or "EXX" for an error, or "" if
not supported.

//----------------------------------------------------------------------
// "qMemoryRegionInfo:<addr>"
//
// BRIEF
//  Get information about the address range that contains "<addr>"
//
// PRIORITY TO IMPLEMENT
//  Medium. This is nice to have, but it isn't necessary. It helps LLDB
//  do stack unwinding when we branch into memory that isn't executable.
//  If we can detect that the code we are stopped in isn't executable,
//  then we can recover registers for stack frames above the current
//  frame. Otherwise we must assume we are in some JIT'ed code (not JIT
//  code that LLDB has made) and assume that no registers are available
//  in higher stack frames.
//----------------------------------------------------------------------

We added a way to get information for a memory region. The packet is:

    qMemoryRegionInfo:<addr>
    
Where <addr> is a big endian hex address. The response is returned in a series
of tuples like the data returned in a stop reply packet. The currently valid
tuples to return are:

    start:<start-addr>; // <start-addr> is a big endian hex address that is 
                        // the start address of the range that contains <addr>
    
    size:<size>;    // <size> is a big endian hex byte size of the address
                    // of the range that contains <addr>
    
    permissions:<permissions>;  // <permissions> is a string that contains one
                                // or more of the characters from "rwx"

    name:<name>; // <name> is a hex encoded string that contains the name of
                 // the memory region mapped at the given address. In case of
                 // regions backed by a file it have to be the absolute path of
                 // the file while for anonymous regions it have to be the name
                 // associated to the region if that is available.
                                
    error:<ascii-byte-error-string>; // where <ascii-byte-error-string> is
                                     // a hex encoded string value that 
                                     // contains an error string
                                    
If the address requested is not in a mapped region (e.g. we've jumped through
a NULL pointer and are at 0x0) currently lldb expects to get back the size 
of the unmapped region -- that is, the distance to the next valid region.
For instance, with a Mac OS X process which has nothing mapped in the first
4GB of its address space, if we're asking about address 0x2,

  qMemoryRegionInfo:2
  start:2;size:fffffffe;

The lack of 'permissions:' indicates that none of read/write/execute are valid
for this region.

//----------------------------------------------------------------------
// "x" - Binary memory read
//
// Like the 'm' (read) and 'M' (write) packets, this is a partner to the
// 'X' (write binary data) packet, 'x'.
//
// It is called like
//
// xADDRESS,LENGTH
//
// where both ADDRESS and LENGTH are big-endian base 16 values.
//
// To test if this packet is available, send a addr/len of 0:
//
// x0,0
//
// and you will get an "OK" response.
//
// The reply will be the data requested in 8-bit binary data format.
// The standard quoting is applied to the payload -- characters
//   }  #  $  *
// will all be escaped with '}' (0x7d) character and then XOR'ed with 0x20.
//
// A typical use to read 512 bytes at 0x1000 would look like
//
// x0x1000,0x200
//
// The "0x" prefixes are optional - like most of the gdb-remote packets,
// omitting them will work fine; these numbers are always base 16.
// 
// The length of the payload is not provided.  A reliable, 8-bit clean, 
// transport layer is assumed.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// Detach and stay stopped:
//
// We extended the "D" packet to specify that the monitor should keep the
// target suspended on detach.  The normal behavior is to resume execution
// on detach.  We will send:
//
//  qSupportsDetachAndStayStopped:
//
// to query whether the monitor supports the extended detach, and if it does,
// when we want the monitor to detach but not resume the target, we will
// send:
// 
//   D1
//
// In any case, if we want the normal detach behavior we will just send:
//
//   D
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// QSaveRegisterState
// QSaveRegisterState;thread:XXXX;
//
// BRIEF
//  The QSaveRegisterState packet tells the remote debugserver to save
//  all registers and return a non-zero unique integer ID that 
//  represents these save registers. If thread suffixes are enabled the
//  second form of this packet is used, otherwise the first form is 
//  used. This packet is called prior to executing an expression, so
//  the remote GDB server should do anything it needs to in order to 
//  ensure the registers that are saved are correct. On MacOSX this
//  involves calling "thread_abort_safely(mach_port_t thread)" to 
//  ensure we get the correct registers for a thread in case it is
//  currently having code run on its behalf in the kernel.
//
// RESPONSE
//  unsigned - The save_id result is a non-zero unsigned integer value
//             that can be passed back to the GDB server using a
//             QRestoreRegisterState packet to restore the registers
//             one time.
//  "EXX" - or an error code in the form of EXX where XX is a
//  hex error code.
//
// PRIORITY TO IMPLEMENT
//  Low, this is mostly a convenience packet to avoid having to send all
//  registers via a g packet. It should only be implemented if support
//  for the QRestoreRegisterState is added.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// QRestoreRegisterState:<save_id>
// QRestoreRegisterState:<save_id>;thread:XXXX;
//
// BRIEF
//  The QRestoreRegisterState packet tells the remote debugserver to 
//  restore all registers using the "save_id" which is an unsigned
//  integer that was returned from a previous call to 
//  QSaveRegisterState. The restoration process can only be done once
//  as the data backing the register state will be freed upon the 
//  completion of the QRestoreRegisterState command.
//
//  If thread suffixes are enabled the second form of this packet is 
//  used, otherwise the first form is used.
//
// RESPONSE
//  "OK" - if all registers were successfully restored
//  "EXX" - for any errors
//
// PRIORITY TO IMPLEMENT
//  Low, this is mostly a convenience packet to avoid having to send all
//  registers via a g packet. It should only be implemented if support
//  for the QSaveRegisterState is added.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// qFileLoadAddress:<file_path>
//
// BRIEF
//  Get the load address of a memory mapped file.
//  The load address is defined as the address of the first memory
//  region what contains data mapped from the specified file.
//
// RESPONSE
//  <unsigned-hex64> - Load address of the file in big endian encoding
//  "E01" - the requested file isn't loaded
//  "EXX" - for any other errors
//
// PRIORITY TO IMPLEMENT
//  Low, required if dynamic linker don't fill in the load address of
//  some object file in the rendezvous data structure.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// qModuleInfo:<module_path>;<arch triple>
//
// BRIEF
//  Get information for a module by given module path and architecture.
//
// RESPONSE
//  "(uuid|md5):...;triple:...;file_offset:...;file_size...;"
//  "EXX" - for any errors
//
// PRIORITY TO IMPLEMENT
//  Optional, required if dynamic loader cannot fetch module's information like
//  UUID directly from inferior's memory.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// jModulesInfo:[{"file":"...",triple:"..."}, ...]
//
// BRIEF
//  Get information for a list of modules by given module path and
//  architecture.
//
// RESPONSE
//  A JSON array of dictionaries containing the following keys: uuid,
//  triple, file_path, file_offset, file_size. The meaning of the fields
//  is the same as in the qModuleInfo packet. The server signals the
//  failure to retrieve the module info for a file by ommiting the
//  corresponding array entry from the response. The server may also
//  include entries the client did not ask for, if it has reason to
//  the modules will be interesting to the client.
//
// PRIORITY TO IMPLEMENT
//  Optional. If not implemented, qModuleInfo packet will be used, which
//  may be slower if the target contains a large number of modules and
//  the communication link has a non-negligible latency.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// Stop reply packet extensions
//
// BRIEF
//  This section describes some of the additional information you can
//  specify in stop reply packets that help LLDB to know more detailed
//  information about your threads.
//
// DESCRIPTION
//  Standard GDB remote stop reply packets are reply packets sent in
//  response to a packet  that made the program run. They come in the
//  following forms:
//
//  "SAA"
//  "S" means signal and "AA" is a hex signal number that describes why 
//  the thread or stopped. It doesn't specify which thread, so the "T"
//  packet is recommended to use instead of the "S" packet.
//
//  "TAAkey1:value1;key2:value2;..."
//  "T" means a thread stopped due to a unix signal where "AA" is a hex 
//  signal number that describes why the program stopped. This is 
//  followed by a series of key/value pairs:
//      - If key is a hex number, it is a register number and value is
//        the hex value of the register in debuggee endian byte order.
//      - If key == "thread", then the value is the big endian hex
//        thread-id of the stopped thread.
//      - If key == "core", then value is a hex number of the core on
//        which the stop was detected.
//      - If key == "watch" or key == "rwatch" or key == "awatch", then
//        value is the data address in big endian hex
//      - If key == "library", then value is ignore and "qXfer:libraries:read"
//        packets should be used to detect any newly loaded shared libraries
//
//  "WAA"
//  "W" means the process exited and "AA" is the exit status.
//
//  "XAA"
//  "X" means the process exited and "AA" is signal that caused the program
//  to exit.
//
//  "O<ascii-hex-string>"
//  "O" means STDOUT has data that was written to its console and is
//  being delivered to the debugger. This packet happens asynchronously
//  and the debugger is expected to continue to wait for another stop reply
//  packet.
//
// LLDB EXTENSIONS
//
//  We have extended the "T" packet to be able to also understand the
//  following keys and values:
//
//  KEY           VALUE     DESCRIPTION
//  ===========   ========  ================================================
//  "metype"      unsigned  mach exception type (the value of the EXC_XXX enumerations)
//                          as an unsigned integer. For targets with mach 
//                          kernels only.
//
//  "mecount"     unsigned  mach exception data count as an unsigned integer
//                          For targets with mach kernels only.
//
//  "medata"      unsigned  There should be "mecount" of these and it is the data
//                          that goes along with a mach exception (as an unsigned 
//                          integer). For targets with mach kernels only.
//
//  "name"        string    The name of the thread as a plain string. The string
//                          must not contain an special packet characters or
//                          contain a ':' or a ';'. Use "hexname" if the thread
//                          name has special characters.
//
//  "hexname"     ascii-hex An ASCII hex string that contains the name of the thread
//
//  "qaddr"       hex       Big endian hex value that contains the libdispatch
//                          queue address for the queue of the thread.
//
//  "reason"      enum      The enumeration must be one of:
//                          "trace" the program stopped after a single instruction
//                              was executed on a core. Usually done when single
//                              stepping past a breakpoint
//                          "breakpoint" a breakpoint set using a 'z' packet was hit.
//                          "trap" stopped due to user interruption
//                          "signal" stopped due to an actual unix signal, not
//                              just the debugger using a unix signal to keep
//                              the GDB remote client happy.
//                          "watchpoint". Should be used in conjunction with 
//                              the "watch"/"rwatch"/"awatch" key value pairs.
//                          "exception" an exception stop reason. Use with
//                              the "description" key/value pair to describe the
//                              exceptional event the user should see as the stop
//                              reason.
//  "description" ascii-hex An ASCII hex string that contains a more descriptive
//                          reason that the thread stopped. This is only needed
//                          if none of the key/value pairs are enough to
//                          describe why something stopped.
//
//  "threads"     comma-sep-base16  A list of thread ids for all threads (including
//                                  the thread that we're reporting as stopped) that
//                                  are live in the process right now.  lldb may
//                                  request that this be included in the T packet via
//                                  the QListThreadsInStopReply packet earlier in
//                                  the debug session.
//                                  
//                                  Example:
//                                  threads:63387,633b2,63424,63462,63486;
//
//  "thread-pcs"  comma-sep-base16  A list of pc values for all threads that currently
//                                  exist in the process, including the thread that
//                                  this T packet is reporting as stopped.
//                                  This key-value pair will only be emitted when the
//                                  "threads" key is already included in the T packet.
//                                  The pc values correspond to the threads reported
//                                  in the "threads" list.  The number of pcs in the
//                                  "thread-pcs" list will be the same as the number of 
//                                  threads in the "threads" list.
//                                  lldb may request that this be included in the T 
//                                  packet via the QListThreadsInStopReply packet 
//                                  earlier in the debug session.
//                                  
//                                  Example:
//                                  thread-pcs:dec14,2cf872b0,2cf8681c,2d02d68c,2cf716a8;
//
// BEST PRACTICES:
//  Since register values can be supplied with this packet, it is often useful
//  to return the PC, SP, FP, LR (if any), and FLAGS registers so that separate
//  packets don't need to be sent to read each of these registers from each
//  thread.
//
//  If a thread is stopped for no reason (like just because another thread
//  stopped, or because when one core stops all cores should stop), use a 
//  "T" packet with "00" as the signal number and fill in as many key values 
//  and registers as possible.
//
//  LLDB likes to know why a thread stopped since many thread control 
//  operations like stepping over a source line, actually are implemented
//  by running the process multiple times. If a breakpoint is hit while
//  trying to step over a source line and LLDB finds out that a breakpoint
//  is hit in the "reason", we will know to stop trying to do the step
//  over because something happened that should stop us from trying to
//  do the step. If we are at a breakpoint and we disable the breakpoint
//  at the current PC and do an instruction single step, knowing that
//  we stopped due to a "trace" helps us know that we can continue
//  running versus stopping due to a "breakpoint" (if we have two 
//  breakpoint instruction on consecutive instructions). So the more info
//  we can get about the reason a thread stops, the better job LLDB can
//  do when controlling your process. A typical GDB server behavior is 
//  to send a SIGTRAP for breakpoints _and_ also when instruction single
//  stepping, in this case the debugger doesn't really know why we 
//  stopped and it can make it hard for the debugger to control your
//  program correctly. What if a real SIGTRAP was delivered to a thread
//  while we were trying to single step? We wouldn't know the difference
//  with a standard GDB remote server and we could do the wrong thing.
//
// PRIORITY TO IMPLEMENT
//  High. Having the extra information in your stop reply packets makes
//  your debug session more reliable and informative.
//----------------------------------------------------------------------
 

//----------------------------------------------------------------------
// PLATFORM EXTENSION - for use as a GDB remote platform
//----------------------------------------------------------------------
// "qfProcessInfo"
// "qsProcessInfo"
//
// BRIEF
//  Get the first process info (qfProcessInfo) or subsequent process
//  info (qsProcessInfo) for one or more processes on the remote 
//  platform. The first call gets the first match and subsequent calls
//  to qsProcessInfo gets the subsequent matches. Return an error EXX,
//  where XX are two hex digits, when no more matches are available.
//
// PRIORITY TO IMPLEMENT
//  Required. The qfProcessInfo packet can be followed by a ':' and
//  some key value pairs. The key value pairs in the command are:
//
//  KEY           VALUE     DESCRIPTION
//  ===========   ========  ================================================
//  "name"        ascii-hex An ASCII hex string that contains the name of 
//                          the process that will be matched.
//  "name_match"  enum      One of: "equals", "starts_with", "ends_with", 
//                          "contains" or "regex"
//  "pid"         integer   A string value containing the decimal process ID
//  "parent_pid"  integer   A string value containing the decimal parent 
//                          process ID
//  "uid"         integer   A string value containing the decimal user ID
//  "gid"         integer   A string value containing the decimal group ID
//  "euid"        integer   A string value containing the decimal effective user ID
//  "egid"        integer   A string value containing the decimal effective group ID
//  "all_users"   bool      A boolean value that specifies if processes should
//                          be listed for all users, not just the user that the 
//                          platform is running as
//  "triple"      string    An ASCII triple string ("x86_64", 
//                          "x86_64-apple-macosx", "armv7-apple-ios")
//
// The response consists of key/value pairs where the key is separated from the
// values with colons and each pair is terminated with a semi colon. For a list
// of the key/value pairs in the response see the "qProcessInfoPID" packet
// documentation.
//
// Sample packet/response:
// send packet: $qfProcessInfo#00
// read packet: $pid:60001;ppid:59948;uid:7746;gid:11;euid:7746;egid:11;name:6c6c6462;triple:x86_64-apple-macosx;#00
// send packet: $qsProcessInfo#00
// read packet: $pid:59992;ppid:192;uid:7746;gid:11;euid:7746;egid:11;name:6d64776f726b6572;triple:x86_64-apple-macosx;#00
// send packet: $qsProcessInfo#00
// read packet: $E04#00
//----------------------------------------------------------------------


//----------------------------------------------------------------------
// PLATFORM EXTENSION - for use as a GDB remote platform
//----------------------------------------------------------------------
// "qLaunchGDBServer"
//
// BRIEF
//  Have the remote platform launch a GDB server.
//
// PRIORITY TO IMPLEMENT
//  Required. The qLaunchGDBServer packet must be followed by a ':' and
//  some key value pairs. The key value pairs in the command are:
//
//  KEY           VALUE     DESCRIPTION
//  ===========   ========  ================================================
//  "port"        integer   A string value containing the decimal port ID or
//                          zero if the port should be bound and returned
//
//  "host"        integer   The host that connections should be limited to
//                          when the GDB server is connected to.
//
// The response consists of key/value pairs where the key is separated from the
// values with colons and each pair is terminated with a semi colon.
//
// Sample packet/response:
// send packet: $qLaunchGDBServer:port:0;host:lldb.apple.com;#00
// read packet: $pid:60025;port:50776;#00
//
// The "pid" key/value pair is only specified if the remote platform launched
// a separate process for the GDB remote server and can be omitted if no
// process was separately launched.
//
// The "port" key/value pair in the response lets clients know what port number
// to attach to in case zero was specified as the "port" in the sent command.
//----------------------------------------------------------------------


//----------------------------------------------------------------------
// PLATFORM EXTENSION - for use as a GDB remote platform
//----------------------------------------------------------------------
// "qProcessInfoPID:PID"
//
// BRIEF
//  Have the remote platform get detailed information on a process by
//  ID. PID is specified as a decimal integer.
//
// PRIORITY TO IMPLEMENT
//  Optional. 
//
// The response consists of key/value pairs where the key is separated from the
// values with colons and each pair is terminated with a semi colon.
//
// The key value pairs in the response are:
//
//  KEY           VALUE     DESCRIPTION
//  ===========   ========  ================================================
//  "pid"         integer   Process ID as a decimal integer string
//  "ppid"        integer   Parent process ID as a decimal integer string
//  "uid"         integer   A string value containing the decimal user ID
//  "gid"         integer   A string value containing the decimal group ID
//  "euid"        integer   A string value containing the decimal effective user ID
//  "egid"        integer   A string value containing the decimal effective group ID
//  "name"        ascii-hex An ASCII hex string that contains the name of the process
//  "triple"      string    A target triple ("x86_64-apple-macosx", "armv7-apple-ios")
//
// Sample packet/response:
// send packet: $qProcessInfoPID:60050#00
// read packet: $pid:60050;ppid:59948;uid:7746;gid:11;euid:7746;egid:11;name:6c6c6462;triple:x86_64-apple-macosx;#00
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "vAttachName"
//
// BRIEF
//  Same as vAttach, except instead of a "pid" you send a process name.
//  
// PRIORITY TO IMPLEMENT
//  Low. Only needed for "process attach -n".  If the packet isn't supported
//  then "process attach -n" will fail gracefully.  So you need only to support
//  it if attaching to a process by name makes sense for your environment.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "vAttachWait"
//
// BRIEF
//  Same as vAttachName, except that the stub should wait for the next instance
//  of a process by that name to be launched and attach to that.
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed to support "process attach -w -n" which will fail
//  gracefully if the packet is not supported.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "qAttachOrWaitSupported"
//
// BRIEF
//  This is a binary "is it supported" query.  Return OK if you support
//  vAttachOrWait
//
// PRIORITY TO IMPLEMENT
//  Low. This is required if you support vAttachOrWait, otherwise no support
//  is needed since the standard "I don't recognize this packet" response
//  will do the right thing.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "vAttachOrWait"
//
// BRIEF
//  Same as vAttachWait, except that the stub will attach to a process
//  by name if it exists, and if it does not, it will wait for a process
//  of that name to appear and attach to it.
//
// PRIORITY TO IMPLEMENT
//  Low. Only needed to implement "process attach -w -i false -n".  If
//  you don't implement it but do implement -n AND lldb can somehow get
//  a process list from your device, it will fall back on scanning the
//  process list, and sending vAttach or vAttachWait depending on
//  whether the requested process exists already.  This is racy, 
//  however, so if you want to support this behavior it is better to
//  support this packet.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "jThreadExtendedInfo"
//
// BRIEF
//  This packet, which takes its arguments as JSON and sends its reply as
//  JSON, allows the gdb remote stub to provide additional information 
//  about a given thread.
//
// PRIORITY TO IMPLEMENT
//  Low.  This packet is only needed if the gdb remote stub wants to 
//  provide interesting additional information about a thread for the
//  user.
//
// This packet takes its arguments in JSON form ( http://www.json.org ).
// At a minimum, a thread must be specified, for example:
//
//  jThreadExtendedInfo:{"thread":612910}
//
// Because this is a JSON string, the thread number is provided in base10.
// Additional key-value pairs may be provided by lldb to the gdb remote
// stub.  For instance, on some versions of Mac OS X, lldb can read offset
// information out of the system libraries.  Using those offsets, debugserver
// is able to find the Thread Specific Address (TSD) for a thread and include
// that in the return information.  So lldb will send these additional fields
// like so:
//
//   jThreadExtendedInfo:{"plo_pthread_tsd_base_address_offset":0,"plo_pthread_tsd_base_offset":224,"plo_pthread_tsd_entry_size":8,"thread":612910}
//
// There are no requirements for what is included in the response.  A simple 
// reply on a Mac OS X Yosemite / iOS 8 may include the pthread_t value, the
// Thread Specific Data (TSD) address, the dispatch_queue_t value if the thread
// is associated with a GCD queue, and the requested Quality of Service (QoS)
// information about that thread.  For instance, a reply may look like:
//
//  {"tsd_address":4371349728,"requested_qos":{"enum_value":33,"constant_name":"QOS_CLASS_USER_INTERACTIVE","printable_name":"User Interactive"},"pthread_t":4371349504,"dispatch_queue_t":140735087127872}
//
// tsd_address, pthread_t, and dispatch_queue_t are all simple key-value pairs.  
// The JSON standard requires that numbers be expressed in base 10 - so all of 
// these are.  requested_qos is a dictionary with three key-value pairs in it - 
// so the UI layer may choose the form most appropriate for displaying to the user.
//
// Sending JSON over gdb-remote protocol introduces some problems.  We may be 
// sending strings with arbitrary contents in them, including the '#', '$', and '*'
// characters that have special meaning in gdb-remote protocol and cannot occur
// in the middle of the string.  The standard solution for this would be to require
// ascii-hex encoding of all strings, or ascii-hex encode the entire JSON payload.
//
// Instead, the binary escaping convention is used for JSON data.  This convention
// (e.g. used for the X packet) says that if '#', '$', '*', or '}' are to occur in
// the payload, the character '}' (0x7d) is emitted, then the metacharacter is emitted
// xor'ed by 0x20.  The '}' character occurs in every JSON payload at least once, and
// '}' ^ 0x20 happens to be ']' so the raw packet characters for a request will look
// like
//
//  jThreadExtendedInfo:{"thread":612910}]
//
// on the wire.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "QEnableCompression"
//
// BRIEF
//  This packet enables compression of the packets that the debug stub sends to lldb.
//  If the debug stub can support compression, it indictes this in the reply of the 
//  "qSupported" packet.  e.g.
//   LLDB SENDS:    qSupported:xmlRegisters=i386,arm,mips
//   STUB REPLIES:  qXfer:features:read+;SupportedCompressions=lzfse,zlib-deflate,lz4,lzma;DefaultCompressionMinSize=384
//
//  If lldb knows how to use any of these compression algorithms, it can ask that this
//  compression mode be enabled.  It may optionally change the minimum packet size 
//  where compression is used.  Typically small packets do not benefit from compression,
//  as well as compression headers -- compression is most beneficial with larger packets.
//
//  QEnableCompression:type:zlib-deflate;
//  or
//  QEnableCompression:type:zlib-deflate;minsize:512;
//
//  The debug stub should reply with an uncompressed "OK" packet to indicate that the
//  request was accepted.  All further packets the stub sends will use this compression.
//
//  Packets are compressed as the last step before they are sent from the stub, and 
//  decompressed as the first step after they are received.  The packet format in compressed
//  mode becomes one of two:
//
//   $N<uncompressed payload>#00
//
//   $C<size of uncompressed payload in base10>:<compressed payload>#00
//
//  Where "#00" is the actual checksum value if noack mode is not enabled.  The checksum
//  value is for the "N<uncompressed payload>" or 
//  "C<size of uncompressed payload in base10>:<compressed payload>" bytes in the packet.
//
//  The size of the uncompressed payload in base10 is provided because it will simplify
//  decompression if the final buffer size needed is known ahead of time.
//
//  Compression on low-latency connections is unlikely to be an improvement.  Particularly
//  when the debug stub and lldb are running on the same host.  It should only be used
//  for slow connections, and likely only for larger packets.
//
//  Example compression algorithsm that may be used include
//
//    zlib-deflate
//       The raw DEFLATE format as described in IETF RFC 1951.  With the ZLIB library, you
//       can compress to this format with an initialization like 
//           deflateInit2 (&stream, 5, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY)
//       and you can decompress with an initialization like
//           inflateInit2 (&stream, -15)
//
//    lz4
//       https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)
//       https://github.com/Cyan4973/lz4
//       The libcompression APIs on darwin systems call this COMPRESSION_LZ4_RAW.
//
//    lzfse
//       An Apple proprietary compression algorithm implemented in libcompression.
//
//    lzma
//       libcompression implements "LZMA level 6", the default compression for the
//       open source LZMA implementation.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "jGetLoadedDynamicLibrariesInfos"
//
// BRIEF
//  This packet asks the remote debug stub to send the details about libraries
//  being added/removed from the process as a performance optimization.
//
//  There are three ways this packet can be used.  All three return a dictionary of
//  binary images formatted the same way.
//
//  On MacOS X 10.11, iOS 9, tvOS 9, watchOS 2 and earlier, the packet is used like
//       jGetLoadedDynamicLibrariesInfos:{"image_count":1,"image_list_address":140734800075128}
//  where the image_list_address is an array of {void* load_addr, void* mod_date, void* pathname}
//  in the inferior process memory (and image_count is the number of elements in this array).
//  lldb is using information from the dyld_all_image_infos structure to make these requests to
//  debugserver.  This use is not supported on macOS 10.12, iOS 10, tvOS 10, watchOS 3 or newer.
//
//  On macOS 10.12, iOS 10, tvOS 10, watchOS 3 and newer, there are two calls.  One requests information
//  on all shared libraries:
//       jGetLoadedDynamicLibrariesInfos:{"fetch_all_solibs":true}
//  And the second requests information about a list of shared libraries, given their load addresses:
//       jGetLoadedDynamicLibrariesInfos:{"solib_addresses":[8382824135,3258302053,830202858503]}
//
//  The second call is both a performance optimization (instead of having lldb read the mach-o header/load commands
//  out of memory with generic read packets) but also adds additional information in the form of the 
//  filename of the shared libraries (which is not available in the mach-o header/load commands.)
//  
//  An example using the Mac OS X 10.11 style call:
//
//  LLDB SENDS: jGetLoadedDynamicLibrariesInfos:{"image_count":1,"image_list_address":140734800075128}
//  STUB REPLIES: ${"images":[{"load_address":4294967296,"mod_date":0,"pathname":"/tmp/a.out","uuid":"02CF262C-ED6F-3965-9E14-63538B465CFF","mach_header":{"magic":4277009103,"cputype":16777223,"cpusubtype":18446744071562067971,"filetype":2},"segments":{"name":"__PAGEZERO","vmaddr":0,"vmsize":4294967296,"fileoff":0,"filesize":0,"maxprot":0},{"name":"__TEXT","vmaddr":4294967296,"vmsize":4096,"fileoff":0,"filesize":4096,"maxprot":7},{"name":"__LINKEDIT","vmaddr":4294971392,"vmsize":4096,"fileoff":4096,"filesize":152,"maxprot":7}}]}#00
//
//  Or pretty-printed,
//
//  STUB REPLIES: ${"images":
//                  [
//                      {"load_address":4294967296,
//                       "mod_date":0,
//                       "pathname":"/tmp/a.out",
//                       "uuid":"02CF262C-ED6F-3965-9E14-63538B465CFF",
//                       "mach_header":
//                          {"magic":4277009103,
//                           "cputype":16777223,
//                           "cpusubtype":18446744071562067971,
//                           "filetype":2
//                           },
//                       "segments":
//                        [
//                          {"name":"__PAGEZERO",
//                           "vmaddr":0,
//                           "vmsize":4294967296,
//                           "fileoff":0,
//                           "filesize":0,
//                           "maxprot":0
//                          },
//                          {"name":"__TEXT",
//                           "vmaddr":4294967296,
//                           "vmsize":4096,
//                           "fileoff":0,
//                           "filesize":4096,
//                           "maxprot":7
//                          },
//                          {"name":"__LINKEDIT",
//                           "vmaddr":4294971392,
//                           "vmsize":4096,
//                           "fileoff":4096,
//                           "filesize":152,
//                           "maxprot":7
//                          }
//                        ]
//                      }
//                  ]
//              }
//
//
// This is similar to the qXfer:libraries:read packet, and it could
// be argued that it should be merged into that packet.  A separate
// packet was created primarily because lldb needs to specify the
// number of images to be read and the address from which the initial
// information is read.  Also the XML DTD would need to be extended
// quite a bit to provide all the information that the DynamicLoaderMacOSX
// would need to work correctly on this platform.
//
// PRIORITY TO IMPLEMENT
//  On Mac OS X 10.11, iOS 9, tvOS 9, watchOS 2 and older: Low.  If this packet is absent, 
//  lldb will read the Mach-O headers/load commands out of memory.
//  On macOS 10.12, iOS 10, tvOS 10, watchOS 3 and newer: High.  If this packet is absent,
//  lldb will not know anything about shared libraries in the inferior, or where the main
//  executable loaded.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "jThreadsInfo"
//
// BRIEF
//  Ask for the server for thread stop information of all threads.
//
// PRIORITY TO IMPLEMENT
//  Low. 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.
//----------------------------------------------------------------------

The data in this packet is very similar to the stop reply packets, but is packaged in
JSON and uses JSON arrays where applicable. The JSON output looks like:
    [
      { "tid":1580681,
        "metype":6,
        "medata":[2,0],
        "reason":"exception",
        "qaddr":140735118423168,
        "registers": {
          "0":"8000000000000000",
          "1":"0000000000000000",
          "2":"20fabf5fff7f0000",
          "3":"e8f8bf5fff7f0000",
          "4":"0100000000000000",
          "5":"d8f8bf5fff7f0000",
          "6":"b0f8bf5fff7f0000",
          "7":"20f4bf5fff7f0000",
          "8":"8000000000000000",
          "9":"61a8db78a61500db",
          "10":"3200000000000000",
          "11":"4602000000000000",
          "12":"0000000000000000",
          "13":"0000000000000000",
          "14":"0000000000000000",
          "15":"0000000000000000",
          "16":"960b000001000000",
          "17":"0202000000000000",
          "18":"2b00000000000000",
          "19":"0000000000000000",
          "20":"0000000000000000"
        },
        "memory":[
          {"address":140734799804592,"bytes":"c8f8bf5fff7f0000c9a59e8cff7f0000"},
          {"address":140734799804616,"bytes":"00000000000000000100000000000000"}
        ]
      }
    ]

It contains an array of dictionaries with all of the key value pairs that are
normally in the stop reply packet, including the expedited registers. The registers are
passed as hex-encoded JSON string in debuggee-endian byte order. Note that the register
numbers are decimal numbers, unlike the stop-reply packet, where they are written in
hex. The packet also contains expedited memory in the "memory" key.  This allows the
server to expedite memory that the client is likely to use (e.g., areas around the
stack pointer, which are needed for computing backtraces) and it reduces the packet
count.

On MacOSX with debugserver, we expedite the frame pointer backchain for a thread
(up to 256 entries) by reading 2 pointers worth of bytes at the frame pointer (for
the previous FP and PC), and follow the backchain. Most backtraces on MacOSX and
iOS now don't require us to read any memory!

//----------------------------------------------------------------------
// "jGetSharedCacheInfo"
//
// BRIEF
//  This packet asks the remote debug stub to send the details about the inferior's
//  shared cache. The shared cache is a collection of common libraries/frameworks that
//  are mapped into every process at the same address on Darwin systems, and can be
//  identified by a load address and UUID.
//
//
//  LLDB SENDS: jGetSharedCacheInfo:{}
//  STUB REPLIES: ${"shared_cache_base_address":140735683125248,"shared_cache_uuid":"DDB8D70C-C9A2-3561-B2C8-BE48A4F33F96","no_shared_cache":false,"shared_cache_private_cache":false]}#00
//
// PRIORITY TO IMPLEMENT
//  Low.  When both lldb and the inferior process are running on the same computer, and lldb
//  and the inferior process have the same shared cache, lldb may (as an optimization) read
//  the shared cache out of its own memory instead of using gdb-remote read packets to read
//  them from the inferior process.
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// "qQueryGDBServer"
//
// BRIEF
//  Ask the platform for the list of gdbservers we have to connect
//
// PRIORITY TO IMPLEMENT
//  Low. The packet is required to support connecting to gdbserver started
//  by the platform instance automatically.
//----------------------------------------------------------------------

If the remote platform automatically started one or more gdbserver instance (without
lldb asking it) then it have to return the list of port number or socket name for
each of them what can be used by lldb to connect to those instances.

The data in this packet is a JSON array of JSON objects with the following keys:
"port":        <the port number to connect>        (optional)
"socket_name": <the name of the socket to connect> (optional)

Example packet:
[
    { "port": 1234 },
    { "port": 5432 },
    { "socket_name": "foo" }
]
