lld assumes some ARM features that are not available in all Arm processors. In particular:
- The blx instruction present for interworking.
- The movt/movw instructions are used in Thunks.
- The J1=1 J2=1 encoding of branch immediates to improve Thumb wide branch range are assumed to be present.
This patch reads the ARM Attributes section to check for the architecture the object file was compiled with. If none of the objects have an architecture that supports these features a warning will be given. These warnings are most likely to affect people compiling for Armv6 as used in the first Raspberry Pi as this is the only mass-market device capable of running linux or BSD that isn't Armv7 or higher.
For completeness I would like to implement support for Armv6 by providing alternative implementations that don't use these features. These can come in later patches.
Should these now be ArmHas... etc.? (i.e., new capitalization as mentioned on llvm-weekly)