Previous: Target Descriptions Implementation, Up: Target Descriptions
Target descriptions can report additional registers specific to an instance of the target. But it takes a little work in the architecture specific routines to support this.
A target description must either have no registers or a complete set—this avoids complexity in trying to merge standard registers with the target defined registers. It is the architecture's responsibility to validate that a description with registers has everything it needs. To keep architecture code simple, the same mechanism is used to assign fixed internal register numbers to standard registers.
If tdesc_has_registers
returns 1, the description contains
registers. The architecture's gdbarch_init
routine should:
tdesc_data_alloc
to allocate storage, early, before
searching for a matching gdbarch or allocating a new one.
tdesc_find_feature
to locate standard features by name.
tdesc_numbered_register
and tdesc_numbered_register_choices
to locate the expected registers in the standard features.
NULL
if a required feature is missing, or if any standard
feature is missing expected registers. This will produce a warning that
the description was incomplete.
tdesc_use_registers
is called.
set_gdbarch_num_regs
as usual, with a number higher than any
fixed number passed to tdesc_numbered_register
.
tdesc_use_registers
after creating a new gdbarch, before
returning it.
After tdesc_use_registers
has been called, the architecture's
register_name
, register_type
, and register_reggroup_p
routines will not be called; that information will be taken from
the target description. num_regs
may be increased to account
for any additional registers in the description.
Pseudo-registers require some extra care:
tdesc_numbered_register
allows the architecture to give
constant register numbers to standard architectural registers, e.g.
as an enum
in arch-tdep.h. But because
pseudo-registers are always numbered above num_regs
,
which may be increased by the description, constant numbers
can not be used for pseudos. They must be numbered relative to
num_regs
instead.
set_tdesc_pseudo_register_name
,
set_tdesc_pseudo_register_type
, and
set_tdesc_pseudo_register_reggroup_p
to supply routines
describing pseudo registers. These routines will be passed
internal register numbers, so the same routines used for the
gdbarch equivalents are usually suitable.