[ELF] Fix edge condition in thunk offset calculation
For ARM thunks, the `movt` half of the relocation was using an incorrect offset (it was off by 4 bytes). The original intent seems to have been for the offset to have been relative to the current instruction, in which case the difference of 4 makes sense. As the code stands, however, the offset is always calculated relative to the start of the thunk (`P`), and so the `movw` and `movt` halves should use the same offset. This requires a very particular offset between the thunk and its target to be triggered, and it results in the `movt` half of the relocation being off-by-one. The tests here use ARM-Thumb interworking thunks, since those are the only ARM thunks currently implemented. I actually encountered this with a range extension thunk (having Peter's patches cherry-picked locally), but the underlying issue is identical. Differential Revision: https://reviews.llvm.org/D38112 llvm-svn: 313915
Loading
Please sign in to comment