[JITLink][AArch32] Implement R_ARM_PREL31 and process .ARM.exidx sections (#79044)
authorStefan Gränitz <stefan.graenitz@gmail.com>
Tue, 23 Jan 2024 02:37:32 +0000 (03:37 +0100)
committerGitHub <noreply@github.com>
Tue, 23 Jan 2024 02:37:32 +0000 (03:37 +0100)
commit9577806b1e6ce06bece48d96b39035f4cee9137d
treed7dea7e0ebf69c8bb90040d056dfaf7e12528494
parentafc229b217f499160b3228a0d7d1783613ac9b58
[JITLink][AArch32] Implement R_ARM_PREL31 and process .ARM.exidx sections (#79044)

`R_ARM_PREL31` is a 31-bits relative data relocation where the
most-significant bit is preserved. It's used primarily in `.ARM.exidx`
sections, which we skipped processing until now, because we didn't
support the relocation type. This was implemented in RuntimeDyld with
https://reviews.llvm.org/D25069 and I implemented it in a similar way in
JITLink in order to reach feature parity.
llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h
llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp
llvm/lib/ExecutionEngine/JITLink/aarch32.cpp
llvm/test/ExecutionEngine/JITLink/AArch32/ELF_relocations_data.s