Lines Matching refs:ELFT

51 template <class ELFT>
52 static void initELFHeader(typename ELFT::Ehdr &ElfHeader, uint16_t Machine) { in initELFHeader()
59 ElfHeader.e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; in initELFHeader()
60 bool IsLittleEndian = ELFT::Endianness == llvm::endianness::little; in initELFHeader()
69 ElfHeader.e_ehsize = sizeof(typename ELFT::Ehdr); in initELFHeader()
70 ElfHeader.e_phentsize = sizeof(typename ELFT::Phdr); in initELFHeader()
71 ElfHeader.e_shentsize = sizeof(typename ELFT::Shdr); in initELFHeader()
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, in ELFStubBuilder()
202 const OutputSection<ELFT> *LastSection = Sections.back(); in ELFStubBuilder()
205 for (OutputSection<ELFT> *Sec : Sections) { in ELFStubBuilder()
239 for (OutputSection<ELFT> *Sec : Sections) { in ELFStubBuilder()
254 initELFHeader<ELFT>(ElfHeader, static_cast<uint16_t>(*Stub.Target.Arch)); in ELFStubBuilder()
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, in fillStrTabShdr()
301 void fillSymTabShdr(ContentSection<ELFSymbolTableBuilder<ELFT>, ELFT> &SymTab, in fillSymTabShdr() argument
318 ContentSection<ELFDynamicTableBuilder<ELFT>, ELFT> &DynTab) const { in fillDynTabShdr() argument
330 uint64_t shdrOffset(const OutputSection<ELFT> &Sec) const { in shdrOffset()
334 void writeShdr(uint8_t *Data, const OutputSection<ELFT> &Sec) const { in writeShdr()
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, in create()
386 DynSym(const ELFFile<ELFT> &ElfFile, const DynamicEntries &DynEnt, in DynSym()
416 const ELFFile<ELFT> &ElfFile;
446 template <class ELFT>
448 typename ELFT::DynRange DynTable) { in populateDynamic()
519 template <class ELFT>
521 const typename ELFT::Sym &RawSym) { in createELFSym()
546 template <class ELFT>
548 const typename ELFT::SymRange DynSym, in populateSymbols()
565 IFSSymbol Sym = createELFSym<ELFT>(*SymName, RawSym); in populateSymbols()
574 template <class ELFT>
576 buildStub(const ELFObjectFile<ELFT> &ElfObj) { in buildStub()
577 using Elf_Dyn_Range = typename ELFT::DynRange; in buildStub()
578 using Elf_Sym_Range = typename ELFT::SymRange; in buildStub()
579 using Elf_Sym = typename ELFT::Sym; in buildStub()
581 const ELFFile<ELFT> &ElfFile = ElfObj.getELFFile(); in buildStub()
590 if (Error Err = populateDynamic<ELFT>(DynEnt, *DynTable)) in buildStub()
592 Expected<DynSym<ELFT>> EDynSym = DynSym<ELFT>::create(ElfFile, DynEnt); in buildStub()
642 Error SymReadError = populateSymbols<ELFT>(*DestStub, DynSyms, DynStr); in buildStub()
656 template <class ELFT>
659 ELFStubBuilder<ELFT> Builder{Stub}; in writeELFBinaryToFile()