The File I/O remote protocol extension (short: File-I/O) allows the target to use the host's file system and console I/O to perform various system calls. System calls on the target system are translated into a remote protocol packet to the host system, which then performs the needed actions and returns a response packet to the target system. This simulates file system operations even on targets that lack file systems.
The protocol is defined to be independent of both the host and target systems. It uses its own internal representation of datatypes and values. Both gdb and the target's gdb stub are responsible for translating the system-dependent value representations into the internal protocol representations when data is transmitted.
The communication is synchronous. A system call is possible only when gdb is waiting for a response from the ‘C’, ‘c’, ‘S’ or ‘s’ packets. While gdb handles the request for a system call, the target is stopped to allow deterministic access to the target's memory. Therefore File-I/O is not interruptible by target signals. On the other hand, it is possible to interrupt File-I/O by a user interrupt (‘Ctrl-C’) within gdb.
The target's request to perform a host system call does not finish the latest ‘C’, ‘c’, ‘S’ or ‘s’ action. That means, after finishing the system call, the target returns to continuing the previous activity (continue, step). No additional continue or step request from gdb is required.
(gdb) continue <- target requests 'system call X' target is stopped, gdb executes system call -> gdb returns result ... target continues, gdb returns to wait for the target <- target hits breakpoint and sends a Txx packet
The protocol only supports I/O on the console and to regular files on the host file system. Character or block special devices, pipes, named pipes, sockets or any other communication method on the host system are not supported by this protocol.
File I/O is not supported in non-stop mode.