Skip to content

Commit d246440

Browse files
committed
Clean writeObjCMsgSendStub
As we now don't use selector index, simplify writeObjCMsgSend{*}Stub
1 parent b387d5e commit d246440

File tree

6 files changed

+24
-34
lines changed

6 files changed

+24
-34
lines changed

lld/MachO/Arch/ARM64.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ struct ARM64 : ARM64Common {
3737
uint64_t entryAddr) const override;
3838

3939
void writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
40-
uint64_t &stubOffset, uint64_t selrefsVA,
41-
uint64_t selectorIndex,
40+
uint64_t &stubOffset, uint64_t selrefVA,
4241
Symbol *objcMsgSend) const override;
4342
void populateThunk(InputSection *thunk, Symbol *funcSym) override;
4443
void applyOptimizationHints(uint8_t *, const ObjFile &) const override;
@@ -124,8 +123,7 @@ static constexpr uint32_t objcStubsSmallCode[] = {
124123
};
125124

126125
void ARM64::writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
127-
uint64_t &stubOffset, uint64_t selrefsVA,
128-
uint64_t selectorIndex,
126+
uint64_t &stubOffset, uint64_t selrefVA,
129127
Symbol *objcMsgSend) const {
130128
uint64_t objcMsgSendAddr;
131129
uint64_t objcStubSize;
@@ -136,8 +134,8 @@ void ARM64::writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
136134
objcMsgSendAddr = in.got->addr;
137135
objcMsgSendIndex = objcMsgSend->gotIndex;
138136
::writeObjCMsgSendFastStub<LP64>(buf, objcStubsFastCode, sym, stubsAddr,
139-
stubOffset, selrefsVA, selectorIndex,
140-
objcMsgSendAddr, objcMsgSendIndex);
137+
stubOffset, selrefVA, objcMsgSendAddr,
138+
objcMsgSendIndex);
141139
} else {
142140
assert(config->objcStubsMode == ObjCStubsMode::small);
143141
objcStubSize = target->objcStubsSmallSize;
@@ -149,8 +147,8 @@ void ARM64::writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
149147
objcMsgSendIndex = objcMsgSend->stubsIndex;
150148
}
151149
::writeObjCMsgSendSmallStub<LP64>(buf, objcStubsSmallCode, sym, stubsAddr,
152-
stubOffset, selrefsVA, selectorIndex,
153-
objcMsgSendAddr, objcMsgSendIndex);
150+
stubOffset, selrefVA, objcMsgSendAddr,
151+
objcMsgSendIndex);
154152
}
155153
stubOffset += objcStubSize;
156154
}

lld/MachO/Arch/ARM64Common.h

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -153,23 +153,21 @@ inline void writeStubHelperEntry(uint8_t *buf8,
153153
}
154154

155155
template <class LP>
156-
inline void
157-
writeObjCMsgSendFastStub(uint8_t *buf, const uint32_t objcStubsFastCode[8],
158-
Symbol *sym, uint64_t stubsAddr, uint64_t stubOffset,
159-
uint64_t selrefsVA, uint64_t selectorIndex,
160-
uint64_t gotAddr, uint64_t msgSendIndex) {
156+
inline void writeObjCMsgSendFastStub(uint8_t *buf,
157+
const uint32_t objcStubsFastCode[8],
158+
Symbol *sym, uint64_t stubsAddr,
159+
uint64_t stubOffset, uint64_t selrefVA,
160+
uint64_t gotAddr, uint64_t msgSendIndex) {
161161
SymbolDiagnostic d = {sym, sym->getName()};
162162
auto *buf32 = reinterpret_cast<uint32_t *>(buf);
163163

164164
auto pcPageBits = [stubsAddr, stubOffset](int i) {
165165
return pageBits(stubsAddr + stubOffset + i * sizeof(uint32_t));
166166
};
167167

168-
uint64_t selectorOffset = selectorIndex * LP::wordSize;
169168
encodePage21(&buf32[0], d, objcStubsFastCode[0],
170-
pageBits(selrefsVA + selectorOffset) - pcPageBits(0));
171-
encodePageOff12(&buf32[1], d, objcStubsFastCode[1],
172-
selrefsVA + selectorOffset);
169+
pageBits(selrefVA) - pcPageBits(0));
170+
encodePageOff12(&buf32[1], d, objcStubsFastCode[1], selrefVA);
173171
uint64_t gotOffset = msgSendIndex * LP::wordSize;
174172
encodePage21(&buf32[2], d, objcStubsFastCode[2],
175173
pageBits(gotAddr + gotOffset) - pcPageBits(2));
@@ -184,20 +182,18 @@ template <class LP>
184182
inline void
185183
writeObjCMsgSendSmallStub(uint8_t *buf, const uint32_t objcStubsSmallCode[3],
186184
Symbol *sym, uint64_t stubsAddr, uint64_t stubOffset,
187-
uint64_t selrefsVA, uint64_t selectorIndex,
188-
uint64_t msgSendAddr, uint64_t msgSendIndex) {
185+
uint64_t selrefVA, uint64_t msgSendAddr,
186+
uint64_t msgSendIndex) {
189187
SymbolDiagnostic d = {sym, sym->getName()};
190188
auto *buf32 = reinterpret_cast<uint32_t *>(buf);
191189

192190
auto pcPageBits = [stubsAddr, stubOffset](int i) {
193191
return pageBits(stubsAddr + stubOffset + i * sizeof(uint32_t));
194192
};
195193

196-
uint64_t selectorOffset = selectorIndex * LP::wordSize;
197194
encodePage21(&buf32[0], d, objcStubsSmallCode[0],
198-
pageBits(selrefsVA + selectorOffset) - pcPageBits(0));
199-
encodePageOff12(&buf32[1], d, objcStubsSmallCode[1],
200-
selrefsVA + selectorOffset);
195+
pageBits(selrefVA) - pcPageBits(0));
196+
encodePageOff12(&buf32[1], d, objcStubsSmallCode[1], selrefVA);
201197
uint64_t msgSendStubVA = msgSendAddr + msgSendIndex * target->stubSize;
202198
uint64_t pcVA = stubsAddr + stubOffset + 2 * sizeof(uint32_t);
203199
encodeBranch26(&buf32[2], {nullptr, "objc_msgSend stub"},

lld/MachO/Arch/ARM64_32.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ struct ARM64_32 : ARM64Common {
3434
void writeStubHelperEntry(uint8_t *buf, const Symbol &,
3535
uint64_t entryAddr) const override;
3636
void writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
37-
uint64_t &stubOffset, uint64_t selrefsVA,
38-
uint64_t selectorIndex,
37+
uint64_t &stubOffset, uint64_t selrefVA,
3938
Symbol *objcMsgSend) const override;
4039
};
4140

@@ -101,7 +100,7 @@ void ARM64_32::writeStubHelperEntry(uint8_t *buf8, const Symbol &sym,
101100

102101
void ARM64_32::writeObjCMsgSendStub(uint8_t *buf, Symbol *sym,
103102
uint64_t stubsAddr, uint64_t &stubOffset,
104-
uint64_t selrefsVA, uint64_t selectorIndex,
103+
uint64_t selrefVA,
105104
Symbol *objcMsgSend) const {
106105
fatal("TODO: implement this");
107106
}

lld/MachO/Arch/X86_64.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ struct X86_64 : TargetInfo {
3838
uint64_t entryAddr) const override;
3939

4040
void writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
41-
uint64_t &stubOffset, uint64_t selrefsVA,
42-
uint64_t selectorIndex,
41+
uint64_t &stubOffset, uint64_t selrefVA,
4342
Symbol *objcMsgSend) const override;
4443

4544
void relaxGotLoad(uint8_t *loc, uint8_t type) const override;
@@ -182,17 +181,15 @@ static constexpr uint8_t objcStubsFastCode[] = {
182181
};
183182

184183
void X86_64::writeObjCMsgSendStub(uint8_t *buf, Symbol *sym, uint64_t stubsAddr,
185-
uint64_t &stubOffset, uint64_t selrefsVA,
186-
uint64_t selectorIndex,
184+
uint64_t &stubOffset, uint64_t selrefVA,
187185
Symbol *objcMsgSend) const {
188186
uint64_t objcMsgSendAddr = in.got->addr;
189187
uint64_t objcMsgSendIndex = objcMsgSend->gotIndex;
190188

191189
memcpy(buf, objcStubsFastCode, sizeof(objcStubsFastCode));
192190
SymbolDiagnostic d = {sym, sym->getName()};
193191
uint64_t stubAddr = stubsAddr + stubOffset;
194-
writeRipRelative(d, buf, stubAddr, 7,
195-
selrefsVA + selectorIndex * LP64::wordSize);
192+
writeRipRelative(d, buf, stubAddr, 7, selrefVA);
196193
writeRipRelative(d, buf, stubAddr, 0xd,
197194
objcMsgSendAddr + objcMsgSendIndex * LP64::wordSize);
198195
stubOffset += target->objcStubsFastSize;

lld/MachO/SyntheticSections.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -931,7 +931,7 @@ void ObjCStubsSection::writeTo(uint8_t *buf) const {
931931
assert(j != methnameToSelref.end());
932932
auto selrefAddr = j->second->getVA(0);
933933
target->writeObjCMsgSendStub(buf + stubOffset, sym, in.objcStubs->addr,
934-
stubOffset, selrefAddr, 0, objcMsgSend);
934+
stubOffset, selrefAddr, objcMsgSend);
935935
}
936936
}
937937

lld/MachO/Target.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class TargetInfo {
7171

7272
virtual void writeObjCMsgSendStub(uint8_t *buf, Symbol *sym,
7373
uint64_t stubsAddr, uint64_t &stubOffset,
74-
uint64_t selrefsVA, uint64_t selectorIndex,
74+
uint64_t selrefVA,
7575
Symbol *objcMsgSend) const = 0;
7676

7777
// Symbols may be referenced via either the GOT or the stubs section,

0 commit comments

Comments
 (0)