Caching of registers is used, so that the target does not need to be accessed and reanalyzed multiple times for each register in circumstances where the register value cannot have changed.
gdb provides struct regcache
, associated with a
particular struct gdbarch
to hold the cached values of the raw
registers. A set of functions is provided to access both the raw
registers (with raw
in their name) and the full set of cooked
registers (with cooked
in their name). Functions are provided
to ensure the register cache is kept synchronized with the values of
the actual registers in the target.
Accessing registers through the struct regcache
routines will
ensure that the appropriate struct gdbarch
functions are called
when necessary to access the underlying target architecture. In general
users should use the cooked functions, since these will map to the
raw functions automatically as appropriate.
The two key functions are regcache_cooked_read
and
regcache_cooked_write
which read or write a register from or to
a byte buffer (type gdb_byte *
). For convenience the wrapper
functions regcache_cooked_read_signed
,
regcache_cooked_read_unsigned
,
regcache_cooked_write_signed
and
regcache_cooked_write_unsigned
are provided, which read or
write the value using the buffer and convert to or from an integral
value as appropriate.