# ARM relocations

The ARM ELF specification is written in what I dub ECAE-Thumb (Extended C Acronym English with Thumb and other stuff twice per sentence, though technically in the true spirit of ECAE Thumb I should not explain what CEAE stands for). For example see this link, which, should you care to follow and read it, `is sufficient to link a "hello world" application`. While you don’t normally have to understand or deal with all that, it is the default under which most things get linked, and I can understand it has to be that messy in order to deal with all the other messy languages it has to cope with. Hence this section attempts to explain only the bare minimum requirements.
The ELF specification is insanely complicated, with (as one small part) over 130 different types of relocations. It is one thing/hard enough to decipher an arm binary, quite another to construct one. It is a classic case of over-engineering, albeit a very successful one, and of course it has to support umpteen programming languages, old and new, and of every possible underlying paradigm.
Much is made of got and plt, with the latter apparently promising a saving of up to 0.0001s on the load time for really big and complex programs, which I’ll happily forego. Phix replaces all of that stuff with a much simpler mechanism that asks the loader to resolve more things up-front, but it currently only needs less than a dozen such entries anyway.
TBC...