One of the challenges of using gdb to debug embedded systems is that there are so many minor variants of each processor architecture in use. It is common practice for vendors to start with a standard processor core — ARM, PowerPC, or MIPS, for example — and then make changes to adapt it to a particular market niche. Some architectures have hundreds of variants, available from dozens of vendors. This leads to a number of problems:
To address these problems, the gdb remote protocol allows a target system to not only identify itself to gdb, but to actually describe its own features. This lets gdb support processor variants it has never seen before — to the extent that the descriptions are accurate, and that gdb understands them.
gdb must be linked with the Expat library to support XML target descriptions. See Expat.