Index: ELF/ICF.cpp =================================================================== --- ELF/ICF.cpp +++ ELF/ICF.cpp @@ -74,9 +74,9 @@ namespace lld { namespace elf { template class ICF { - typedef typename ELFFile::Elf_Shdr Elf_Shdr; - typedef typename ELFFile::Elf_Sym Elf_Sym; - typedef typename ELFFile::uintX_t uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; typedef Elf_Rel_Impl Elf_Rel; using Comparator = std::function *, Index: ELF/InputFiles.h =================================================================== --- ELF/InputFiles.h +++ ELF/InputFiles.h @@ -56,10 +56,10 @@ template class ELFFileBase : public InputFile { public: - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::Elf_Word Elf_Word; - typedef typename llvm::object::ELFFile::Elf_Sym_Range Elf_Sym_Range; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::Word Elf_Word; + typedef typename ELFT::Sym_Range Elf_Sym_Range; ELFFileBase(Kind K, MemoryBufferRef M); static bool classof(const InputFile *F) { @@ -92,11 +92,11 @@ // .o file. template class ObjectFile : public ELFFileBase { typedef ELFFileBase Base; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Sym_Range Elf_Sym_Range; - typedef typename llvm::object::ELFFile::Elf_Word Elf_Word; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym_Range Elf_Sym_Range; + typedef typename ELFT::Word Elf_Word; + typedef typename ELFT::uint uintX_t; // uint32 in ELFT's byte order typedef llvm::support::detail::packed_endian_specific_integral< @@ -197,10 +197,10 @@ // .so file. template class SharedFile : public ELFFileBase { typedef ELFFileBase Base; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::Elf_Word Elf_Word; - typedef typename llvm::object::ELFFile::Elf_Sym_Range Elf_Sym_Range; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::Word Elf_Word; + typedef typename ELFT::Sym_Range Elf_Sym_Range; std::vector> SymbolBodies; std::vector Undefs; Index: ELF/InputFiles.cpp =================================================================== --- ELF/InputFiles.cpp +++ ELF/InputFiles.cpp @@ -45,8 +45,7 @@ } template -typename ELFFileBase::Elf_Sym_Range -ELFFileBase::getElfSymbols(bool OnlyGlobals) { +typename ELFT::Sym_Range ELFFileBase::getElfSymbols(bool OnlyGlobals) { if (!Symtab) return Elf_Sym_Range(nullptr, nullptr); Elf_Sym_Range Syms = ELFObj.symbols(Symtab); @@ -141,9 +140,8 @@ return Entries.slice(1); } -template -static bool shouldMerge(const typename ELFFile::Elf_Shdr &Sec) { - typedef typename ELFFile::uintX_t uintX_t; +template static bool shouldMerge(const typename ELFT::Shdr &Sec) { + typedef typename ELFT::uint uintX_t; uintX_t Flags = Sec.sh_flags; if (!(Flags & SHF_MERGE)) return false; @@ -352,7 +350,7 @@ : ELFFileBase(Base::SharedKind, M), AsNeeded(Config->AsNeeded) {} template -const typename ELFFile::Elf_Shdr * +const typename ELFT::Shdr * SharedFile::getSection(const Elf_Sym &Sym) const { uint32_t Index = this->getSectionIndex(Sym); if (Index == 0) @@ -363,8 +361,8 @@ // Partially parse the shared object file so that we can call // getSoName on this object. template void SharedFile::parseSoName() { - typedef typename ELFFile::Elf_Dyn Elf_Dyn; - typedef typename ELFFile::uintX_t uintX_t; + typedef typename ELFT::Dyn Elf_Dyn; + typedef typename ELFT::uint uintX_t; const Elf_Shdr *DynamicSec = nullptr; const ELFFile Obj = this->ELFObj; Index: ELF/InputSection.h =================================================================== --- ELF/InputSection.h +++ ELF/InputSection.h @@ -26,11 +26,11 @@ // This corresponds to a section of an input file. template class InputSectionBase { protected: - typedef typename llvm::object::ELFFile::Elf_Rel Elf_Rel; - typedef typename llvm::object::ELFFile::Elf_Rela Elf_Rela; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Rel Elf_Rel; + typedef typename ELFT::Rela Elf_Rela; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; const Elf_Shdr *Header; // The file this section is from. @@ -94,8 +94,8 @@ // and each piece is copied to a different place in the output. // This class represents such special sections. template class SplitInputSection : public InputSectionBase { - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::uint uintX_t; public: SplitInputSection(ObjectFile *File, const Elf_Shdr *Header, @@ -111,9 +111,9 @@ // This corresponds to a SHF_MERGE section of an input file. template class MergeInputSection : public SplitInputSection { - typedef typename llvm::object::ELFFile::uintX_t uintX_t; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; + typedef typename ELFT::uint uintX_t; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::Shdr Elf_Shdr; public: MergeInputSection(ObjectFile *F, const Elf_Shdr *Header); @@ -126,8 +126,8 @@ // This corresponds to a .eh_frame section of an input file. template class EHInputSection : public SplitInputSection { public: - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::uint uintX_t; EHInputSection(ObjectFile *F, const Elf_Shdr *Header); static bool classof(const InputSectionBase *S); @@ -143,11 +143,11 @@ template class InputSection : public InputSectionBase { friend ICF; typedef InputSectionBase Base; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Rela Elf_Rela; - typedef typename llvm::object::ELFFile::Elf_Rel Elf_Rel; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Rela Elf_Rela; + typedef typename ELFT::Rel Elf_Rel; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; public: InputSection(ObjectFile *F, const Elf_Shdr *Header); @@ -186,7 +186,7 @@ // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf template class MipsReginfoInputSection : public InputSectionBase { - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; + typedef typename ELFT::Shdr Elf_Shdr; public: MipsReginfoInputSection(ObjectFile *F, const Elf_Shdr *Hdr); Index: ELF/InputSection.cpp =================================================================== --- ELF/InputSection.cpp +++ ELF/InputSection.cpp @@ -48,8 +48,7 @@ } template -typename ELFFile::uintX_t -InputSectionBase::getOffset(uintX_t Offset) { +typename ELFT::uint InputSectionBase::getOffset(uintX_t Offset) { switch (SectionKind) { case Regular: return cast>(this)->OutSecOff + Offset; @@ -66,8 +65,7 @@ } template -typename ELFFile::uintX_t -InputSectionBase::getOffset(const Elf_Sym &Sym) { +typename ELFT::uint InputSectionBase::getOffset(const Elf_Sym &Sym) { return getOffset(Sym.st_value); } @@ -351,8 +349,7 @@ } template -typename EHInputSection::uintX_t -EHInputSection::getOffset(uintX_t Offset) { +typename ELFT::uint EHInputSection::getOffset(uintX_t Offset) { // The file crtbeginT.o has relocations pointing to the start of an empty // .eh_frame that is known to be the first in the link. It does that to // identify the start of the output .eh_frame. Handle this special case. @@ -378,9 +375,8 @@ } template -std::pair::uintX_t, - typename ELFFile::uintX_t> *, - typename ELFFile::uintX_t> +std::pair *, + typename ELFT::uint> SplitInputSection::getRangeAndSize(uintX_t Offset) { ArrayRef D = this->getSectionData(); StringRef Data((const char *)D.data(), D.size()); @@ -400,8 +396,7 @@ } template -typename MergeInputSection::uintX_t -MergeInputSection::getOffset(uintX_t Offset) { +typename ELFT::uint MergeInputSection::getOffset(uintX_t Offset) { std::pair *, uintX_t> T = this->getRangeAndSize(Offset); std::pair *I = T.first; Index: ELF/MarkLive.cpp =================================================================== --- ELF/MarkLive.cpp +++ ELF/MarkLive.cpp @@ -42,9 +42,9 @@ template static void forEachSuccessor(InputSection *Sec, std::function *)> Fn) { - typedef typename ELFFile::Elf_Rel Elf_Rel; - typedef typename ELFFile::Elf_Rela Elf_Rela; - typedef typename ELFFile::Elf_Shdr Elf_Shdr; + typedef typename ELFT::Rel Elf_Rel; + typedef typename ELFT::Rela Elf_Rela; + typedef typename ELFT::Shdr Elf_Shdr; ELFFile &Obj = Sec->getFile()->getObj(); for (const Elf_Shdr *RelSec : Sec->RelocSections) { Index: ELF/OutputSections.h =================================================================== --- ELF/OutputSections.h +++ ELF/OutputSections.h @@ -36,14 +36,12 @@ template class DefinedRegular; template -static inline typename llvm::object::ELFFile::uintX_t -getAddend(const typename llvm::object::ELFFile::Elf_Rel &Rel) { +static inline typename ELFT::uint getAddend(const typename ELFT::Rel &Rel) { return 0; } template -static inline typename llvm::object::ELFFile::uintX_t -getAddend(const typename llvm::object::ELFFile::Elf_Rela &Rel) { +static inline typename ELFT::uint getAddend(const typename ELFT::Rela &Rel) { return Rel.r_addend; } @@ -58,8 +56,8 @@ // non-overlapping file offsets and VAs. template class OutputSectionBase { public: - typedef typename llvm::object::ELFFile::uintX_t uintX_t; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; + typedef typename ELFT::uint uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; OutputSectionBase(StringRef Name, uint32_t Type, uintX_t Flags); void setVA(uintX_t VA) { Header.sh_addr = VA; } @@ -100,7 +98,7 @@ template class GotSection final : public OutputSectionBase { typedef OutputSectionBase Base; - typedef typename Base::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; public: GotSection(); @@ -139,7 +137,7 @@ template class GotPltSection final : public OutputSectionBase { - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; public: GotPltSection(); @@ -154,7 +152,7 @@ template class PltSection final : public OutputSectionBase { typedef OutputSectionBase Base; - typedef typename Base::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; public: PltSection(); @@ -168,7 +166,7 @@ }; template struct DynamicReloc { - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; uint32_t Type; // Where the relocation is. @@ -206,10 +204,10 @@ template class SymbolTableSection final : public OutputSectionBase { public: - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::Elf_Sym_Range Elf_Sym_Range; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::Sym_Range Elf_Sym_Range; + typedef typename ELFT::uint uintX_t; SymbolTableSection(SymbolTable &Table, StringTableSection &StrTabSec); @@ -241,9 +239,9 @@ template class RelocationSection final : public OutputSectionBase { - typedef typename llvm::object::ELFFile::Elf_Rel Elf_Rel; - typedef typename llvm::object::ELFFile::Elf_Rela Elf_Rela; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Rel Elf_Rel; + typedef typename ELFT::Rela Elf_Rela; + typedef typename ELFT::uint uintX_t; public: RelocationSection(StringRef Name, bool IsRela); @@ -264,11 +262,11 @@ template class OutputSection final : public OutputSectionBase { public: - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::Elf_Rel Elf_Rel; - typedef typename llvm::object::ELFFile::Elf_Rela Elf_Rela; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::Rel Elf_Rel; + typedef typename ELFT::Rela Elf_Rela; + typedef typename ELFT::uint uintX_t; OutputSection(StringRef Name, uint32_t Type, uintX_t Flags); void addSection(InputSectionBase *C) override; void sortInitFini(); @@ -283,7 +281,7 @@ template class MergeOutputSection final : public OutputSectionBase { - typedef typename OutputSectionBase::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; bool shouldTailMerge() const; @@ -301,7 +299,7 @@ // FDE or CIE template struct EHRegion { - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; EHRegion(EHInputSection *S, unsigned Index); StringRef data() const; EHInputSection *S; @@ -317,10 +315,10 @@ template class EHOutputSection final : public OutputSectionBase { public: - typedef typename llvm::object::ELFFile::uintX_t uintX_t; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Rel Elf_Rel; - typedef typename llvm::object::ELFFile::Elf_Rela Elf_Rela; + typedef typename ELFT::uint uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Rel Elf_Rel; + typedef typename ELFT::Rela Elf_Rela; EHOutputSection(StringRef Name, uint32_t Type, uintX_t Flags); void writeTo(uint8_t *Buf) override; @@ -350,7 +348,7 @@ template class StringTableSection final : public OutputSectionBase { public: - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; StringTableSection(StringRef Name, bool Dynamic); unsigned addString(StringRef S, bool HashIt = true); void writeTo(uint8_t *Buf) override; @@ -367,7 +365,7 @@ template class HashTableSection final : public OutputSectionBase { - typedef typename llvm::object::ELFFile::Elf_Word Elf_Word; + typedef typename ELFT::Word Elf_Word; public: HashTableSection(); @@ -379,9 +377,9 @@ // https://blogs.oracle.com/ali/entry/gnu_hash_elf_sections template class GnuHashTableSection final : public OutputSectionBase { - typedef typename llvm::object::ELFFile::Elf_Off Elf_Off; - typedef typename llvm::object::ELFFile::Elf_Word Elf_Word; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Off Elf_Off; + typedef typename ELFT::Word Elf_Word; + typedef typename ELFT::uint uintX_t; public: GnuHashTableSection(); @@ -416,12 +414,12 @@ template class DynamicSection final : public OutputSectionBase { typedef OutputSectionBase Base; - typedef typename llvm::object::ELFFile::Elf_Dyn Elf_Dyn; - typedef typename llvm::object::ELFFile::Elf_Rel Elf_Rel; - typedef typename llvm::object::ELFFile::Elf_Rela Elf_Rela; - typedef typename llvm::object::ELFFile::Elf_Shdr Elf_Shdr; - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Dyn Elf_Dyn; + typedef typename ELFT::Rel Elf_Rel; + typedef typename ELFT::Rela Elf_Rela; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; // The .dynamic section contains information for the dynamic linker. // The section consists of fixed size entries, which consist of @@ -484,7 +482,7 @@ // http://www.airs.com/blog/archives/462 (".eh_frame_hdr") template class EhFrameHeader final : public OutputSectionBase { - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; public: EhFrameHeader(); @@ -526,8 +524,8 @@ // globally accessible. Writer initializes them, so don't use them // until Writer is initialized. template struct Out { - typedef typename llvm::object::ELFFile::uintX_t uintX_t; - typedef typename llvm::object::ELFFile::Elf_Phdr Elf_Phdr; + typedef typename ELFT::uint uintX_t; + typedef typename ELFT::Phdr Elf_Phdr; static BuildIdSection *BuildId; static DynamicSection *Dynamic; static EhFrameHeader *EhFrameHdr; @@ -573,7 +571,7 @@ template StringTableSection *Out::StrTab; template SymbolTableSection *Out::DynSymTab; template SymbolTableSection *Out::SymTab; -template typename Out::Elf_Phdr *Out::TlsPhdr; +template typename ELFT::Phdr *Out::TlsPhdr; template OutputSectionBase *Out::ElfHeader; template OutputSectionBase *Out::ProgramHeaders; Index: ELF/OutputSections.cpp =================================================================== --- ELF/OutputSections.cpp +++ ELF/OutputSections.cpp @@ -244,7 +244,7 @@ } template -typename ELFFile::uintX_t DynamicReloc::getOffset() const { +typename ELFT::uint DynamicReloc::getOffset() const { switch (OKind) { case Off_GTlsIndex: return Out::Got->getGlobalDynAddr(*Sym); @@ -1058,7 +1058,7 @@ } template -static typename ELFFile::uintX_t readEntryLength(ArrayRef D) { +static typename ELFT::uint readEntryLength(ArrayRef D) { const endianness E = ELFT::TargetEndianness; if (D.size() < 4) fatal("CIE/FDE too small"); @@ -1171,9 +1171,8 @@ } template -static typename ELFFile::uintX_t writeAlignedCieOrFde(StringRef Data, - uint8_t *Buf) { - typedef typename ELFFile::uintX_t uintX_t; +static typename ELFT::uint writeAlignedCieOrFde(StringRef Data, uint8_t *Buf) { + typedef typename ELFT::uint uintX_t; const endianness E = ELFT::TargetEndianness; uint64_t Len = alignTo(Data.size(), sizeof(uintX_t)); write32(Buf, Len - 4); @@ -1432,8 +1431,7 @@ } template -static const typename llvm::object::ELFFile::Elf_Sym * -getElfSym(SymbolBody &Body) { +static const typename ELFT::Sym *getElfSym(SymbolBody &Body) { if (auto *EBody = dyn_cast>(&Body)) return &EBody->Sym; if (auto *EBody = dyn_cast>(&Body)) Index: ELF/SymbolTable.h =================================================================== --- ELF/SymbolTable.h +++ ELF/SymbolTable.h @@ -35,8 +35,8 @@ // undefined, it'll read an archive member to read a real definition // to replace the lazy symbol. The logic is implemented in resolve(). template class SymbolTable { - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; public: void addFile(std::unique_ptr File); Index: ELF/Symbols.h =================================================================== --- ELF/Symbols.h +++ ELF/Symbols.h @@ -46,8 +46,6 @@ // The base class for real symbol classes. class SymbolBody { - template using ELFFile = llvm::object::ELFFile; - public: enum Kind { DefinedFirst, @@ -92,13 +90,13 @@ bool isInGot() const { return GotIndex != -1U; } bool isInPlt() const { return PltIndex != -1U; } - template typename ELFFile::uintX_t - getVA(typename ELFFile::uintX_t Addend = 0) const; + template + typename ELFT::uint getVA(typename ELFT::uint Addend = 0) const; - template typename ELFFile::uintX_t getGotVA() const; - template typename ELFFile::uintX_t getGotPltVA() const; - template typename ELFFile::uintX_t getPltVA() const; - template typename ELFFile::uintX_t getSize() const; + template typename ELFT::uint getGotVA() const; + template typename ELFT::uint getGotPltVA() const; + template typename ELFT::uint getPltVA() const; + template typename ELFT::uint getSize() const; // A SymbolBody has a backreference to a Symbol. Originally they are // doubly-linked. A backreference will never change. But the pointer @@ -163,7 +161,7 @@ // Any defined symbol from an ELF file. template class DefinedElf : public Defined { protected: - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; + typedef typename ELFT::Sym Elf_Sym; public: DefinedElf(Kind K, StringRef N, const Elf_Sym &Sym) @@ -205,7 +203,7 @@ // Regular defined symbols read from object file symbol tables. template class DefinedRegular : public DefinedElf { - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; + typedef typename ELFT::Sym Elf_Sym; public: DefinedRegular(StringRef N, const Elf_Sym &Sym, @@ -238,8 +236,8 @@ // takes an output section to calculate output VA, etc. template class DefinedSynthetic : public Defined { public: - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; DefinedSynthetic(StringRef N, uintX_t Value, OutputSectionBase &Section, uint8_t Visibility); @@ -269,7 +267,7 @@ }; template class UndefinedElf : public Undefined { - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; + typedef typename ELFT::Sym Elf_Sym; public: UndefinedElf(StringRef N, const Elf_Sym &Sym); @@ -281,8 +279,8 @@ }; template class SharedSymbol : public DefinedElf { - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; - typedef typename llvm::object::ELFFile::uintX_t uintX_t; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; public: static bool classof(const SymbolBody *S) { @@ -330,7 +328,7 @@ // DefinedRegular symbols, so they need Elf_Sym symbols. // Here we allocate such Elf_Sym symbols statically. template struct ElfSym { - typedef typename llvm::object::ELFFile::Elf_Sym Elf_Sym; + typedef typename ELFT::Sym Elf_Sym; // Used to represent an undefined symbol which we don't want to add to the // output file's symbol table. It has weak binding and can be substituted. Index: ELF/Symbols.cpp =================================================================== --- ELF/Symbols.cpp +++ ELF/Symbols.cpp @@ -29,10 +29,10 @@ using namespace lld::elf; template -static typename ELFFile::uintX_t -getSymVA(const SymbolBody &Body, typename ELFFile::uintX_t &Addend) { - typedef typename ELFFile::Elf_Sym Elf_Sym; - typedef typename ELFFile::uintX_t uintX_t; +static typename ELFT::uint getSymVA(const SymbolBody &Body, + typename ELFT::uint &Addend) { + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::uint uintX_t; switch (Body.kind()) { case SymbolBody::DefinedSyntheticKind: { @@ -88,32 +88,26 @@ } template -typename ELFFile::uintX_t -SymbolBody::getVA(typename ELFFile::uintX_t Addend) const { +typename ELFT::uint SymbolBody::getVA(typename ELFT::uint Addend) const { return getSymVA(*this, Addend) + Addend; } -template -typename ELFFile::uintX_t SymbolBody::getGotVA() const { +template typename ELFT::uint SymbolBody::getGotVA() const { return Out::Got->getVA() + (Out::Got->getMipsLocalEntriesNum() + GotIndex) * - sizeof(typename ELFFile::uintX_t); + sizeof(typename ELFT::uint); } -template -typename ELFFile::uintX_t SymbolBody::getGotPltVA() const { - return Out::GotPlt->getVA() + - GotPltIndex * sizeof(typename ELFFile::uintX_t); +template typename ELFT::uint SymbolBody::getGotPltVA() const { + return Out::GotPlt->getVA() + GotPltIndex * sizeof(typename ELFT::uint); } -template -typename ELFFile::uintX_t SymbolBody::getPltVA() const { +template typename ELFT::uint SymbolBody::getPltVA() const { return Out::Plt->getVA() + Target->PltZeroSize + PltIndex * Target->PltEntrySize; } -template -typename ELFFile::uintX_t SymbolBody::getSize() const { +template typename ELFT::uint SymbolBody::getSize() const { if (auto *B = dyn_cast>(this)) return B->Sym.st_size; return 0; Index: ELF/Target.h =================================================================== --- ELF/Target.h +++ ELF/Target.h @@ -104,8 +104,7 @@ uint64_t getPPC64TocBase(); -template -typename llvm::object::ELFFile::uintX_t getMipsGpAddr(); +template typename ELFT::uint getMipsGpAddr(); template bool isGnuIFunc(const SymbolBody &S); Index: ELF/Target.cpp =================================================================== --- ELF/Target.cpp +++ ELF/Target.cpp @@ -1578,8 +1578,8 @@ template void MipsTargetInfo::writeGotHeader(uint8_t *Buf) const { - typedef typename ELFFile::Elf_Off Elf_Off; - typedef typename ELFFile::uintX_t uintX_t; + typedef typename ELFT::Off Elf_Off; + typedef typename ELFT::uint uintX_t; // Set the MSB of the second GOT slot. This is not required by any // MIPS ABI documentation, though. @@ -1793,7 +1793,7 @@ // _gp is a MIPS-specific ABI-defined symbol which points to // a location that is relative to GOT. This function returns // the value for the symbol. -template typename ELFFile::uintX_t getMipsGpAddr() { +template typename ELFT::uint getMipsGpAddr() { unsigned GPOffset = 0x7ff0; if (uint64_t V = Out::Got->getVA()) return V + GPOffset; Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -32,13 +32,13 @@ // The writer writes a SymbolTable result to a file. template class Writer { public: - typedef typename ELFFile::uintX_t uintX_t; - typedef typename ELFFile::Elf_Shdr Elf_Shdr; - typedef typename ELFFile::Elf_Ehdr Elf_Ehdr; - typedef typename ELFFile::Elf_Phdr Elf_Phdr; - typedef typename ELFFile::Elf_Sym Elf_Sym; - typedef typename ELFFile::Elf_Sym_Range Elf_Sym_Range; - typedef typename ELFFile::Elf_Rela Elf_Rela; + typedef typename ELFT::uint uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::Ehdr Elf_Ehdr; + typedef typename ELFT::Phdr Elf_Phdr; + typedef typename ELFT::Sym Elf_Sym; + typedef typename ELFT::Sym_Range Elf_Sym_Range; + typedef typename ELFT::Rela Elf_Rela; Writer(SymbolTable &S) : Symtab(S) {} void run(); @@ -127,7 +127,7 @@ template static bool shouldUseRela() { return ELFT::Is64Bits; } template void elf::writeResult(SymbolTable *Symtab) { - typedef typename ELFFile::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; // Create singleton output sections. bool IsRela = shouldUseRela(); @@ -520,7 +520,7 @@ template static bool shouldKeepInSymtab(const elf::ObjectFile &File, StringRef SymName, - const typename ELFFile::Elf_Sym &Sym) { + const typename ELFT::Sym &Sym) { if (Sym.getType() == STT_FILE) return false; @@ -618,7 +618,7 @@ template static bool compareSections(OutputSectionBase *A, OutputSectionBase *B) { - typedef typename ELFFile::uintX_t uintX_t; + typedef typename ELFT::uint uintX_t; int Comp = Script->compareSections(A->getName(), B->getName()); if (Comp != 0) @@ -835,8 +835,8 @@ // linker scripts. namespace { template class OutputSectionFactory { - typedef typename ELFFile::Elf_Shdr Elf_Shdr; - typedef typename ELFFile::uintX_t uintX_t; + typedef typename ELFT::Shdr Elf_Shdr; + typedef typename ELFT::uint uintX_t; public: std::pair *, bool> create(InputSectionBase *C, @@ -1436,8 +1436,7 @@ return V; } -template -static typename ELFFile::uintX_t getEntryAddr() { +template static typename ELFT::uint getEntryAddr() { if (SymbolBody *B = Config->EntrySym) return B->repl().getVA(); if (Config->EntryAddr != uint64_t(-1))