Go to the first, previous, next, last section, table of contents.


Communication protocol

The stub files provided with implement the target side of the communication protocol, and the side is implemented in the source file `remote.c'. Normally, you can simply allow these subroutines to communicate, and ignore the details. (If you're implementing your own stub file, you can still ignore the details: start with one of the existing stub files. `sparc-stub.c' is the best organized, and therefore the easiest to read.)

However, there may be occasions when you need to know something about the protocol--for example, if there is only one serial port to your target machine, you might want your program to do something special if it recognizes a packet meant for .

All commands and responses (other than acknowledgements, which are single characters) are sent as a packet which includes a checksum. A packet is introduced with the character `$', and ends with the character `#' followed by a two-digit checksum:

$packet info#checksum

checksum is computed as the modulo 256 sum of the packet info characters.

When either the host or the target machine receives a packet, the first response expected is an acknowledgement: a single character, either `+' (to indicate the package was received correctly) or `-' (to request retransmission).

The host () sends commands, and the target (the debugging stub incorporated in your program) sends data in response. The target also sends data when your program stops.

Command packets are distinguished by their first character, which identifies the kind of command.

These are some of the commands currently supported (for a complete list of commands, look in `gdb/remote.c.'):

g
Requests the values of CPU registers.
G
Sets the values of CPU registers.
maddr,count
Read count bytes at location addr.
Maddr,count:...
Write count bytes at location addr.
c
caddr
Resume execution at the current address (or at addr if supplied).
s
saddr
Step the target program for one instruction, from either the current program counter or from addr if supplied.
k
Kill the target program.
?
Report the most recent signal. To allow you to take advantage of the signal handling commands, one of the functions of the debugging stub is to report CPU traps as the corresponding POSIX signal values.
T
Allows the remote stub to send only the registers that needs to make a quick decision about single-stepping or conditional breakpoints. This eliminates the need to fetch the entire register set for each instruction being stepped through. The remote serial protocol now implements a write-through cache for registers. only re-reads the registers if the target has run.

If you have trouble with the serial connection, you can use the command set remotedebug. This makes report on all packets sent back and forth across the serial line to the remote machine. The packet-debugging information is printed on the standard output stream. set remotedebug off turns it off, and show remotedebug shows you its current state.


Go to the first, previous, next, last section, table of contents.