BFD maintains relocations in much the same way it maintains
symbols: they are left alone until required, then read in
en-masse and translated into an internal form. A common
bfd_perform_relocation acts upon the
canonical form to do the fixup.
Relocations are maintained on a per section basis, while symbols are maintained on a per BFD basis.
All that a back end has to do to fit the BFD interface is to create
struct reloc_cache_entry for each relocation
in a particular section, and fill in the right bits of the structures.