There are a couple of problems with the code to patch unrelocated BLX instructions:
- The calculation of the PC needs to take into account the alignment of the instruction. The Thumb BLX uses alignDown(PC, 4) for the source address.
- The calculation of the PC bias is hard-coded to 4 which works for Thumb, but when there is a BLX the branch will be in Arm state so it needs an 8 byte PC bias.
No asssembler generates an unrelocated BLX instruction so these problems do not affect real world programs. However we should still fix them.
Depends on D104701 for objdump output of BLX