Next: Existing Targets, Up: Target Vector Definition
A target vector can be completely inactive (not pushed on the target stack), active but not running (pushed, but not connected to a fully manifested inferior), or completely active (pushed, with an accessible inferior). Most targets are only completely inactive or completely active, but some support persistent connections to a target even when the target has exited or not yet started.
For example, connecting to the simulator using target sim
does
not create a running program. Neither registers nor memory are
accessible until run
. Similarly, after kill
, the
program can not continue executing. But in both cases gdb
remains connected to the simulator, and target-specific commands
are directed to the simulator.
A target which only supports complete activation should push itself
onto the stack in its to_open
routine (by calling
push_target
), and unpush itself from the stack in its
to_mourn_inferior
routine (by calling unpush_target
).
A target which supports both partial and complete activation should
still call push_target
in to_open
, but not call
unpush_target
in to_mourn_inferior
. Instead, it should
call either target_mark_running
or target_mark_exited
in its to_open
, depending on whether the target is fully active
after connection. It should also call target_mark_running
any
time the inferior becomes fully active (e.g. in
to_create_inferior
and to_attach
), and
target_mark_exited
when the inferior becomes inactive (in
to_mourn_inferior
). The target should also make sure to call
target_mourn_inferior
from its to_kill
, to return the
target to inactive state.