Lines Matching refs:ELFT

50 template <class ELFT>
51 static void initELFHeader(typename ELFT::Ehdr &ElfHeader, uint16_t Machine) { in initELFHeader()
58 ElfHeader.e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; in initELFHeader()
59 bool IsLittleEndian = ELFT::TargetEndianness == support::little; in initELFHeader()
68 ElfHeader.e_ehsize = sizeof(typename ELFT::Ehdr); in initELFHeader()
69 ElfHeader.e_phentsize = sizeof(typename ELFT::Phdr); in initELFHeader()
70 ElfHeader.e_shentsize = sizeof(typename ELFT::Shdr); in initELFHeader()
74 template <class ELFT> struct OutputSection {
75 using Elf_Shdr = typename ELFT::Shdr;
86 template <class T, class ELFT>
87 struct ContentSection : public OutputSection<ELFT> {
99 template <class ELFT> class ELFSymbolTableBuilder {
101 using Elf_Sym = typename ELFT::Sym;
126 template <class ELFT> class ELFDynamicTableBuilder {
128 using Elf_Dyn = typename ELFT::Dyn;
169 template <class ELFT> class ELFStubBuilder {
171 using Elf_Ehdr = typename ELFT::Ehdr;
172 using Elf_Shdr = typename ELFT::Shdr;
173 using Elf_Phdr = typename ELFT::Phdr;
174 using Elf_Sym = typename ELFT::Sym;
175 using Elf_Addr = typename ELFT::Addr;
176 using Elf_Dyn = typename ELFT::Dyn;
199 std::vector<OutputSection<ELFT> *> Sections = {&DynSym, &DynStr, &DynTab, in ELFStubBuilder()
201 const OutputSection<ELFT> *LastSection = Sections.back(); in ELFStubBuilder()
204 for (OutputSection<ELFT> *Sec : Sections) { in ELFStubBuilder()
238 for (OutputSection<ELFT> *Sec : Sections) { in ELFStubBuilder()
253 initELFHeader<ELFT>(ElfHeader, static_cast<uint16_t>(*Stub.Target.Arch)); in ELFStubBuilder()
278 ContentSection<ELFStringTableBuilder, ELFT> DynStr;
279 ContentSection<ELFStringTableBuilder, ELFT> ShStrTab;
280 ContentSection<ELFSymbolTableBuilder<ELFT>, ELFT> DynSym;
281 ContentSection<ELFDynamicTableBuilder<ELFT>, ELFT> DynTab;
287 void fillStrTabShdr(ContentSection<ELFStringTableBuilder, ELFT> &StrTab, in fillStrTabShdr()
300 void fillSymTabShdr(ContentSection<ELFSymbolTableBuilder<ELFT>, ELFT> &SymTab, in fillSymTabShdr() argument
317 ContentSection<ELFDynamicTableBuilder<ELFT>, ELFT> &DynTab) const { in fillDynTabShdr() argument
329 uint64_t shdrOffset(const OutputSection<ELFT> &Sec) const { in shdrOffset()
333 void writeShdr(uint8_t *Data, const OutputSection<ELFT> &Sec) const { in writeShdr()
354 template <class ELFT> class DynSym {
355 using Elf_Shdr_Range = typename ELFT::ShdrRange;
356 using Elf_Shdr = typename ELFT::Shdr;
359 static Expected<DynSym> create(const ELFFile<ELFT> &ElfFile, in create()
385 DynSym(const ELFFile<ELFT> &ElfFile, const DynamicEntries &DynEnt, in DynSym()
415 const ELFFile<ELFT> &ElfFile;
445 template <class ELFT>
447 typename ELFT::DynRange DynTable) { in populateDynamic()
518 template <class ELFT>
520 const typename ELFT::Sym &RawSym) { in createELFSym()
545 template <class ELFT>
547 const typename ELFT::SymRange DynSym, in populateSymbols()
564 IFSSymbol Sym = createELFSym<ELFT>(*SymName, RawSym); in populateSymbols()
573 template <class ELFT>
575 buildStub(const ELFObjectFile<ELFT> &ElfObj) { in buildStub()
576 using Elf_Dyn_Range = typename ELFT::DynRange; in buildStub()
577 using Elf_Sym_Range = typename ELFT::SymRange; in buildStub()
578 using Elf_Sym = typename ELFT::Sym; in buildStub()
580 const ELFFile<ELFT> &ElfFile = ElfObj.getELFFile(); in buildStub()
589 if (Error Err = populateDynamic<ELFT>(DynEnt, *DynTable)) in buildStub()
591 Expected<DynSym<ELFT>> EDynSym = DynSym<ELFT>::create(ElfFile, DynEnt); in buildStub()
641 Error SymReadError = populateSymbols<ELFT>(*DestStub, DynSyms, DynStr); in buildStub()
655 template <class ELFT>
658 ELFStubBuilder<ELFT> Builder{Stub}; in writeELFBinaryToFile()