### 12.1 Target Descriptions Implementation

Before gdb connects to a new target, or runs a new program on an existing target, it discards any existing target description and reverts to a default gdbarch. Then, after connecting, it looks for a new target description by calling `target_find_description`.

A description may come from a user specified file (XML), the remote ‘`qXfer:features:read`’ packet (also XML), or from any custom `to_read_description` routine in the target vector. For instance, the remote target supports guessing whether a MIPS target is 32-bit or 64-bit based on the size of the ‘`g`’ packet.

If any target description is found, gdb creates a new gdbarch incorporating the description by calling `gdbarch_update_p`. Any ‘`<architecture>`’ element is handled first, to determine which architecture's gdbarch initialization routine is called to create the new architecture. Then the initialization routine is called, and has a chance to adjust the constructed architecture based on the contents of the target description. For instance, it can recognize any properties set by a `to_read_description` routine. Also see Adding Target Described Register Support.