Lines Matching refs:sym
307 void macho::addNonLazyBindingEntries(const Symbol *sym, in addNonLazyBindingEntries() argument
311 if (needsBinding(sym)) in addNonLazyBindingEntries()
312 in.chainedFixups->addBinding(sym, isec, offset, addend); in addNonLazyBindingEntries()
313 else if (isa<Defined>(sym)) in addNonLazyBindingEntries()
320 if (const auto *dysym = dyn_cast<DylibSymbol>(sym)) { in addNonLazyBindingEntries()
323 in.weakBinding->addEntry(sym, isec, offset, addend); in addNonLazyBindingEntries()
324 } else if (const auto *defined = dyn_cast<Defined>(sym)) { in addNonLazyBindingEntries()
327 in.weakBinding->addEntry(sym, isec, offset, addend); in addNonLazyBindingEntries()
329 in.binding->addEntry(sym, isec, offset, addend); in addNonLazyBindingEntries()
337 void NonLazyPointerSectionBase::addEntry(Symbol *sym) { in addEntry() argument
338 if (entries.insert(sym)) { in addEntry()
339 assert(!sym->isInGot()); in addEntry()
340 sym->gotIndex = entries.size() - 1; in addEntry()
342 addNonLazyBindingEntries(sym, isec, sym->gotIndex * target->wordSize); in addEntry()
364 static void writeChainedBind(uint8_t *buf, const Symbol *sym, int64_t addend) { in writeChainedBind() argument
368 auto [ordinal, inlineAddend] = in.chainedFixups->getBinding(sym, addend); in writeChainedBind()
376 void macho::writeChainedFixup(uint8_t *buf, const Symbol *sym, int64_t addend) { in writeChainedFixup() argument
377 if (needsBinding(sym)) in writeChainedFixup()
378 writeChainedBind(buf, sym, addend); in writeChainedFixup()
380 writeChainedRebase(buf, sym->getVA() + addend); in writeChainedFixup()
554 static int16_t ordinalForSymbol(const Symbol &sym) { in ordinalForSymbol() argument
555 if (const auto *dysym = dyn_cast<DylibSymbol>(&sym)) in ordinalForSymbol()
557 assert(cast<Defined>(&sym)->interposable); in ordinalForSymbol()
630 const Symbol *sym = p.first; in finalizeContents() local
633 if (sym->isWeakRef()) in finalizeContents()
635 os << flags << sym->getName() << '\0' in finalizeContents()
637 int16_t ordinal = ordinalForSymbol(*sym); in finalizeContents()
671 const Symbol *sym = p.first; in finalizeContents() local
674 << sym->getName() << '\0' in finalizeContents()
709 for (const Symbol *sym : entries) { in writeTo() local
711 config->emitChainedFixups ? sym->getGotVA() : sym->getLazyPtrVA(); in writeTo()
712 target->writeStub(buf + off, *sym, pointerVA); in writeTo()
719 static void addBindingsForStub(Symbol *sym) { in addBindingsForStub() argument
721 if (auto *dysym = dyn_cast<DylibSymbol>(sym)) { in addBindingsForStub()
722 if (sym->isWeakDef()) { in addBindingsForStub()
724 sym->stubsIndex * target->wordSize); in addBindingsForStub()
725 in.weakBinding->addEntry(sym, in.lazyPointers->isec, in addBindingsForStub()
726 sym->stubsIndex * target->wordSize); in addBindingsForStub()
730 } else if (auto *defined = dyn_cast<Defined>(sym)) { in addBindingsForStub()
733 sym->stubsIndex * target->wordSize); in addBindingsForStub()
734 in.weakBinding->addEntry(sym, in.lazyPointers->isec, in addBindingsForStub()
735 sym->stubsIndex * target->wordSize); in addBindingsForStub()
737 in.lazyBinding->addEntry(sym); in addBindingsForStub()
746 void StubsSection::addEntry(Symbol *sym) { in addEntry() argument
747 bool inserted = entries.insert(sym); in addEntry()
749 sym->stubsIndex = entries.size() - 1; in addEntry()
752 in.got->addEntry(sym); in addEntry()
754 addBindingsForStub(sym); in addEntry()
774 for (const Symbol *sym : in.lazyBinding->getEntries()) { in writeTo() local
775 target->writeStubHelperEntry(buf + off, *sym, addr + off); in writeTo()
817 void ObjCStubsSection::addEntry(Symbol *sym) { in addEntry() argument
818 assert(sym->getName().starts_with(symbolPrefix) && "not an objc stub"); in addEntry()
819 StringRef methname = sym->getName().drop_front(symbolPrefix.size()); in addEntry()
827 sym, sym->getName(), nullptr, isec, in addEntry()
896 Defined *sym = symbols[i]; in writeTo() local
897 target->writeObjCMsgSendStub(buf + stubOffset, sym, in.objcStubs->addr, in writeTo()
919 for (const Symbol *sym : in.stubs->getEntries()) { in writeTo() local
920 if (const auto *dysym = dyn_cast<DylibSymbol>(sym)) { in writeTo()
928 write64le(buf + off, sym->getVA()); in writeTo()
940 for (Symbol *sym : entries) in finalizeContents()
941 sym->lazyBindOffset = encode(*sym); in finalizeContents()
948 void LazyBindingSection::addEntry(Symbol *sym) { in addEntry() argument
950 if (entries.insert(sym)) { in addEntry()
951 sym->stubsHelperIndex = entries.size() - 1; in addEntry()
953 sym->stubsIndex * target->wordSize); in addEntry()
963 uint32_t LazyBindingSection::encode(const Symbol &sym) { in encode() argument
969 in.lazyPointers->addr - dataSeg->addr + sym.stubsIndex * target->wordSize; in encode()
971 encodeDylibOrdinal(ordinalForSymbol(sym), os); in encode()
974 if (sym.isWeakRef()) in encode()
977 os << flags << sym.getName() << '\0' in encode()
988 for (const Symbol *sym : symtab->getSymbols()) { in finalizeContents() local
989 if (const auto *defined = dyn_cast<Defined>(sym)) { in finalizeContents()
993 hasWeakSymbol = hasWeakSymbol || sym->isWeakDef(); in finalizeContents()
994 } else if (auto *dysym = dyn_cast<DylibSymbol>(sym)) { in finalizeContents()
1075 for (const Symbol *sym : objFile->symbols) { in finalizeContents() local
1076 if (const auto *defined = dyn_cast_or_null<Defined>(sym)) { in finalizeContents()
1159 Symbol *sym = entry.sym; in emitStabs() local
1160 assert(sym->isLive() && in emitStabs()
1162 if (auto *defined = dyn_cast<Defined>(sym)) { in emitStabs()
1225 auto addSymbol = [&](std::vector<SymtabEntry> &symbols, Symbol *sym) { in finalizeContents() argument
1226 uint32_t strx = stringTableSection.addString(sym->getName()); in finalizeContents()
1227 symbols.push_back({sym, strx}); in finalizeContents()
1233 localSymbolsHandler = [&](Symbol *sym) { addSymbol(localSymbols, sym); }; in finalizeContents() argument
1239 localSymbolsHandler = [&](Symbol *sym) { in finalizeContents() argument
1240 if (config->localSymbolPatterns.match(sym->getName())) in finalizeContents()
1241 addSymbol(localSymbols, sym); in finalizeContents()
1245 localSymbolsHandler = [&](Symbol *sym) { in finalizeContents() argument
1246 if (!config->localSymbolPatterns.match(sym->getName())) in finalizeContents()
1247 addSymbol(localSymbols, sym); in finalizeContents()
1260 for (Symbol *sym : objFile->symbols) { in finalizeContents()
1261 if (auto *defined = dyn_cast_or_null<Defined>(sym)) { in finalizeContents()
1265 localSymbolsHandler(sym); in finalizeContents()
1277 for (Symbol *sym : symtab->getSymbols()) { in finalizeContents()
1278 if (!sym->isLive()) in finalizeContents()
1280 if (auto *defined = dyn_cast<Defined>(sym)) { in finalizeContents()
1288 } else if (auto *dysym = dyn_cast<DylibSymbol>(sym)) { in finalizeContents()
1290 addSymbol(undefinedSymbols, sym); in finalizeContents()
1298 entry.sym->symtabIndex = symtabIndex++; in finalizeContents()
1337 if (auto *defined = dyn_cast<Defined>(entry.sym)) { in writeTo()
1364 } else if (auto *dysym = dyn_cast<DylibSymbol>(entry.sym)) { in writeTo()
1422 static uint32_t indirectValue(const Symbol *sym) { in indirectValue() argument
1423 if (sym->symtabIndex == UINT32_MAX) in indirectValue()
1425 if (auto *defined = dyn_cast<Defined>(sym)) in indirectValue()
1428 return sym->symtabIndex; in indirectValue()
1433 for (const Symbol *sym : in.got->getEntries()) { in writeTo() local
1434 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1437 for (const Symbol *sym : in.tlvPointers->getEntries()) { in writeTo() local
1438 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1441 for (const Symbol *sym : in.stubs->getEntries()) { in writeTo() local
1442 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1452 for (const Symbol *sym : in.stubs->getEntries()) { in writeTo() local
1453 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1917 Symbol *sym = rel.referent.dyn_cast<Symbol *>(); in setUp() local
1918 if (auto *undefined = dyn_cast<Undefined>(sym)) in setUp()
1920 if (needsBinding(sym)) in setUp()
1921 in.stubs->addEntry(sym); in setUp()
1989 static bool needsWeakBind(const Symbol &sym) { in needsWeakBind() argument
1990 if (auto *dysym = dyn_cast<DylibSymbol>(&sym)) in needsWeakBind()
1992 if (auto *defined = dyn_cast<Defined>(&sym)) in needsWeakBind()
1997 void ChainedFixupsSection::addBinding(const Symbol *sym, in addBinding() argument
2003 {{sym, outlineAddend}, static_cast<uint32_t>(bindings.size())}); in addBinding()
2006 symtabSize += sym->getName().size() + 1; in addBinding()
2007 hasWeakBind = hasWeakBind || needsWeakBind(*sym); in addBinding()
2016 ChainedFixupsSection::getBinding(const Symbol *sym, int64_t addend) const { in getBinding() argument
2018 auto it = bindings.find({sym, outlineAddend}); in getBinding()
2142 const Symbol &sym = *import.first; in writeTo() local
2143 int16_t libOrdinal = needsWeakBind(sym) in writeTo()
2145 : ordinalForSymbol(sym); in writeTo()
2146 buf += writeImport(buf, importFormat, libOrdinal, sym.isWeakRef(), in writeTo()
2148 nameOffset += sym.getName().size() + 1; in writeTo()