Lines Matching refs:sym

308 void macho::addNonLazyBindingEntries(const Symbol *sym,  in addNonLazyBindingEntries()  argument
312 if (needsBinding(sym)) in addNonLazyBindingEntries()
313 in.chainedFixups->addBinding(sym, isec, offset, addend); in addNonLazyBindingEntries()
314 else if (isa<Defined>(sym)) in addNonLazyBindingEntries()
321 if (const auto *dysym = dyn_cast<DylibSymbol>(sym)) { in addNonLazyBindingEntries()
324 in.weakBinding->addEntry(sym, isec, offset, addend); in addNonLazyBindingEntries()
325 } else if (const auto *defined = dyn_cast<Defined>(sym)) { in addNonLazyBindingEntries()
328 in.weakBinding->addEntry(sym, isec, offset, addend); in addNonLazyBindingEntries()
330 in.binding->addEntry(sym, isec, offset, addend); in addNonLazyBindingEntries()
338 void NonLazyPointerSectionBase::addEntry(Symbol *sym) { in addEntry() argument
339 if (entries.insert(sym)) { in addEntry()
340 assert(!sym->isInGot()); in addEntry()
341 sym->gotIndex = entries.size() - 1; in addEntry()
343 addNonLazyBindingEntries(sym, isec, sym->gotIndex * target->wordSize); in addEntry()
365 static void writeChainedBind(uint8_t *buf, const Symbol *sym, int64_t addend) { in writeChainedBind() argument
369 auto [ordinal, inlineAddend] = in.chainedFixups->getBinding(sym, addend); in writeChainedBind()
377 void macho::writeChainedFixup(uint8_t *buf, const Symbol *sym, int64_t addend) { in writeChainedFixup() argument
378 if (needsBinding(sym)) in writeChainedFixup()
379 writeChainedBind(buf, sym, addend); in writeChainedFixup()
381 writeChainedRebase(buf, sym->getVA() + addend); in writeChainedFixup()
547 static bool needsWeakBind(const Symbol &sym) { in needsWeakBind() argument
548 if (auto *dysym = dyn_cast<DylibSymbol>(&sym)) in needsWeakBind()
550 if (auto *defined = dyn_cast<Defined>(&sym)) in needsWeakBind()
563 static int16_t ordinalForSymbol(const Symbol &sym) { in ordinalForSymbol() argument
564 if (config->emitChainedFixups && needsWeakBind(sym)) in ordinalForSymbol()
566 if (const auto *dysym = dyn_cast<DylibSymbol>(&sym)) in ordinalForSymbol()
568 assert(cast<Defined>(&sym)->interposable); in ordinalForSymbol()
641 const Symbol *sym = p.first; in finalizeContents() local
644 if (sym->isWeakRef()) in finalizeContents()
646 os << flags << sym->getName() << '\0' in finalizeContents()
648 int16_t ordinal = ordinalForSymbol(*sym); in finalizeContents()
682 const Symbol *sym = p.first; in finalizeContents() local
685 << sym->getName() << '\0' in finalizeContents()
720 for (const Symbol *sym : entries) { in writeTo() local
722 config->emitChainedFixups ? sym->getGotVA() : sym->getLazyPtrVA(); in writeTo()
723 target->writeStub(buf + off, *sym, pointerVA); in writeTo()
730 static void addBindingsForStub(Symbol *sym) { in addBindingsForStub() argument
732 if (auto *dysym = dyn_cast<DylibSymbol>(sym)) { in addBindingsForStub()
733 if (sym->isWeakDef()) { in addBindingsForStub()
735 sym->stubsIndex * target->wordSize); in addBindingsForStub()
736 in.weakBinding->addEntry(sym, in.lazyPointers->isec, in addBindingsForStub()
737 sym->stubsIndex * target->wordSize); in addBindingsForStub()
741 } else if (auto *defined = dyn_cast<Defined>(sym)) { in addBindingsForStub()
744 sym->stubsIndex * target->wordSize); in addBindingsForStub()
745 in.weakBinding->addEntry(sym, in.lazyPointers->isec, in addBindingsForStub()
746 sym->stubsIndex * target->wordSize); in addBindingsForStub()
748 in.lazyBinding->addEntry(sym); in addBindingsForStub()
757 void StubsSection::addEntry(Symbol *sym) { in addEntry() argument
758 bool inserted = entries.insert(sym); in addEntry()
760 sym->stubsIndex = entries.size() - 1; in addEntry()
763 in.got->addEntry(sym); in addEntry()
765 addBindingsForStub(sym); in addEntry()
785 for (const Symbol *sym : in.lazyBinding->getEntries()) { in writeTo() local
786 target->writeStubHelperEntry(buf + off, *sym, addr + off); in writeTo()
839 if (const auto *sym = Reloc.referent.dyn_cast<Symbol *>()) { in initialize() local
840 if (const auto *d = dyn_cast<Defined>(sym)) { in initialize()
891 bool ObjCStubsSection::isObjCStubSymbol(Symbol *sym) { in isObjCStubSymbol() argument
892 return sym->getName().starts_with(symbolPrefix); in isObjCStubSymbol()
895 StringRef ObjCStubsSection::getMethname(Symbol *sym) { in getMethname() argument
896 assert(isObjCStubSymbol(sym) && "not an objc stub"); in getMethname()
897 auto name = sym->getName(); in getMethname()
902 void ObjCStubsSection::addEntry(Symbol *sym) { in addEntry() argument
903 StringRef methname = getMethname(sym); in addEntry()
912 sym, sym->getName(), nullptr, isec, in addEntry()
952 Defined *sym = symbols[i]; in writeTo() local
954 auto methname = getMethname(sym); in writeTo()
958 target->writeObjCMsgSendStub(buf + stubOffset, sym, in.objcStubs->addr, in writeTo()
979 for (const Symbol *sym : in.stubs->getEntries()) { in writeTo() local
980 if (const auto *dysym = dyn_cast<DylibSymbol>(sym)) { in writeTo()
988 write64le(buf + off, sym->getVA()); in writeTo()
1000 for (Symbol *sym : entries) in finalizeContents()
1001 sym->lazyBindOffset = encode(*sym); in finalizeContents()
1008 void LazyBindingSection::addEntry(Symbol *sym) { in addEntry() argument
1010 if (entries.insert(sym)) { in addEntry()
1011 sym->stubsHelperIndex = entries.size() - 1; in addEntry()
1013 sym->stubsIndex * target->wordSize); in addEntry()
1023 uint32_t LazyBindingSection::encode(const Symbol &sym) { in encode() argument
1029 in.lazyPointers->addr - dataSeg->addr + sym.stubsIndex * target->wordSize; in encode()
1031 encodeDylibOrdinal(ordinalForSymbol(sym), os); in encode()
1034 if (sym.isWeakRef()) in encode()
1037 os << flags << sym.getName() << '\0' in encode()
1048 for (const Symbol *sym : symtab->getSymbols()) { in finalizeContents() local
1049 if (const auto *defined = dyn_cast<Defined>(sym)) { in finalizeContents()
1053 hasWeakSymbol = hasWeakSymbol || sym->isWeakDef(); in finalizeContents()
1054 } else if (auto *dysym = dyn_cast<DylibSymbol>(sym)) { in finalizeContents()
1138 for (const Symbol *sym : objFile->symbols) { in finalizeContents() local
1139 if (const auto *defined = dyn_cast_or_null<Defined>(sym)) { in finalizeContents()
1222 Symbol *sym = entry.sym; in emitStabs() local
1223 assert(sym->isLive() && in emitStabs()
1225 if (auto *defined = dyn_cast<Defined>(sym)) { in emitStabs()
1293 auto addSymbol = [&](std::vector<SymtabEntry> &symbols, Symbol *sym) { in finalizeContents() argument
1294 uint32_t strx = stringTableSection.addString(sym->getName()); in finalizeContents()
1295 symbols.push_back({sym, strx}); in finalizeContents()
1301 localSymbolsHandler = [&](Symbol *sym) { addSymbol(localSymbols, sym); }; in finalizeContents() argument
1307 localSymbolsHandler = [&](Symbol *sym) { in finalizeContents() argument
1308 if (config->localSymbolPatterns.match(sym->getName())) in finalizeContents()
1309 addSymbol(localSymbols, sym); in finalizeContents()
1313 localSymbolsHandler = [&](Symbol *sym) { in finalizeContents() argument
1314 if (!config->localSymbolPatterns.match(sym->getName())) in finalizeContents()
1315 addSymbol(localSymbols, sym); in finalizeContents()
1328 for (Symbol *sym : objFile->symbols) { in finalizeContents()
1329 if (auto *defined = dyn_cast_or_null<Defined>(sym)) { in finalizeContents()
1333 localSymbolsHandler(sym); in finalizeContents()
1345 for (Symbol *sym : symtab->getSymbols()) { in finalizeContents()
1346 if (!sym->isLive()) in finalizeContents()
1348 if (auto *defined = dyn_cast<Defined>(sym)) { in finalizeContents()
1356 } else if (auto *dysym = dyn_cast<DylibSymbol>(sym)) { in finalizeContents()
1358 addSymbol(undefinedSymbols, sym); in finalizeContents()
1366 entry.sym->symtabIndex = symtabIndex++; in finalizeContents()
1405 if (auto *defined = dyn_cast<Defined>(entry.sym)) { in writeTo()
1432 } else if (auto *dysym = dyn_cast<DylibSymbol>(entry.sym)) { in writeTo()
1490 static uint32_t indirectValue(const Symbol *sym) { in indirectValue() argument
1491 if (sym->symtabIndex == UINT32_MAX || !needsBinding(sym)) in indirectValue()
1493 return sym->symtabIndex; in indirectValue()
1498 for (const Symbol *sym : in.got->getEntries()) { in writeTo() local
1499 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1502 for (const Symbol *sym : in.tlvPointers->getEntries()) { in writeTo() local
1503 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1506 for (const Symbol *sym : in.stubs->getEntries()) { in writeTo() local
1507 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1517 for (const Symbol *sym : in.stubs->getEntries()) { in writeTo() local
1518 write32le(buf + off * sizeof(uint32_t), indirectValue(sym)); in writeTo()
1982 Symbol *sym = rel.referent.dyn_cast<Symbol *>(); in setUp() local
1983 if (auto *undefined = dyn_cast<Undefined>(sym)) in setUp()
1985 if (needsBinding(sym)) in setUp()
1986 in.stubs->addEntry(sym); in setUp()
2049 for (Symbol *sym : isec->symbols) { in finalize()
2050 assert(isa<Defined>(sym) && in finalize()
2052 auto *def = cast<Defined>(sym); in finalize()
2089 for (const Symbol *sym : isec->symbols) { in isMethodList() local
2090 auto *def = dyn_cast_or_null<Defined>(sym); in isMethodList()
2289 void ChainedFixupsSection::addBinding(const Symbol *sym, in addBinding() argument
2295 {{sym, outlineAddend}, static_cast<uint32_t>(bindings.size())}); in addBinding()
2298 symtabSize += sym->getName().size() + 1; in addBinding()
2299 hasWeakBind = hasWeakBind || needsWeakBind(*sym); in addBinding()
2308 ChainedFixupsSection::getBinding(const Symbol *sym, int64_t addend) const { in getBinding() argument
2310 auto it = bindings.find({sym, outlineAddend}); in getBinding()
2434 const Symbol &sym = *import.first; in writeTo() local
2435 buf += writeImport(buf, importFormat, ordinalForSymbol(sym), in writeTo()
2436 sym.isWeakRef(), nameOffset, import.second); in writeTo()
2437 nameOffset += sym.getName().size() + 1; in writeTo()