[llvm-branch-commits] [lld] [lld][MachO] Support Objective-C class selector stubs (PR #219744)
Zhaoxuan Jiang via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Oct 30 00:51:11 PDT 2026
================
@@ -152,6 +178,63 @@ void ARM64::writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
stubOffset += objcStubSize;
}
+void ARM64::writeObjCMsgSendClassStub(uint8_t *buf, Symbol *stubSym,
+ uint64_t stubsAddr, uint64_t &stubOffset,
+ uint64_t selrefVA, Symbol *classSym,
+ Symbol *objcMsgSend) const {
+ SymbolDiagnostic d = {stubSym, stubSym->getName()};
+ auto *buf32 = reinterpret_cast<uint32_t *>(buf);
+
+ auto pcPageBits = [stubsAddr, stubOffset](int i) {
+ return pageBits(stubsAddr + stubOffset + i * sizeof(uint32_t));
+ };
+ auto writeClassLoad = [&](const uint32_t *code) {
+ uint64_t classVA;
+ uint32_t pageOffCode = code[1];
+ if (auto *defined = dyn_cast<Defined>(classSym)) {
+ classVA = defined->getVA();
+ pageOffCode = 0x91000000; // add x0, x0, _OBJC_CLASS_$_Foo at pageoff
+ } else {
+ classVA = in.got->addr + classSym->gotIndex * LP64::wordSize;
+ }
----------------
nocchijiang wrote:
```suggestion
if (needsBinding(classSym)) {
classVA = in.got->addr + classSym->gotIndex * LP64::wordSize;
} else {
classVA = classSym->getVA();
pageOffCode = 0x91000000; // add x0, x0, _OBJC_CLASS_$_Foo at pageoff
}
```
https://github.com/llvm/llvm-project/pull/219744
More information about the llvm-branch-commits
mailing list