gdb.info: Protocol basics

Go forward to The F request packet
Go backward to File-I/O Overview
Go up to File-I/O remote protocol extension
Go to the top op gdb

Protocol basics

The File-I/O protocol uses the `F' packet, as request as well as as
reply packet.  Since a File-I/O system call can only occur when GDB is
waiting for the continuing or stepping target, the File-I/O request is
a reply that GDB has to expect as a result of a former `C', `c', `S' or
`s' packet.  This `F' packet contains all information needed to allow
GDB to call the appropriate host system call:
   * A unique identifier for the requested system call.
   * All parameters to the system call.  Pointers are given as addresses
     in the target memory address space.  Pointers to strings are given
     as pointer/length pair.  Numerical values are given as they are.
     Numerical control values are given in a protocol specific
     representation.
   At that point GDB has to perform the following actions.
   * If parameter pointer values are given, which point to data needed
     as input to a system call, GDB requests this data from the target
     with a standard `m' packet request.  This additional communication
     has to be expected by the target implementation and is handled as
     any other `m' packet.
   * GDB translates all value from protocol representation to host
     representation as needed.  Datatypes are coerced into the host
     types.
   * GDB calls the system call
   * It then coerces datatypes back to protocol representation.
   * If pointer parameters in the request packet point to buffer space
     in which a system call is expected to copy data to, the data is
     transmitted to the target using a `M' or `X' packet.  This packet
     has to be expected by the target implementation and is handled as
     any other `M' or `X' packet.
   Eventually GDB replies with another `F' packet which contains all
necessary information for the target to continue.  This at least
contains
   * Return value.
   * `errno', if has been changed by the system call.
   * "Ctrl-C" flag.
   After having done the needed type and value coercion, the target
continues the latest continue or step action.