[lld] r296313 - De-template SyntheticSection.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 26 18:56:02 PST 2017
Author: ruiu
Date: Sun Feb 26 20:56:02 2017
New Revision: 296313
URL: http://llvm.org/viewvc/llvm-project?rev=296313&view=rev
Log:
De-template SyntheticSection.
This class didn't use ELFT.
Modified:
lld/trunk/ELF/InputSection.cpp
lld/trunk/ELF/LinkerScript.cpp
lld/trunk/ELF/OutputSections.cpp
lld/trunk/ELF/SyntheticSections.cpp
lld/trunk/ELF/SyntheticSections.h
lld/trunk/ELF/Writer.cpp
Modified: lld/trunk/ELF/InputSection.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=296313&r1=296312&r2=296313&view=diff
==============================================================================
--- lld/trunk/ELF/InputSection.cpp (original)
+++ lld/trunk/ELF/InputSection.cpp Sun Feb 26 20:56:02 2017
@@ -88,7 +88,7 @@ InputSectionBase::InputSectionBase(elf::
}
template <class ELFT> size_t InputSectionBase::getSize() const {
- if (auto *S = dyn_cast<SyntheticSection<ELFT>>(this))
+ if (auto *S = dyn_cast<SyntheticSection>(this))
return S->getSize();
return Data.size();
@@ -545,7 +545,7 @@ template <class ELFT> void InputSection:
if (this->Type == SHT_NOBITS)
return;
- if (auto *S = dyn_cast<SyntheticSection<ELFT>>(this)) {
+ if (auto *S = dyn_cast<SyntheticSection>(this)) {
S->writeTo(Buf + OutSecOff);
return;
}
Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=296313&r1=296312&r2=296313&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Sun Feb 26 20:56:02 2017
@@ -490,7 +490,7 @@ template <class ELFT> void LinkerScript<
// empty ones afterwards (because there is no way to know whether they were
// going be empty or not other than actually running linker scripts.)
// We need to ignore remains of empty sections.
- if (auto *Sec = dyn_cast<SyntheticSection<ELFT>>(ID))
+ if (auto *Sec = dyn_cast<SyntheticSection>(ID))
if (Sec->empty())
continue;
Modified: lld/trunk/ELF/OutputSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=296313&r1=296312&r2=296313&view=diff
==============================================================================
--- lld/trunk/ELF/OutputSections.cpp (original)
+++ lld/trunk/ELF/OutputSections.cpp Sun Feb 26 20:56:02 2017
@@ -137,7 +137,7 @@ template <class ELFT> void OutputSection
return;
InputSection *First = Sections[0];
- if (isa<SyntheticSection<ELFT>>(First))
+ if (isa<SyntheticSection>(First))
return;
this->Link = In<ELFT>::SymTab->OutSec->SectionIndex;
Modified: lld/trunk/ELF/SyntheticSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.cpp?rev=296313&r1=296312&r2=296313&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.cpp (original)
+++ lld/trunk/ELF/SyntheticSections.cpp Sun Feb 26 20:56:02 2017
@@ -45,6 +45,12 @@ using namespace llvm::support::endian;
using namespace lld;
using namespace lld::elf;
+uint64_t SyntheticSection::getVA() const {
+ if (this->OutSec)
+ return this->OutSec->Addr + this->OutSecOff;
+ return 0;
+}
+
template <class ELFT> static std::vector<DefinedCommon *> getCommonSymbols() {
std::vector<DefinedCommon *> V;
for (Symbol *S : Symtab<ELFT>::X->getSymbols())
@@ -118,7 +124,7 @@ template <class ELFT> MergeInputSection<
// .MIPS.abiflags section.
template <class ELFT>
MipsAbiFlagsSection<ELFT>::MipsAbiFlagsSection(Elf_Mips_ABIFlags Flags)
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_MIPS_ABIFLAGS, 8, ".MIPS.abiflags"),
+ : SyntheticSection(SHF_ALLOC, SHT_MIPS_ABIFLAGS, 8, ".MIPS.abiflags"),
Flags(Flags) {}
template <class ELFT> void MipsAbiFlagsSection<ELFT>::writeTo(uint8_t *Buf) {
@@ -175,7 +181,7 @@ MipsAbiFlagsSection<ELFT> *MipsAbiFlagsS
// .MIPS.options section.
template <class ELFT>
MipsOptionsSection<ELFT>::MipsOptionsSection(Elf_Mips_RegInfo Reginfo)
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_MIPS_OPTIONS, 8, ".MIPS.options"),
+ : SyntheticSection(SHF_ALLOC, SHT_MIPS_OPTIONS, 8, ".MIPS.options"),
Reginfo(Reginfo) {}
template <class ELFT> void MipsOptionsSection<ELFT>::writeTo(uint8_t *Buf) {
@@ -235,7 +241,7 @@ MipsOptionsSection<ELFT> *MipsOptionsSec
// MIPS .reginfo section.
template <class ELFT>
MipsReginfoSection<ELFT>::MipsReginfoSection(Elf_Mips_RegInfo Reginfo)
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_MIPS_REGINFO, 4, ".reginfo"),
+ : SyntheticSection(SHF_ALLOC, SHT_MIPS_REGINFO, 4, ".reginfo"),
Reginfo(Reginfo) {}
template <class ELFT> void MipsReginfoSection<ELFT>::writeTo(uint8_t *Buf) {
@@ -317,7 +323,7 @@ static size_t getHashSize() {
template <class ELFT>
BuildIdSection<ELFT>::BuildIdSection()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_NOTE, 1, ".note.gnu.build-id"),
+ : SyntheticSection(SHF_ALLOC, SHT_NOTE, 1, ".note.gnu.build-id"),
HashSize(getHashSize()) {}
template <class ELFT> void BuildIdSection<ELFT>::writeTo(uint8_t *Buf) {
@@ -363,8 +369,8 @@ void BuildIdSection<ELFT>::computeHash(
template <class ELFT>
CopyRelSection<ELFT>::CopyRelSection(bool ReadOnly, uintX_t AddrAlign, size_t S)
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_NOBITS, AddrAlign,
- ReadOnly ? ".bss.rel.ro" : ".bss"),
+ : SyntheticSection(SHF_ALLOC, SHT_NOBITS, AddrAlign,
+ ReadOnly ? ".bss.rel.ro" : ".bss"),
Size(S) {
if (!ReadOnly)
this->Flags |= SHF_WRITE;
@@ -402,7 +408,7 @@ void BuildIdSection<ELFT>::writeBuildId(
template <class ELFT>
EhFrameSection<ELFT>::EhFrameSection()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_PROGBITS, 1, ".eh_frame") {}
+ : SyntheticSection(SHF_ALLOC, SHT_PROGBITS, 1, ".eh_frame") {}
// Search for an existing CIE record or create a new one.
// CIE records from input object files are uniquified by their contents
@@ -606,8 +612,8 @@ template <class ELFT> void EhFrameSectio
template <class ELFT>
GotSection<ELFT>::GotSection()
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
- Target->GotEntrySize, ".got") {}
+ : SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
+ Target->GotEntrySize, ".got") {}
template <class ELFT> void GotSection<ELFT>::addEntry(SymbolBody &Sym) {
Sym.GotIndex = NumEntries;
@@ -661,8 +667,8 @@ template <class ELFT> void GotSection<EL
template <class ELFT>
MipsGotSection<ELFT>::MipsGotSection()
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL,
- SHT_PROGBITS, 16, ".got") {}
+ : SyntheticSection(SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL, SHT_PROGBITS, 16,
+ ".got") {}
template <class ELFT>
void MipsGotSection<ELFT>::addEntry(SymbolBody &Sym, int64_t Addend,
@@ -922,8 +928,8 @@ template <class ELFT> void MipsGotSectio
template <class ELFT>
GotPltSection<ELFT>::GotPltSection()
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
- Target->GotPltEntrySize, ".got.plt") {}
+ : SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
+ Target->GotPltEntrySize, ".got.plt") {}
template <class ELFT> void GotPltSection<ELFT>::addEntry(SymbolBody &Sym) {
Sym.GotPltIndex = Target->GotPltHeaderEntriesNum + Entries.size();
@@ -948,10 +954,9 @@ template <class ELFT> void GotPltSection
// part of the .got.plt
template <class ELFT>
IgotPltSection<ELFT>::IgotPltSection()
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
- Target->GotPltEntrySize,
- Config->EMachine == EM_ARM ? ".got" : ".got.plt") {
-}
+ : SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
+ Target->GotPltEntrySize,
+ Config->EMachine == EM_ARM ? ".got" : ".got.plt") {}
template <class ELFT> void IgotPltSection<ELFT>::addEntry(SymbolBody &Sym) {
Sym.IsInIgot = true;
@@ -972,8 +977,7 @@ template <class ELFT> void IgotPltSectio
template <class ELFT>
StringTableSection<ELFT>::StringTableSection(StringRef Name, bool Dynamic)
- : SyntheticSection<ELFT>(Dynamic ? (uintX_t)SHF_ALLOC : 0, SHT_STRTAB, 1,
- Name),
+ : SyntheticSection(Dynamic ? (uintX_t)SHF_ALLOC : 0, SHT_STRTAB, 1, Name),
Dynamic(Dynamic) {
// ELF string tables start with a NUL byte.
addString("");
@@ -1010,8 +1014,8 @@ static unsigned getVerDefNum() { return
template <class ELFT>
DynamicSection<ELFT>::DynamicSection()
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_WRITE, SHT_DYNAMIC,
- sizeof(uintX_t), ".dynamic") {
+ : SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_DYNAMIC, sizeof(uintX_t),
+ ".dynamic") {
this->Entsize = ELFT::Is64Bits ? 16 : 8;
// .dynamic section is not writable on MIPS.
// See "Special Section" in Chapter 4 in the following document:
@@ -1199,8 +1203,8 @@ template <class ELFT> uint32_t DynamicRe
template <class ELFT>
RelocationSection<ELFT>::RelocationSection(StringRef Name, bool Sort)
- : SyntheticSection<ELFT>(SHF_ALLOC, Config->Rela ? SHT_RELA : SHT_REL,
- sizeof(uintX_t), Name),
+ : SyntheticSection(SHF_ALLOC, Config->Rela ? SHT_RELA : SHT_REL,
+ sizeof(uintX_t), Name),
Sort(Sort) {
this->Entsize = Config->Rela ? sizeof(Elf_Rela) : sizeof(Elf_Rel);
}
@@ -1266,10 +1270,10 @@ template <class ELFT> void RelocationSec
template <class ELFT>
SymbolTableSection<ELFT>::SymbolTableSection(
StringTableSection<ELFT> &StrTabSec)
- : SyntheticSection<ELFT>(StrTabSec.isDynamic() ? (uintX_t)SHF_ALLOC : 0,
- StrTabSec.isDynamic() ? SHT_DYNSYM : SHT_SYMTAB,
- sizeof(uintX_t),
- StrTabSec.isDynamic() ? ".dynsym" : ".symtab"),
+ : SyntheticSection(StrTabSec.isDynamic() ? (uintX_t)SHF_ALLOC : 0,
+ StrTabSec.isDynamic() ? SHT_DYNSYM : SHT_SYMTAB,
+ sizeof(uintX_t),
+ StrTabSec.isDynamic() ? ".dynsym" : ".symtab"),
StrTabSec(StrTabSec) {
this->Entsize = sizeof(Elf_Sym);
}
@@ -1470,8 +1474,7 @@ SymbolTableSection<ELFT>::getOutputSecti
template <class ELFT>
GnuHashTableSection<ELFT>::GnuHashTableSection()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_GNU_HASH, sizeof(uintX_t),
- ".gnu.hash") {
+ : SyntheticSection(SHF_ALLOC, SHT_GNU_HASH, sizeof(uintX_t), ".gnu.hash") {
this->Entsize = ELFT::Is64Bits ? 0 : 4;
}
@@ -1618,7 +1621,7 @@ void GnuHashTableSection<ELFT>::addSymbo
template <class ELFT>
HashTableSection<ELFT>::HashTableSection()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_HASH, sizeof(Elf_Word), ".hash") {
+ : SyntheticSection(SHF_ALLOC, SHT_HASH, sizeof(Elf_Word), ".hash") {
this->Entsize = sizeof(Elf_Word);
}
@@ -1657,8 +1660,7 @@ template <class ELFT> void HashTableSect
template <class ELFT>
PltSection<ELFT>::PltSection(size_t S)
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_EXECINSTR, SHT_PROGBITS, 16,
- ".plt"),
+ : SyntheticSection(SHF_ALLOC | SHF_EXECINSTR, SHT_PROGBITS, 16, ".plt"),
HeaderSize(S) {}
template <class ELFT> void PltSection<ELFT>::writeTo(uint8_t *Buf) {
@@ -1714,7 +1716,7 @@ template <class ELFT> unsigned PltSectio
template <class ELFT>
GdbIndexSection<ELFT>::GdbIndexSection()
- : SyntheticSection<ELFT>(0, SHT_PROGBITS, 1, ".gdb_index"),
+ : SyntheticSection(0, SHT_PROGBITS, 1, ".gdb_index"),
StringPool(llvm::StringTableBuilder::ELF) {}
template <class ELFT> void GdbIndexSection<ELFT>::parseDebugSections() {
@@ -1858,7 +1860,7 @@ template <class ELFT> bool GdbIndexSecti
template <class ELFT>
EhFrameHeader<ELFT>::EhFrameHeader()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_PROGBITS, 1, ".eh_frame_hdr") {}
+ : SyntheticSection(SHF_ALLOC, SHT_PROGBITS, 1, ".eh_frame_hdr") {}
// .eh_frame_hdr contains a binary search table of pointers to FDEs.
// Each entry of the search table consists of two values,
@@ -1907,8 +1909,8 @@ template <class ELFT> bool EhFrameHeader
template <class ELFT>
VersionDefinitionSection<ELFT>::VersionDefinitionSection()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_GNU_verdef, sizeof(uint32_t),
- ".gnu.version_d") {}
+ : SyntheticSection(SHF_ALLOC, SHT_GNU_verdef, sizeof(uint32_t),
+ ".gnu.version_d") {}
static StringRef getFileDefName() {
if (!Config->SoName.empty())
@@ -1966,8 +1968,8 @@ template <class ELFT> size_t VersionDefi
template <class ELFT>
VersionTableSection<ELFT>::VersionTableSection()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_GNU_versym, sizeof(uint16_t),
- ".gnu.version") {}
+ : SyntheticSection(SHF_ALLOC, SHT_GNU_versym, sizeof(uint16_t),
+ ".gnu.version") {}
template <class ELFT> void VersionTableSection<ELFT>::finalize() {
this->OutSec->Entsize = this->Entsize = sizeof(Elf_Versym);
@@ -1994,8 +1996,8 @@ template <class ELFT> bool VersionTableS
template <class ELFT>
VersionNeedSection<ELFT>::VersionNeedSection()
- : SyntheticSection<ELFT>(SHF_ALLOC, SHT_GNU_verneed, sizeof(uint32_t),
- ".gnu.version_r") {
+ : SyntheticSection(SHF_ALLOC, SHT_GNU_verneed, sizeof(uint32_t),
+ ".gnu.version_r") {
// Identifiers in verneed section start at 2 because 0 and 1 are reserved
// for VER_NDX_LOCAL and VER_NDX_GLOBAL.
// First identifiers are reserved by verdef section if it exist.
@@ -2084,7 +2086,7 @@ template <class ELFT>
MergeSyntheticSection<ELFT>::MergeSyntheticSection(StringRef Name,
uint32_t Type, uintX_t Flags,
uintX_t Alignment)
- : SyntheticSection<ELFT>(Flags, Type, Alignment, Name),
+ : SyntheticSection(Flags, Type, Alignment, Name),
Builder(StringTableBuilder::RAW, Alignment) {}
template <class ELFT>
@@ -2154,8 +2156,8 @@ template <class ELFT> size_t MergeSynthe
template <class ELFT>
MipsRldMapSection<ELFT>::MipsRldMapSection()
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
- sizeof(typename ELFT::uint), ".rld_map") {}
+ : SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
+ sizeof(typename ELFT::uint), ".rld_map") {}
template <class ELFT> void MipsRldMapSection<ELFT>::writeTo(uint8_t *Buf) {
// Apply filler from linker script.
@@ -2166,8 +2168,8 @@ template <class ELFT> void MipsRldMapSec
template <class ELFT>
ARMExidxSentinelSection<ELFT>::ARMExidxSentinelSection()
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_LINK_ORDER, SHT_ARM_EXIDX,
- sizeof(typename ELFT::uint), ".ARM.exidx") {}
+ : SyntheticSection(SHF_ALLOC | SHF_LINK_ORDER, SHT_ARM_EXIDX,
+ sizeof(typename ELFT::uint), ".ARM.exidx") {}
// Write a terminating sentinel entry to the end of the .ARM.exidx table.
// This section will have been sorted last in the .ARM.exidx table.
@@ -2188,8 +2190,8 @@ void ARMExidxSentinelSection<ELFT>::writ
template <class ELFT>
ThunkSection<ELFT>::ThunkSection(OutputSection *OS, uint64_t Off)
- : SyntheticSection<ELFT>(SHF_ALLOC | SHF_EXECINSTR, SHT_PROGBITS,
- sizeof(typename ELFT::uint), ".text.thunk") {
+ : SyntheticSection(SHF_ALLOC | SHF_EXECINSTR, SHT_PROGBITS,
+ sizeof(typename ELFT::uint), ".text.thunk") {
this->OutSec = OS;
this->OutSecOff = Off;
}
Modified: lld/trunk/ELF/SyntheticSections.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.h?rev=296313&r1=296312&r2=296313&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.h (original)
+++ lld/trunk/ELF/SyntheticSections.h Sun Feb 26 20:56:02 2017
@@ -30,11 +30,9 @@
namespace lld {
namespace elf {
-template <class ELFT> class SyntheticSection : public InputSection {
- typedef typename ELFT::uint uintX_t;
-
+class SyntheticSection : public InputSection {
public:
- SyntheticSection(uintX_t Flags, uint32_t Type, uintX_t Addralign,
+ SyntheticSection(uint64_t Flags, uint32_t Type, uint64_t Addralign,
StringRef Name)
: InputSection(Flags, Type, Addralign, {}, Name,
InputSectionBase::Synthetic) {
@@ -46,10 +44,7 @@ public:
virtual size_t getSize() const = 0;
virtual void finalize() {}
virtual bool empty() const { return false; }
-
- uintX_t getVA() const {
- return this->OutSec ? this->OutSec->Addr + this->OutSecOff : 0;
- }
+ uint64_t getVA() const;
static bool classof(const InputSectionBase *D) {
return D->kind() == InputSectionBase::Synthetic;
@@ -62,8 +57,7 @@ struct CieRecord {
};
// Section for .eh_frame.
-template <class ELFT>
-class EhFrameSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class EhFrameSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
typedef typename ELFT::Shdr Elf_Shdr;
typedef typename ELFT::Rel Elf_Rel;
@@ -105,7 +99,7 @@ private:
llvm::DenseMap<std::pair<ArrayRef<uint8_t>, SymbolBody *>, CieRecord> CieMap;
};
-template <class ELFT> class GotSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class GotSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
public:
@@ -135,7 +129,7 @@ private:
};
// .note.gnu.build-id section.
-template <class ELFT> class BuildIdSection : public SyntheticSection<ELFT> {
+template <class ELFT> class BuildIdSection : public SyntheticSection {
// First 16 bytes are a header.
static const unsigned HeaderSize = 16;
@@ -155,8 +149,7 @@ private:
// For each copy relocation, we create an instance of this class to
// reserve space in .bss or .bss.rel.ro.
-template <class ELFT>
-class CopyRelSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class CopyRelSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
public:
@@ -166,8 +159,7 @@ public:
size_t Size;
};
-template <class ELFT>
-class MipsGotSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class MipsGotSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
public:
@@ -266,8 +258,7 @@ private:
uintX_t Size = 0;
};
-template <class ELFT>
-class GotPltSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class GotPltSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
public:
@@ -285,8 +276,7 @@ private:
// Symbols that will be relocated by Target->IRelativeRel.
// On most Targets the IgotPltSection will immediately follow the GotPltSection
// on ARM the IgotPltSection will immediately follow the GotSection.
-template <class ELFT>
-class IgotPltSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class IgotPltSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
public:
@@ -300,8 +290,7 @@ private:
std::vector<const SymbolBody *> Entries;
};
-template <class ELFT>
-class StringTableSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class StringTableSection final : public SyntheticSection {
public:
typedef typename ELFT::uint uintX_t;
StringTableSection(StringRef Name, bool Dynamic);
@@ -344,8 +333,7 @@ private:
int64_t Addend;
};
-template <class ELFT>
-class DynamicSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class DynamicSection final : public SyntheticSection {
typedef typename ELFT::Dyn Elf_Dyn;
typedef typename ELFT::Rel Elf_Rel;
typedef typename ELFT::Rela Elf_Rela;
@@ -392,8 +380,7 @@ private:
uintX_t Size = 0;
};
-template <class ELFT>
-class RelocationSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class RelocationSection final : public SyntheticSection {
typedef typename ELFT::Rel Elf_Rel;
typedef typename ELFT::Rela Elf_Rela;
typedef typename ELFT::uint uintX_t;
@@ -419,8 +406,7 @@ struct SymbolTableEntry {
size_t StrTabOffset;
};
-template <class ELFT>
-class SymbolTableSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class SymbolTableSection final : public SyntheticSection {
public:
typedef typename ELFT::Shdr Elf_Shdr;
typedef typename ELFT::Sym Elf_Sym;
@@ -456,7 +442,7 @@ private:
// Outputs GNU Hash section. For detailed explanation see:
// https://blogs.oracle.com/ali/entry/gnu_hash_elf_sections
template <class ELFT>
-class GnuHashTableSection final : public SyntheticSection<ELFT> {
+class GnuHashTableSection final : public SyntheticSection {
typedef typename ELFT::Off Elf_Off;
typedef typename ELFT::Word Elf_Word;
typedef typename ELFT::uint uintX_t;
@@ -493,8 +479,7 @@ private:
uintX_t Size = 0;
};
-template <class ELFT>
-class HashTableSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class HashTableSection final : public SyntheticSection {
typedef typename ELFT::Word Elf_Word;
public:
@@ -511,7 +496,7 @@ private:
// header as its first entry that is used at run-time to resolve lazy binding.
// The latter is used for GNU Ifunc symbols, that will be subject to a
// Target->IRelativeRel.
-template <class ELFT> class PltSection : public SyntheticSection<ELFT> {
+template <class ELFT> class PltSection : public SyntheticSection {
public:
PltSection(size_t HeaderSize);
void writeTo(uint8_t *Buf) override;
@@ -529,8 +514,7 @@ private:
size_t HeaderSize;
};
-template <class ELFT>
-class GdbIndexSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class GdbIndexSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
const unsigned OffsetTypeSize = 4;
@@ -582,8 +566,7 @@ private:
// Detailed info about internals can be found in Ian Lance Taylor's blog:
// http://www.airs.com/blog/archives/460 (".eh_frame")
// http://www.airs.com/blog/archives/462 (".eh_frame_hdr")
-template <class ELFT>
-class EhFrameHeader final : public SyntheticSection<ELFT> {
+template <class ELFT> class EhFrameHeader final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
public:
@@ -611,7 +594,7 @@ private:
// The section shall contain an array of Elf_Verdef structures, optionally
// followed by an array of Elf_Verdaux structures.
template <class ELFT>
-class VersionDefinitionSection final : public SyntheticSection<ELFT> {
+class VersionDefinitionSection final : public SyntheticSection {
typedef typename ELFT::Verdef Elf_Verdef;
typedef typename ELFT::Verdaux Elf_Verdaux;
@@ -634,7 +617,7 @@ private:
// The values 0 and 1 are reserved. All other values are used for versions in
// the own object or in any of the dependencies.
template <class ELFT>
-class VersionTableSection final : public SyntheticSection<ELFT> {
+class VersionTableSection final : public SyntheticSection {
typedef typename ELFT::Versym Elf_Versym;
public:
@@ -650,8 +633,7 @@ public:
// Elf_Verneed specifies the version requirements for a single DSO, and contains
// a reference to a linked list of Elf_Vernaux data structures which define the
// mapping from version identifiers to version names.
-template <class ELFT>
-class VersionNeedSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class VersionNeedSection final : public SyntheticSection {
typedef typename ELFT::Verneed Elf_Verneed;
typedef typename ELFT::Vernaux Elf_Vernaux;
@@ -677,7 +659,7 @@ public:
// we put them into MergeSyntheticSection synthetic input sections which are
// attached to regular output sections.
template <class ELFT>
-class MergeSyntheticSection final : public SyntheticSection<ELFT> {
+class MergeSyntheticSection final : public SyntheticSection {
typedef typename ELFT::uint uintX_t;
public:
@@ -700,7 +682,7 @@ private:
// .MIPS.abiflags section.
template <class ELFT>
-class MipsAbiFlagsSection final : public SyntheticSection<ELFT> {
+class MipsAbiFlagsSection final : public SyntheticSection {
typedef llvm::object::Elf_Mips_ABIFlags<ELFT> Elf_Mips_ABIFlags;
public:
@@ -715,8 +697,7 @@ private:
};
// .MIPS.options section.
-template <class ELFT>
-class MipsOptionsSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class MipsOptionsSection final : public SyntheticSection {
typedef llvm::object::Elf_Mips_Options<ELFT> Elf_Mips_Options;
typedef llvm::object::Elf_Mips_RegInfo<ELFT> Elf_Mips_RegInfo;
@@ -735,8 +716,7 @@ private:
};
// MIPS .reginfo section.
-template <class ELFT>
-class MipsReginfoSection final : public SyntheticSection<ELFT> {
+template <class ELFT> class MipsReginfoSection final : public SyntheticSection {
typedef llvm::object::Elf_Mips_RegInfo<ELFT> Elf_Mips_RegInfo;
public:
@@ -754,14 +734,14 @@ private:
// of executable file which is pointed to by the DT_MIPS_RLD_MAP entry.
// See "Dynamic section" in Chapter 5 in the following document:
// ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf
-template <class ELFT> class MipsRldMapSection : public SyntheticSection<ELFT> {
+template <class ELFT> class MipsRldMapSection : public SyntheticSection {
public:
MipsRldMapSection();
size_t getSize() const override { return sizeof(typename ELFT::uint); }
void writeTo(uint8_t *Buf) override;
};
-template <class ELFT> class ARMExidxSentinelSection : public SyntheticSection<ELFT> {
+template <class ELFT> class ARMExidxSentinelSection : public SyntheticSection {
public:
ARMExidxSentinelSection();
size_t getSize() const override { return 8; }
@@ -770,7 +750,7 @@ public:
// A container for one or more linker generated thunks. Instances of these
// thunks including ARM interworking and Mips LA25 PI to non-PI thunks.
-template <class ELFT> class ThunkSection : public SyntheticSection<ELFT> {
+template <class ELFT> class ThunkSection : public SyntheticSection {
public:
// ThunkSection in OS, with desired OutSecOff of Off
ThunkSection(OutputSection *OS, uint64_t Off);
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=296313&r1=296312&r2=296313&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Sun Feb 26 20:56:02 2017
@@ -530,7 +530,7 @@ template <class ELFT> void Writer<ELFT>:
InputSection *IS = nullptr;
if (!Sec->Sections.empty())
IS = Sec->Sections[0];
- if (!IS || isa<SyntheticSection<ELFT>>(IS) || IS->Type == SHT_REL ||
+ if (!IS || isa<SyntheticSection>(IS) || IS->Type == SHT_REL ||
IS->Type == SHT_RELA)
continue;
auto *B = new (BAlloc)
@@ -1022,9 +1022,8 @@ template <class ELFT> void Writer<ELFT>:
}
template <class ELFT>
-static void
-finalizeSynthetic(const std::vector<SyntheticSection<ELFT> *> &Sections) {
- for (SyntheticSection<ELFT> *SS : Sections)
+static void finalizeSynthetic(const std::vector<SyntheticSection *> &Sections) {
+ for (SyntheticSection *SS : Sections)
if (SS && SS->OutSec && !SS->empty()) {
SS->finalize();
SS->OutSec->Size = 0;
@@ -1042,7 +1041,7 @@ static void removeUnusedSyntheticSection
// all regular ones. We iterate over them all and exit at first
// non-synthetic.
for (InputSectionBase *S : llvm::reverse(InputSections)) {
- SyntheticSection<ELFT> *SS = dyn_cast<SyntheticSection<ELFT>>(S);
+ SyntheticSection *SS = dyn_cast<SyntheticSection>(S);
if (!SS)
return;
if (!SS->empty() || !SS->OutSec)
More information about the llvm-commits
mailing list