gdb: Protocol Basics

 
 E.13.2 Protocol Basics
 ----------------------
 
 The File-I/O protocol uses the 'F' packet as the request as well as
 reply packet.  Since a File-I/O system call can only occur when GDB is
 waiting for a response from the continuing or stepping target, the
 File-I/O request is a reply that GDB has to expect as a result of a
 previous '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 flags are given in a protocol-specific
      representation.
 
    At this point, GDB has to perform the following actions.
 
    * If the parameters include pointer values 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 the system call is expected to return data in buffer space
      specified by pointer parameters to the call, 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.