diff options
author | Stefan Gränitz <stefan.graenitz@gmail.com> | 2023-11-15 11:18:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-15 11:18:23 +0100 |
commit | 808caa9d4608b4383743043f6dbdab6faf608bcc (patch) | |
tree | b27c41d47bb3de16aae0d45733bed760eed098cb /llvm/lib | |
parent | 0f7f8dbcf5ec06cb1ea8912ffd234523f60a61be (diff) | |
download | llvm-808caa9d4608b4383743043f6dbdab6faf608bcc.zip llvm-808caa9d4608b4383743043f6dbdab6faf608bcc.tar.gz llvm-808caa9d4608b4383743043f6dbdab6faf608bcc.tar.bz2 |
[JITLink][AArch32] Run all error unittests throug main entrypoints (#72091)
Reading implicit addend from a relocation site doesn't require a complete
`LinkGraph` edge. The operation is independent from `TargetSymbol`,
but constructing an `Edge` instance required one. This patch fixes the
inconsistency and simplifies some setup code from the error unittests.
Furthermore this patch prepares for the `Arm`/`Thumb`/`Data` helper
functions to be turned into implementation details. Exposing them in the
API causes unfortunate inconsistencies that we don't want to error-check
all the time, e.g. passing `Thumb_Call` to `readAddendArm()`.
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/JITLink/aarch32.cpp | 26 |
2 files changed, 14 insertions, 17 deletions
diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp index b6b6369..132989f 100644 --- a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp @@ -173,14 +173,13 @@ private: auto FixupAddress = orc::ExecutorAddr(FixupSect.sh_addr) + Rel.r_offset; Edge::OffsetT Offset = FixupAddress - BlockToFix.getAddress(); - Edge E(*Kind, Offset, *GraphSymbol, 0); Expected<int64_t> Addend = - aarch32::readAddend(*Base::G, BlockToFix, E, ArmCfg); + aarch32::readAddend(*Base::G, BlockToFix, Offset, *Kind, ArmCfg); if (!Addend) return Addend.takeError(); - E.setAddend(*Addend); + Edge E(*Kind, Offset, *GraphSymbol, *Addend); LLVM_DEBUG({ dbgs() << " "; printEdge(dbgs(), BlockToFix, E, getELFAArch32EdgeKindName(*Kind)); diff --git a/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp b/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp index c3823f9..b80b12e 100644 --- a/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp @@ -304,12 +304,11 @@ void writeImmediate(WritableArmRelocation &R, uint32_t Imm) { R.Wd = (R.Wd & ~Mask) | Imm; } -Expected<int64_t> readAddendData(LinkGraph &G, Block &B, const Edge &E) { +Expected<int64_t> readAddendData(LinkGraph &G, Block &B, Edge::OffsetT Offset, + Edge::Kind Kind) { llvm::endianness Endian = G.getEndianness(); - - Edge::Kind Kind = E.getKind(); const char *BlockWorkingMem = B.getContent().data(); - const char *FixupPtr = BlockWorkingMem + E.getOffset(); + const char *FixupPtr = BlockWorkingMem + Offset; switch (Kind) { case Data_Delta32: @@ -319,13 +318,13 @@ Expected<int64_t> readAddendData(LinkGraph &G, Block &B, const Edge &E) { return make_error<JITLinkError>( "In graph " + G.getName() + ", section " + B.getSection().getName() + " can not read implicit addend for aarch32 edge kind " + - G.getEdgeKindName(E.getKind())); + G.getEdgeKindName(Kind)); } } -Expected<int64_t> readAddendArm(LinkGraph &G, Block &B, const Edge &E) { - ArmRelocation R(B.getContent().data() + E.getOffset()); - Edge::Kind Kind = E.getKind(); +Expected<int64_t> readAddendArm(LinkGraph &G, Block &B, Edge::OffsetT Offset, + Edge::Kind Kind) { + ArmRelocation R(B.getContent().data() + Offset); switch (Kind) { case Arm_Call: @@ -352,14 +351,13 @@ Expected<int64_t> readAddendArm(LinkGraph &G, Block &B, const Edge &E) { return make_error<JITLinkError>( "In graph " + G.getName() + ", section " + B.getSection().getName() + " can not read implicit addend for aarch32 edge kind " + - G.getEdgeKindName(E.getKind())); + G.getEdgeKindName(Kind)); } } -Expected<int64_t> readAddendThumb(LinkGraph &G, Block &B, const Edge &E, - const ArmConfig &ArmCfg) { - ThumbRelocation R(B.getContent().data() + E.getOffset()); - Edge::Kind Kind = E.getKind(); +Expected<int64_t> readAddendThumb(LinkGraph &G, Block &B, Edge::OffsetT Offset, + Edge::Kind Kind, const ArmConfig &ArmCfg) { + ThumbRelocation R(B.getContent().data() + Offset); switch (Kind) { case Thumb_Call: @@ -394,7 +392,7 @@ Expected<int64_t> readAddendThumb(LinkGraph &G, Block &B, const Edge &E, return make_error<JITLinkError>( "In graph " + G.getName() + ", section " + B.getSection().getName() + " can not read implicit addend for aarch32 edge kind " + - G.getEdgeKindName(E.getKind())); + G.getEdgeKindName(Kind)); } } |