gdb: File-I/O Overview
E.13.1 File-I/O Overview
------------------------
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.