[LLD][ELF][ARM] Fix case of patched unrelocated BLX
There are a couple of problems with the code to patch unrelocated BLX instructions: 1. 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. 2. 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. Differential Revision: https://reviews.llvm.org/D104905
Loading
Please sign in to comment