Lines Matching defs:ELFT

49 /// @param ElfHeader Target ELFT::Ehdr to populate.
51 template <class ELFT>
52 static void initELFHeader(typename ELFT::Ehdr &ElfHeader, uint16_t Machine) {
59 ElfHeader.e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32;
60 bool IsLittleEndian = ELFT::Endianness == llvm::endianness::little;
69 ElfHeader.e_ehsize = sizeof(typename ELFT::Ehdr);
70 ElfHeader.e_phentsize = sizeof(typename ELFT::Phdr);
71 ElfHeader.e_shentsize = sizeof(typename ELFT::Shdr);
75 template <class ELFT> struct OutputSection {
76 using Elf_Shdr = typename ELFT::Shdr;
87 template <class T, class ELFT>
88 struct ContentSection : public OutputSection<ELFT> {
100 template <class ELFT> class ELFSymbolTableBuilder {
102 using Elf_Sym = typename ELFT::Sym;
127 template <class ELFT> class ELFDynamicTableBuilder {
129 using Elf_Dyn = typename ELFT::Dyn;
170 template <class ELFT> class ELFStubBuilder {
172 using Elf_Ehdr = typename ELFT::Ehdr;
173 using Elf_Shdr = typename ELFT::Shdr;
174 using Elf_Phdr = typename ELFT::Phdr;
175 using Elf_Sym = typename ELFT::Sym;
176 using Elf_Addr = typename ELFT::Addr;
177 using Elf_Dyn = typename ELFT::Dyn;
200 std::vector<OutputSection<ELFT> *> Sections = {&DynSym, &DynStr, &DynTab,
202 const OutputSection<ELFT> *LastSection = Sections.back();
205 for (OutputSection<ELFT> *Sec : Sections) {
239 for (OutputSection<ELFT> *Sec : Sections) {
254 initELFHeader<ELFT>(ElfHeader, static_cast<uint16_t>(*Stub.Target.Arch));
279 ContentSection<ELFStringTableBuilder, ELFT> DynStr;
280 ContentSection<ELFStringTableBuilder, ELFT> ShStrTab;
281 ContentSection<ELFSymbolTableBuilder<ELFT>, ELFT> DynSym;
282 ContentSection<ELFDynamicTableBuilder<ELFT>, ELFT> DynTab;
288 void fillStrTabShdr(ContentSection<ELFStringTableBuilder, ELFT> &StrTab,
301 void fillSymTabShdr(ContentSection<ELFSymbolTableBuilder<ELFT>, ELFT> &SymTab,
318 ContentSection<ELFDynamicTableBuilder<ELFT>, ELFT> &DynTab) const {
330 uint64_t shdrOffset(const OutputSection<ELFT> &Sec) const {
334 void writeShdr(uint8_t *Data, const OutputSection<ELFT> &Sec) const {
355 template <class ELFT> class DynSym {
356 using Elf_Shdr_Range = typename ELFT::ShdrRange;
357 using Elf_Shdr = typename ELFT::Shdr;
360 static Expected<DynSym> create(const ELFFile<ELFT> &ElfFile,
386 DynSym(const ELFFile<ELFT> &ElfFile, const DynamicEntries &DynEnt,
416 const ELFFile<ELFT> &ElfFile;
440 /// This function populates a DynamicEntries struct using an ELFT::DynRange.
446 template <class ELFT>
448 typename ELFT::DynRange DynTable) {
515 /// information from a binary ELFT::Sym.
518 /// @param RawSym ELFT::Sym to extract symbol information from.
519 template <class ELFT>
521 const typename ELFT::Sym &RawSym) {
546 template <class ELFT>
548 const typename ELFT::SymRange DynSym,
565 IFSSymbol Sym = createELFSym<ELFT>(*SymName, RawSym);
574 template <class ELFT>
576 buildStub(const ELFObjectFile<ELFT> &ElfObj) {
577 using Elf_Dyn_Range = typename ELFT::DynRange;
578 using Elf_Sym_Range = typename ELFT::SymRange;
579 using Elf_Sym = typename ELFT::Sym;
581 const ELFFile<ELFT> &ElfFile = ElfObj.getELFFile();
590 if (Error Err = populateDynamic<ELFT>(DynEnt, *DynTable))
592 Expected<DynSym<ELFT>> EDynSym = DynSym<ELFT>::create(ElfFile, DynEnt);
642 Error SymReadError = populateSymbols<ELFT>(*DestStub, DynSyms, DynStr);
656 template <class ELFT>
659 ELFStubBuilder<ELFT> Builder{Stub};
710 // This function wraps the ELFT writeELFBinaryToFile() so writeBinaryStub()