[PATCH] D155672: [JITLink][PowerPC] Correct handling of R_PPC64_REL24_NOTOC
Lang Hames via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 21 22:39:24 PDT 2023
lhames accepted this revision.
lhames added a comment.
This revision is now accepted and ready to land.
LGTM. Thanks @lkail!
================
Comment at: llvm/include/llvm/ExecutionEngine/JITLink/ppc64.h:54-57
extern const char PointerJumpStubContent_big[20];
extern const char PointerJumpStubContent_little[20];
+extern const char PointerJumpStubNoTOCContent_big[32];
+extern const char PointerJumpStubNoTOCContent_little[32];
----------------
You could further unify some of the code paths using a pair of template variables:
```
template <support::endianness Endianness>
ArrayRef<char> PtrJumpStubContent;
template<>
ArrayRef<char> PtrJumpStubContent<support::endianness::big> =
PtrJumpStubContent_big;
template<>
ArrayRef<char> PtrJumpStubContent<support::endianness::litttle> =
PtrJumpStubContent_little;
template <support::endianness Endianness>
ArrayRef<char> PtrJumpStubNotTOCContent;
template<>
ArrayRef<char> PtrJumpStubNoTOCContent<support::endianness::big> =
PtrJumpStubNoTOCContent_big;
template<>
ArrayRef<char> PtrJumpStubNoTOCContent<support::endianness::litttle> =
PtrJumpStubNoTOCContent_little;
```
`pickStub`'s cases then look like:
```
template <support::endianness Endianness>
inline PLTCallStubInfo pickStub(PLTCallStubKind StubKind) {
switch (StubKind) {
case LongBranch: {
auto Content = PointerJumpStubContent<Endianness>;
// Skip save r2.
Content = Content.slice(4);
return PLTCallStubInfo{
Content,
{{TOCDelta16HA, 0, 0}, {TOCDelta16LO, 4, 0}},
};
}
case LongBranchSaveR2: {
auto Content = PointerJumpStub<Endianness>;
return PLTCallStubInfo{
Content,
{{TOCDelta16HA, 4, 0}, {TOCDelta16LO, 8, 0}},
};
}
case LongBranchNoTOC: {
auto Content = PointerJumpStubNoTOCContent<Endianness>;
return PLTCallStubInfo{
Content,
{{Delta16HA, 16, 8}, {Delta16LO, 20, 12}},
};
}
}
}
...
```
If other clients are likely to use the stub content arrays this may be worth it. If everyone is going to use `pickStub` then I think it's fine either way.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D155672/new/
https://reviews.llvm.org/D155672
More information about the llvm-commits
mailing list