blob: 594e3fc3a86daca4bbfe5b6c6f444ed3a66a72ce [file] [log] [blame]
Greg Clayton1167c4e2011-11-28 23:30:42 +00001LLDB has added new GDB server packets to better support multi-threaded and
2remote debugging. Why? Normally you need to start the correct GDB and the
3correct GDB server when debugging. If you have mismatch, then things go wrong
4very quickly. LLDB makes extensive use of the GDB remote protocol and we
5wanted to make sure that the experience was a bit more dynamic where we can
6discover information about a remote target with having to know anything up
7front. We also ran into performance issues with the existing GDB remote
8protocol that can be overcome when using a reliable communications layer.
9Some packets improve performance, others allow for remote process launching
10(if you have an OS), and others allow us to dynamically figure out what
11registers a thread might have. Again with GDB, both sides pre-agree on how the
12registers will look (how many, their register number,name and offsets). We
13prefer to be able to dynamically determine what kind of architecture, os and
14vendor we are debugging, as well as how things are laid out when it comes to
15the thread register contexts. Below are the details on the new packets we have
16added above and beyond the standard GDB remote protocol packets.
17
18//----------------------------------------------------------------------
19// "QStartNoAckMode"
20//
Greg Claytonbda72b82011-11-29 01:44:07 +000021// BRIEF
22// Try to enable no ACK mode to skip sending ACKs and NACKs.
23//
24// PRIORITY TO IMPLEMENT
25// High. Any GDB remote server that can implement this should if the
26// connection is reliable. This improves packet throughput and increases
27// the performance of the connection.
Greg Clayton1167c4e2011-11-28 23:30:42 +000028//----------------------------------------------------------------------
29Having to send an ACK/NACK after every packet slows things down a bit, so we
30have a way to disable ACK packets to mimize the traffic for reliable
31communication interfaces (like sockets). Below GDB or LLDB will send this
32packet to try and disable ACKs. All lines that start with "send packet: " are
33from GDB/LLDB, and all lines that start with "read packet: " are from the GDB
34remote server:
35
36send packet: $QStartNoAckMode#b0
37read packet: +
38read packet: $OK#9a
39send packet: +
40
41
42
43//----------------------------------------------------------------------
44// "A" - launch args packet
45//
Greg Claytonbda72b82011-11-29 01:44:07 +000046// BRIEF
47// Launch a program using the supplied arguments
48//
49// PRIORITY TO IMPLEMENT
50// Low. Only needed if the remote target wants to launch a target after
51// making a connection to a GDB server that isn't already connected to
52// an inferior process.
Greg Clayton1167c4e2011-11-28 23:30:42 +000053//----------------------------------------------------------------------
54
55We have added support for the "set program arguments" packet where we can
56startup a connection to a remote server and then later supply the path to the
57executable and the arguments to use when executing:
58
59GDB remote docs for this:
60
Greg Claytonbda72b82011-11-29 01:44:07 +000061set program arguments(reserved) Aarglen,argnum,arg,...
Greg Clayton1167c4e2011-11-28 23:30:42 +000062
63Where A is followed by the length in bytes of the hex encoded argument,
64followed by an argument integer, and followed by the ASCII characters
65converted into hex bytes foreach arg
66
67send packet: $A98,0,2f566f6c756d65732f776f726b2f67636c6179746f6e2f446f63756d656e74732f7372632f6174746163682f612e6f7574#00
68read packet: $OK#00
69
70The above packet helps when you have remote debugging abilities where you
71could launch a process on a remote host, this isn't needed for bare board
72debugging.
73
74//----------------------------------------------------------------------
75// "QEnvironment:NAME=VALUE"
76//
Greg Claytonbda72b82011-11-29 01:44:07 +000077// BRIEF
78// Setup the environment up for a new child process that will soon be
79// launched using the "A" packet.
80//
81// PRIORITY TO IMPLEMENT
82// Low. Only needed if the remote target wants to launch a target after
83// making a connection to a GDB server that isn't already connected to
84// an inferior process.
Greg Clayton1167c4e2011-11-28 23:30:42 +000085//----------------------------------------------------------------------
86
87Both GDB and LLDB support passing down environment variables. Is it ok to
88respond with a "$#00" (unimplemented):
89
90send packet: $QEnvironment:ACK_COLOR_FILENAME=bold yellow#00
91read packet: $OK#00
92
93This packet can be sent one or more times _prior_ to sending a "A" packet.
94
95//----------------------------------------------------------------------
96// "QSetSTDIN:<ascii-hex-path>"
97// "QSetSTDOUT:<ascii-hex-path>"
98// "QSetSTDERR:<ascii-hex-path>"
99//
Greg Claytonbda72b82011-11-29 01:44:07 +0000100// BRIEF
101// Setup where STDIN, STDOUT, and STDERR go prior to sending an "A"
102// packet.
103//
104// PRIORITY TO IMPLEMENT
105// Low. Only needed if the remote target wants to launch a target after
106// making a connection to a GDB server that isn't already connected to
107// an inferior process.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000108//----------------------------------------------------------------------
109
110When launching a program through the GDB remote protocol with the "A" packet,
111you might also want to specify where stdin/out/err go:
112
113QSetSTDIN:<ascii-hex-path>
114QSetSTDOUT:<ascii-hex-path>
115QSetSTDERR:<ascii-hex-path>
116
117These packets must be sent _prior_ to sending a "A" packet.
118
119//----------------------------------------------------------------------
120// "QSetWorkingDir:<ascii-hex-path>"
121//
Greg Claytonbda72b82011-11-29 01:44:07 +0000122// BRIEF
123// Set the working directory prior to sending an "A" packet.
124//
125// PRIORITY TO IMPLEMENT
126// Low. Only needed if the remote target wants to launch a target after
127// making a connection to a GDB server that isn't already connected to
128// an inferior process.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000129//----------------------------------------------------------------------
130
131Or specify the working directory:
132
133QSetWorkingDir:<ascii-hex-path>
134
135This packet must be sent _prior_ to sending a "A" packet.
136
137//----------------------------------------------------------------------
138// "QSetDisableASLR:<bool>"
139//
Greg Claytonbda72b82011-11-29 01:44:07 +0000140// BRIEF
141// Enable or disable ASLR on the next "A" packet.
142//
143// PRIORITY TO IMPLEMENT
144// Low. Only needed if the remote target wants to launch a target after
145// making a connection to a GDB server that isn't already connected to
146// an inferior process and if the target supports disabling ASLR
147// (Address space layout randomization).
Greg Clayton1167c4e2011-11-28 23:30:42 +0000148//----------------------------------------------------------------------
149
150Or control if ASLR is enabled/disabled:
151
152send packet: QSetDisableASLR:1
153read packet: OK
154
155send packet: QSetDisableASLR:0
156read packet: OK
157
158This packet must be sent _prior_ to sending a "A" packet.
159
160//----------------------------------------------------------------------
161// "qRegisterInfo<hex-reg-id>"
162//
Greg Claytonbda72b82011-11-29 01:44:07 +0000163// BRIEF
164// Discover register information from the remote GDB server.
165//
166// PRIORITY TO IMPLEMENT
167// High. Any target that can self describe its registers, should do so.
168// This means if new registers are ever added to a remote target, they
169// will get picked up automatically, and allows registers to change
170// depending on the actual CPU type that is used.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000171//----------------------------------------------------------------------
172
173With LLDB, for register information, remote GDB servers can add support for
174the "qRegisterInfoN" packet where "N" is a zero based register number that
175must start at zero and increase by one for each register that is supported.
176The response is done in typical GDB remote fashion where a serious of
177"KEY:VALUE;" pairs are returned. An example for the x86_64 registers is
178included below:
179
180send packet: $qRegisterInfo0#00
181read packet: $name:rax;bitsize:64;offset:0;encoding:uint;format:hex;set:General Purpose Registers;gcc:0;dwarf:0;#00
182send packet: $qRegisterInfo1#00
183read packet: $name:rbx;bitsize:64;offset:8;encoding:uint;format:hex;set:General Purpose Registers;gcc:3;dwarf:3;#00
184send packet: $qRegisterInfo2#00
185read packet: $name:rcx;bitsize:64;offset:16;encoding:uint;format:hex;set:General Purpose Registers;gcc:2;dwarf:2;#00
186send packet: $qRegisterInfo3#00
187read packet: $name:rdx;bitsize:64;offset:24;encoding:uint;format:hex;set:General Purpose Registers;gcc:1;dwarf:1;#00
188send packet: $qRegisterInfo4#00
189read packet: $name:rdi;bitsize:64;offset:32;encoding:uint;format:hex;set:General Purpose Registers;gcc:5;dwarf:5;#00
190send packet: $qRegisterInfo5#00
191read packet: $name:rsi;bitsize:64;offset:40;encoding:uint;format:hex;set:General Purpose Registers;gcc:4;dwarf:4;#00
192send packet: $qRegisterInfo6#00
193read 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
194send packet: $qRegisterInfo7#00
195read 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
196send packet: $qRegisterInfo8#00
197read packet: $name:r8;bitsize:64;offset:64;encoding:uint;format:hex;set:General Purpose Registers;gcc:8;dwarf:8;#00
198send packet: $qRegisterInfo9#00
199read packet: $name:r9;bitsize:64;offset:72;encoding:uint;format:hex;set:General Purpose Registers;gcc:9;dwarf:9;#00
200send packet: $qRegisterInfoa#00
201read packet: $name:r10;bitsize:64;offset:80;encoding:uint;format:hex;set:General Purpose Registers;gcc:10;dwarf:10;#00
202send packet: $qRegisterInfob#00
203read packet: $name:r11;bitsize:64;offset:88;encoding:uint;format:hex;set:General Purpose Registers;gcc:11;dwarf:11;#00
204send packet: $qRegisterInfoc#00
205read packet: $name:r12;bitsize:64;offset:96;encoding:uint;format:hex;set:General Purpose Registers;gcc:12;dwarf:12;#00
206send packet: $qRegisterInfod#00
207read packet: $name:r13;bitsize:64;offset:104;encoding:uint;format:hex;set:General Purpose Registers;gcc:13;dwarf:13;#00
208send packet: $qRegisterInfoe#00
209read packet: $name:r14;bitsize:64;offset:112;encoding:uint;format:hex;set:General Purpose Registers;gcc:14;dwarf:14;#00
210send packet: $qRegisterInfof#00
211read packet: $name:r15;bitsize:64;offset:120;encoding:uint;format:hex;set:General Purpose Registers;gcc:15;dwarf:15;#00
212send packet: $qRegisterInfo10#00
213read 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
214send packet: $qRegisterInfo11#00
215read packet: $name:rflags;alt-name:flags;bitsize:64;offset:136;encoding:uint;format:hex;set:General Purpose Registers;#00
216send packet: $qRegisterInfo12#00
217read packet: $name:cs;bitsize:64;offset:144;encoding:uint;format:hex;set:General Purpose Registers;#00
218send packet: $qRegisterInfo13#00
219read packet: $name:fs;bitsize:64;offset:152;encoding:uint;format:hex;set:General Purpose Registers;#00
220send packet: $qRegisterInfo14#00
221read packet: $name:gs;bitsize:64;offset:160;encoding:uint;format:hex;set:General Purpose Registers;#00
222send packet: $qRegisterInfo15#00
223read packet: $name:fctrl;bitsize:16;offset:176;encoding:uint;format:hex;set:Floating Point Registers;#00
224send packet: $qRegisterInfo16#00
225read packet: $name:fstat;bitsize:16;offset:178;encoding:uint;format:hex;set:Floating Point Registers;#00
226send packet: $qRegisterInfo17#00
227read packet: $name:ftag;bitsize:8;offset:180;encoding:uint;format:hex;set:Floating Point Registers;#00
228send packet: $qRegisterInfo18#00
229read packet: $name:fop;bitsize:16;offset:182;encoding:uint;format:hex;set:Floating Point Registers;#00
230send packet: $qRegisterInfo19#00
231read packet: $name:fioff;bitsize:32;offset:184;encoding:uint;format:hex;set:Floating Point Registers;#00
232send packet: $qRegisterInfo1a#00
233read packet: $name:fiseg;bitsize:16;offset:188;encoding:uint;format:hex;set:Floating Point Registers;#00
234send packet: $qRegisterInfo1b#00
235read packet: $name:fooff;bitsize:32;offset:192;encoding:uint;format:hex;set:Floating Point Registers;#00
236send packet: $qRegisterInfo1c#00
237read packet: $name:foseg;bitsize:16;offset:196;encoding:uint;format:hex;set:Floating Point Registers;#00
238send packet: $qRegisterInfo1d#00
239read packet: $name:mxcsr;bitsize:32;offset:200;encoding:uint;format:hex;set:Floating Point Registers;#00
240send packet: $qRegisterInfo1e#00
241read packet: $name:mxcsrmask;bitsize:32;offset:204;encoding:uint;format:hex;set:Floating Point Registers;#00
242send packet: $qRegisterInfo1f#00
243read packet: $name:stmm0;bitsize:80;offset:208;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:33;dwarf:33;#00
244send packet: $qRegisterInfo20#00
245read packet: $name:stmm1;bitsize:80;offset:224;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:34;dwarf:34;#00
246send packet: $qRegisterInfo21#00
247read packet: $name:stmm2;bitsize:80;offset:240;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:35;dwarf:35;#00
248send packet: $qRegisterInfo22#00
249read packet: $name:stmm3;bitsize:80;offset:256;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:36;dwarf:36;#00
250send packet: $qRegisterInfo23#00
251read packet: $name:stmm4;bitsize:80;offset:272;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:37;dwarf:37;#00
252send packet: $qRegisterInfo24#00
253read packet: $name:stmm5;bitsize:80;offset:288;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:38;dwarf:38;#00
254send packet: $qRegisterInfo25#00
255read packet: $name:stmm6;bitsize:80;offset:304;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:39;dwarf:39;#00
256send packet: $qRegisterInfo26#00
257read packet: $name:stmm7;bitsize:80;offset:320;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:40;dwarf:40;#00
258send packet: $qRegisterInfo27#00
259read packet: $name:xmm0;bitsize:128;offset:336;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:17;dwarf:17;#00
260send packet: $qRegisterInfo28#00
261read packet: $name:xmm1;bitsize:128;offset:352;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:18;dwarf:18;#00
262send packet: $qRegisterInfo29#00
263read packet: $name:xmm2;bitsize:128;offset:368;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:19;dwarf:19;#00
264send packet: $qRegisterInfo2a#00
265read packet: $name:xmm3;bitsize:128;offset:384;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:20;dwarf:20;#00
266send packet: $qRegisterInfo2b#00
267read packet: $name:xmm4;bitsize:128;offset:400;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:21;dwarf:21;#00
268send packet: $qRegisterInfo2c#00
269read packet: $name:xmm5;bitsize:128;offset:416;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:22;dwarf:22;#00
270send packet: $qRegisterInfo2d#00
271read packet: $name:xmm6;bitsize:128;offset:432;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:23;dwarf:23;#00
272send packet: $qRegisterInfo2e#00
273read packet: $name:xmm7;bitsize:128;offset:448;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:24;dwarf:24;#00
274send packet: $qRegisterInfo2f#00
275read packet: $name:xmm8;bitsize:128;offset:464;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:25;dwarf:25;#00
276send packet: $qRegisterInfo30#00
277read packet: $name:xmm9;bitsize:128;offset:480;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:26;dwarf:26;#00
278send packet: $qRegisterInfo31#00
279read packet: $name:xmm10;bitsize:128;offset:496;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:27;dwarf:27;#00
280send packet: $qRegisterInfo32#00
281read packet: $name:xmm11;bitsize:128;offset:512;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:28;dwarf:28;#00
282send packet: $qRegisterInfo33#00
283read packet: $name:xmm12;bitsize:128;offset:528;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:29;dwarf:29;#00
284send packet: $qRegisterInfo34#00
285read packet: $name:xmm13;bitsize:128;offset:544;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:30;dwarf:30;#00
286send packet: $qRegisterInfo35#00
287read packet: $name:xmm14;bitsize:128;offset:560;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:31;dwarf:31;#00
288send packet: $qRegisterInfo36#00
289read packet: $name:xmm15;bitsize:128;offset:576;encoding:vector;format:vector-uint8;set:Floating Point Registers;gcc:32;dwarf:32;#00
290send packet: $qRegisterInfo37#00
291read packet: $name:trapno;bitsize:32;offset:696;encoding:uint;format:hex;set:Exception State Registers;#00
292send packet: $qRegisterInfo38#00
293read packet: $name:err;bitsize:32;offset:700;encoding:uint;format:hex;set:Exception State Registers;#00
294send packet: $qRegisterInfo39#00
295read packet: $name:faultvaddr;bitsize:64;offset:704;encoding:uint;format:hex;set:Exception State Registers;#00
296send packet: $qRegisterInfo3a#00
297read packet: $E45#00
298
299As we see above we keep making subsequent calls to the remote server to
300discover all registers by increasing the number appended to qRegisterInfo and
301we get a response back that is a series of "key=value;" strings. The keys and
302values are detailed below:
303
304Key Value
305========== ================================================================
306name The primary register name as a string ("rbp" for example)
307
308alt-name An alternate name for a register as a string ("fp" for example for
309 the above "rbp")
310
311bitsize Size in bits of a register (32, 64, etc)
312
313offset The offset within the "g" and "G" packet of the register data for
314 this register
315
316encoding The encoding type of the register which must be one of:
317
Greg Claytonbda72b82011-11-29 01:44:07 +0000318 uint (unsigned integer)
319 sint (signed integer)
320 ieee754 (IEEE 754 float)
321 vector (vector regsiter)
Greg Clayton1167c4e2011-11-28 23:30:42 +0000322
Greg Claytonbda72b82011-11-29 01:44:07 +0000323format The preferred format for display of this register. The value must
324 be one of:
Greg Clayton1167c4e2011-11-28 23:30:42 +0000325
Greg Claytonbda72b82011-11-29 01:44:07 +0000326 binary
327 decimal
328 hex
329 float
330 vector-sint8
331 vector-uint8
332 vector-sint16
333 vector-uint16
334 vector-sint32
335 vector-uint32
336 vector-float32
337 vector-uint128
Greg Clayton1167c4e2011-11-28 23:30:42 +0000338
Greg Claytonbda72b82011-11-29 01:44:07 +0000339set The regiter set name as a string that this register belongs to.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000340
Greg Claytonbda72b82011-11-29 01:44:07 +0000341gcc The GCC compiler registers number for this register (used for
342 EH frame and other compiler information that is encoded in the
343 executable files).
Greg Clayton1167c4e2011-11-28 23:30:42 +0000344
Greg Claytonbda72b82011-11-29 01:44:07 +0000345 NOTE: If the compiler doesn't have a register number for this
346 register, this key/value pair should be omitted.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000347
Greg Claytonbda72b82011-11-29 01:44:07 +0000348dwarf The DWARF register number for this register that is used for this
349 register in the debug information.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000350
Greg Claytonbda72b82011-11-29 01:44:07 +0000351 NOTE: If the compiler doesn't have a register number for this
352 register, this key/value pair should be omitted.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000353
Greg Claytonbda72b82011-11-29 01:44:07 +0000354generic If the register is a generic register that most CPUs have, classify
355 it correctly so the debugger knows. Valid values are one of:
356 pc (a program counter register. for example "name=eip;" (i386),
357 "name=rip;" (x86_64), "name=r15;" (32 bit arm) would
358 include a "generic=pc;" key value pair)
359 sp (a stack pointer register. for example "name=esp;" (i386),
360 "name=rsp;" (x86_64), "name=r13;" (32 bit arm) would
361 include a "generic=sp;" key value pair)
362 fp (a frame pointer register. for example "name=ebp;" (i386),
363 "name=rbp;" (x86_64), "name=r7;" (32 bit arm with macosx
364 ABI) would include a "generic=fp;" key value pair)
365 ra (a return address register. for example "name=lr;" (32 bit ARM)
366 would include a "generic=ra;" key value pair)
367 fp (a CPU flags register. for example "name=eflags;" (i386),
368 "name=rflags;" (x86_64), "name=cpsr;" (32 bit ARM)
369 would include a "generic=flags;" key value pair)
370 arg1 - arg8 (specified for registers that contain function
371 arguments when the argument fits into a register)
Greg Clayton1167c4e2011-11-28 23:30:42 +0000372
373//----------------------------------------------------------------------
374// "qHostInfo"
375//
Greg Claytonbda72b82011-11-29 01:44:07 +0000376// BRIEF
377// Get information about the host we are remotely connected to.
378//
379// PRIORITY TO IMPLEMENT
380// High. This packet is usually very easy to implement and can help
381// LLDB select the correct plug-ins for the job based on the target
382// triple information that is suppied.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000383//----------------------------------------------------------------------
384
385LLDB supports a host info call that gets all sorts of details of the system
386that is being debugged:
387
388send packet: $qHostInfo#00
389read packet: $cputype:16777223;cpusubtype:3;ostype:darwin;vendor:apple;endian:little;ptrsize:8;#00
390
391Key value pairs are one of:
392
393cputype: is a number that is the mach-o CPU type that is being debugged
394cpusubtype: is a number that is the mach-o CPU subtype type that is being debugged
395ostype: is a string the represents the OS being debugged (darwin, lunix, freebsd)
396vendor: is a string that represents the vendor (apple)
397endian: is one of "little", "big", or "pdp"
398ptrsize: is a number that represents how big pointers are in bytes on the debug target
399
400//----------------------------------------------------------------------
Jason Molendafca9c6b2012-12-18 04:39:43 +0000401// "qProcessInfo"
402//
403// BRIEF
404// Get information about the process we are currently debugging.
405//
406// PRIORITY TO IMPLEMENT
407// Medium. On systems which can launch multiple different architecture processes,
408// the qHostInfo may not disambiguate sufficiently to know what kind of
409// process is being debugged.
410// e.g. on a 64-bit x86 Mc system both 32-bit and 64-bit user processes are possible,
411// and with Mach-O univeral files, the executable file may contain both 32- and
412// 64-bit slices so it may be impossible to know until you're attached to a real
413// process to know what you're working with.
414//----------------------------------------------------------------------
415
416send packet: $qProcessInfo#00
417$pid:0x9517;parent-pid:0x9519;real-uid:0xecf;real-gid:0xb;effective-uid:0xecf;effective-gid:0xb;cputype:0x7;ptrsize:0x4;#00
418
419Key value pairs include:
420
421pid: the process id
422parent-pid: the process of the parent process (often debugserver will become the parent when attaching)
423real-uid: the real user id of the process
424real-gid: the real group id of the process
425effective-uid: the effective user id of the process
426effective-gid: the effective group id of the process
427cputype: the Mach-O CPU type of the process
428ptrsize: is a number that represents how big pointers are in bytes
429
430
431//----------------------------------------------------------------------
Greg Clayton1167c4e2011-11-28 23:30:42 +0000432// "qShlibInfoAddr"
433//
Greg Claytonbda72b82011-11-29 01:44:07 +0000434// BRIEF
435// Get an address where the dynamic linker stores information about
436// where shared libraries are loaded.
437//
438// PRIORITY TO IMPLEMENT
439// High if you have a dynamic loader plug-in in LLDB for your target
440// triple (see the "qHostInfo" packet) that can use this information.
441// Many times address load randomization can make it hard to detect
442// where the dynamic loader binary and data structures are located and
443// some platforms know, or can find out where this information is.
444//
445// Low if you have a debug target where all object and symbol files
446// contain static load addresses.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000447//----------------------------------------------------------------------
448
449LLDB and GDB both support the "qShlibInfoAddr" packet which is a hint to each
450debugger as to where to find the dynamic loader information. For darwin
451binaires that run in user land this is the address of the "all_image_infos"
452stucture in the "/usr/lib/dyld" executable, or the result of a TASK_DYLD_INFO
453call. The result is returned as big endian hex bytes that are the address
454value:
455
456send packet: $qShlibInfoAddr#00
457read packet: $7fff5fc40040#00
458
459
460
461//----------------------------------------------------------------------
462// "qThreadStopInfo<tid>"
463//
Greg Claytonbda72b82011-11-29 01:44:07 +0000464// BRIEF
465// Get information about why a thread, whose ID is "<tid>", is stopped.
466//
467// PRIORITY TO IMPLEMENT
468// High if you need to support multi-threaded or multi-core debugging.
469// Many times one thread will hit a breakpoint and while the debugger
470// is in the process of suspending the other threads, other threads
471// will also hit a breakpoint. This packet allows LLDB to know why all
472// threads (live system debug) / cores (JTAG) in your program have
473// stopped and allows LLDB to display and control your program
474// correctly.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000475//----------------------------------------------------------------------
Greg Claytonbda72b82011-11-29 01:44:07 +0000476
Greg Clayton1167c4e2011-11-28 23:30:42 +0000477LLDB tries to use the "qThreadStopInfo" packet which is formatted as
478"qThreadStopInfo%x" where %x is the hex thread ID. This requests information
479about why a thread is stopped. The response is the same as the stop reply
480packets and tells us what happened to the other threads. The standard GDB
481remote packets love to think that there is only _one_ reason that _one_ thread
482stops at a time. This allows us to see why all threads stopped and allows us
483to implement better multi-threaded debugging support.
484
485//----------------------------------------------------------------------
486// "QThreadSuffixSupported"
487//
Greg Claytonbda72b82011-11-29 01:44:07 +0000488// BRIEF
489// Try to enable thread suffix support for the 'g', 'G', 'p', and 'P'
490// packets.
491//
492// PRIORITY TO IMPLEMENT
493// High. Adding a thread suffix allows us to read and write registers
494// more efficiently and stops us from having to select a thread with
495// one packet and then read registers with a second packet. It also
496// makes sure that no errors can occur where the debugger thinks it
497// already has a thread selected (see the "Hg" packet from the standard
498// GDB remote protocol documentation) yet the remote GDB server actually
499// has another thread selected.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000500//----------------------------------------------------------------------
501
502When reading thread registers, you currently need to set the current
503thread,then read the registers. This is kind of cumbersome, so we added the
504ability to query if the remote GDB server supports adding a "thread:<tid>;"
505suffix to all packets that request information for a thread. To test if the
506remote GDB server supports this feature:
507
508send packet: $QThreadSuffixSupported#00
509read packet: OK
510
511If "OK" is returned, then the 'g', 'G', 'p' and 'P' packets can accept a
512thread suffix. So to send a 'g' packet (read all register values):
513
514send packet: $g;thread:<tid>;#00
515read packet: ....
516
517send packet: $G;thread:<tid>;#00
518read packet: ....
519
520send packet: $p1a;thread:<tid>;#00
521read packet: ....
522
523send packet: $P1a=1234abcd;thread:<tid>;#00
524read packet: ....
525
526
527otherwise, without this you would need to always send two packets:
528
529send packet: $Hg<tid>#00
530read packet: ....
531send packet: $g#00
532read packet: ....
533
534We also added support for allocating and deallocating memory. We use this to
535allocate memory so we can run JITed code.
536
537//----------------------------------------------------------------------
538// "_M<size>,<permissions>"
539//
Greg Claytonbda72b82011-11-29 01:44:07 +0000540// BRIEF
541// Allocate memory on the remote target with the specified size and
542// permissions.
543//
544// PRIORITY TO IMPLEMENT
545// High if you want LLDB to be able to JIT code and run that code. JIT
546// code also needs data which is also allocated and tracked.
547//
548// Low if you don't support running JIT'ed code.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000549//----------------------------------------------------------------------
550
551The allocate memory packet starts with "_M<size>,<permissions>". It returns a
552raw big endian address value, or "" for unimplemented, or "EXX" for an error
553code. The packet is formatted as:
554
555char packet[256];
556int packet_len;
557packet_len = ::snprintf (
Greg Claytonbda72b82011-11-29 01:44:07 +0000558 packet,
559 sizeof(packet),
560 "_M%zx,%s%s%s",
561 (size_t)size,
562 permissions & lldb::ePermissionsReadable ? "r" : "",
563 permissions & lldb::ePermissionsWritable ? "w" : "",
564 permissions & lldb::ePermissionsExecutable ? "x" : "");
Greg Clayton1167c4e2011-11-28 23:30:42 +0000565
566You request a size and give the permissions. This packet does NOT need to be
567implemented if you don't want to support running JITed code. The return value
568is just the address of the newly allocated memory as raw big endian hex bytes.
569
570//----------------------------------------------------------------------
571// "_m<addr>"
572//
Greg Claytonbda72b82011-11-29 01:44:07 +0000573// BRIEF
574// Deallocate memory that was previously allocated using an allocate
575// memory pack.
576//
577// PRIORITY TO IMPLEMENT
578// High if you want LLDB to be able to JIT code and run that code. JIT
579// code also needs data which is also allocated and tracked.
580//
581// Low if you don't support running JIT'ed code.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000582//----------------------------------------------------------------------
583
584The deallocate memory packet is "_m<addr>" where you pass in the address you
585got back from a previous call to the allocate memory packet. It returns "OK"
586if the memory was successfully deallocated, or "EXX" for an error, or "" if
587not supported.
588
589//----------------------------------------------------------------------
590// "qMemoryRegionInfo:<addr>"
591//
Greg Claytonbda72b82011-11-29 01:44:07 +0000592// BRIEF
593// Get information about the address the range that contains "<addr>"
594//
595// PRIORITY TO IMPLEMENT
596// Medium. This is nice to have, but it isn't necessary. It helps LLDB
597// do stack unwinding when we branch into memory that isn't executable.
598// If we can detect that the code we are stopped in isn't executable,
599// then we can recover registers for stack frames above the current
600// frame. Otherwise we must assume we are in some JIT'ed code (not JIT
601// code that LLDB has made) and assume that no registers are available
602// in higher stack frames.
Greg Clayton1167c4e2011-11-28 23:30:42 +0000603//----------------------------------------------------------------------
604
605We added a way to get information for a memory region. The packet is:
606
Greg Claytonbda72b82011-11-29 01:44:07 +0000607 qMemoryRegionInfo:<addr>
608
Greg Clayton1167c4e2011-11-28 23:30:42 +0000609Where <addr> is a big endian hex address. The response is returned in a series
610of tuples like the data returned in a stop reply packet. The currently valid
611tuples tp return are:
612
Greg Claytonbda72b82011-11-29 01:44:07 +0000613 start:<start-addr>; // <start-addr> is a big endian hex address that is
614 // the start address of the range that contains <addr>
615
616 size:<size>; // <size> is a big endian hex byte size of the address
617 // of the range that contains <addr>
618
619 permissions:<permissions>; // <permissions> is a string that contains one
620 // or more of the characters from "rwx"
621
622 error:<ascii-byte-error-string>; // where <ascii-byte-error-string> is
623 // a hex encoded string value that
624 // contains an error string
625
Jason Molendacb349ee2011-12-13 05:39:38 +0000626If the address requested is not in a mapped region (e.g. we've jumped through
627a NULL pointer and are at 0x0) currently lldb expects to get back the size
628of the unmapped region -- that is, the distance to the next valid region.
629For instance, with a Mac OS X process which has nothing mapped in the first
6304GB of its address space, if we're asking about address 0x2,
631
632 qMemoryRegionInfo:2
633 start:2;size:fffffffe;
634
635The lack of 'permissions:' indicates that none of read/write/execute are valid
636for this region.
637
Greg Claytonbda72b82011-11-29 01:44:07 +0000638//----------------------------------------------------------------------
639// Stop reply packet extensions
640//
641// BRIEF
642// This section describes some of the additional information you can
643// specify in stop reply packets that help LLDB to know more detailed
644// information about your threads.
645//
646// DESCRIPTION
647// Standard GDB remote stop reply packets are reply packets sent in
648// response to a packet that made the program run. They come in the
649// following forms:
650//
651// "SAA"
652// "S" means signal and "AA" is a hex signal number that describes why
653// the thread or stopped. It doesn't specify which thread, so the "T"
654// packet is recommended to use instead of the "S" packet.
655//
656// "TAAkey1:value1;key2:value2;..."
657// "T" means a thread stopped due to a unix signal where "AA" is a hex
658// signal number that describes why the program stopped. This is
659// followed by a series of key/value pairs:
660// - If key is a hex number, it is a register number and value is
661// the hex value of the register in debuggee endian byte order.
662// - If key == "thread", then the value is the big endian hex
663// thread-id of the stopped thread.
664// - If key == "core", then value is a hex nujber of the core on
665// which the stop was detected.
666// - If key == "watch" or key == "rwatch" or key == "awatch", then
667// value is the data address in big endian hex
668// - If key == "library", then value is ignore and "qXfer:libraries:read"
669// packets should be used to detect any newly loaded shared libraries
670//
671// "WAA"
672// "W" means the process exited and "AA" is the exit status.
673//
674// "XAA"
675// "X" means the process exited and "AA" is signal that caused the program
676// to exit.
677//
678// "O<ascii-hex-string>"
679// "O" means STDOUT has data that was written to its console and is
680// being delivered to the debugger. This packet happens asynchronously
681// and the debugger is expected to continue to way for another stop reply
682// packet.
683//
684// LLDB EXTENSIONS
685//
686// We have extended the "T" packet to be able to also understand the
687// following keys and values:
688//
689// KEY VALUE DESCRIPTION
690// =========== ======== ================================================
691// "metype" unsigned mach exception type (the value of the EXC_XXX enumerations)
692// as an unsigned integer. For targets with mach
693// kernels only.
694//
695// "mecount" unsigned mach exception data count as an unsigned integer
696// For targets with mach kernels only.
697//
698// "medata" unsigned There should be "mecount" of these and it is the data
699// that goes along with a mach exception (as an unsigned
700// integer). For targets with mach kernels only.
701//
702// "name" string The name of the thread as a plain string. The string
703// must not contain an special packet characters or
704// contain a ':' or a ';'. Use "hexname" if the thread
705// name has special characters.
706//
707// "hexname" ascii-hex An ASCII hex string that contains the name of the thread
708//
709// "qaddr" hex Big endian hex value that contains the libdispatch
710// queue address for the queue of the thread.
711//
712// "reason" enum The enumeration must be one of:
713// "trace" the program stopped after a single instruction
714// was executed on a core. Usually done when single
715// stepping past a breakpoint
716// "breakpoint" a breakpoint set using a 'z' packet was hit.
717// "trap" stopped due to user interruption
718// "signal" stopped due to an actual unix signal, not
719// just the debugger using a unix signal to keep
720// the GDB remote client happy.
721// "watchpoint". Should be used in conjunction with
722// the "watch"/"rwatch"/"awatch" key value pairs.
723// "exception" an exception stop reason. Use with
724// the "description" key/value pair to describe the
725// exceptional event the user should see as the stop
726// reason.
727// "description" ascii-hex An ASCII hex string that contains a more descriptive
728// reason that the thread stopped. This is only needed
729// if none of the key/value pairs are enough to
730// describe why something stopped.
731//
732// BEST PRACTICES:
733// Since register values can be supplied with this packet, it is often useful
734// to return the PC, SP, FP, LR (if any), and FLAGS regsiters so that separate
735// packets don't need to be sent to read each of these registers from each
736// thread.
737//
738// If a thread is stopped for no reason (like just because another thread
739// stopped, or because when one core stops all cores should stop), use a
740// "T" packet with "00" as the signal number and fill in as many key values
741// and registers as possible.
742//
743// LLDB likes to know why a thread stopped since many thread contol
744// operations like stepping over a source line, actually are implemented
745// by running the process multiple times. If a breakpoint is hit while
746// trying to step over a source line and LLDB finds out that a breakpoint
747// is hit in the "reason", we will know to stop trying to do the step
748// over because something happened that should stop us from trying to
749// do the step. If we are at a breakpoint and we disable the breakpoint
750// at the current PC and do an instruction single step, knowing that
751// we stopped due to a "trace" helps us know that we can continue
752// running versus stopping due to a "breakpoint" (if we have two
753// breakpoint instruction on consucutive instructions). So the more info
754// we can get about the reason a thread stops, the better job LLDB can
755// do when controlling your process. A typical GDB server behavior is
756// to send a SIGTRAP for breakpoints _and_ also when instruction single
757// stepping, in this case the debugger doesn't really know why we
758// stopped and it can make it hard for the debugger to control your
759// program correctly. What if a real SIGTRAP was delivered to a thread
760// while we were trying to single step? We woudn't know the difference
761// with a standard GDB remote server and we could do the wrong thing.
762//
763// PRIORITY TO IMPLEMENT
764// High. Having the extra information in your stop reply packets makes
765// your debug session more reliable and informative.
766//----------------------------------------------------------------------
767