aboutsummaryrefslogtreecommitdiffstats
path: root/ELF/Relocations.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-05-17 20:23:13 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-05-17 20:23:13 +0000
commit2dcc0c5ee66570f02392d1fbf29f573fa47258f8 (patch)
tree53ad75bacc9bf483218972b47eaf90b71f09a642 /ELF/Relocations.cpp
parent022ebf5bbf58ca2dd943d3376cc95a6b206db799 (diff)
downloadsrc-vendor/lld/lld-trunk-r303291.tar.gz
src-vendor/lld/lld-trunk-r303291.zip
Vendor import of lld trunk r303291:vendor/lld/lld-trunk-r303291
Diffstat (limited to 'ELF/Relocations.cpp')
-rw-r--r--ELF/Relocations.cpp30
1 files changed, 9 insertions, 21 deletions
diff --git a/ELF/Relocations.cpp b/ELF/Relocations.cpp
index ea7477e03842..c505a14f3c64 100644
--- a/ELF/Relocations.cpp
+++ b/ELF/Relocations.cpp
@@ -963,9 +963,8 @@ template <class ELFT> void elf::scanRelocations(InputSectionBase &S) {
// in the Sections vector, and recalculate the InputSection output section
// offsets.
// This may invalidate any output section offsets stored outside of InputSection
-template <class ELFT>
-void ThunkCreator<ELFT>::mergeThunks(OutputSection *OS,
- std::vector<ThunkSection *> &Thunks) {
+void ThunkCreator::mergeThunks(OutputSection *OS,
+ std::vector<ThunkSection *> &Thunks) {
// Order Thunks in ascending OutSecOff
auto ThunkCmp = [](const ThunkSection *A, const ThunkSection *B) {
return A->OutSecOff < B->OutSecOff;
@@ -993,9 +992,8 @@ void ThunkCreator<ELFT>::mergeThunks(OutputSection *OS,
OS->assignOffsets();
}
-template <class ELFT>
-ThunkSection *ThunkCreator<ELFT>::getOSThunkSec(ThunkSection *&TS,
- OutputSection *OS) {
+ThunkSection *ThunkCreator::getOSThunkSec(ThunkSection *&TS,
+ OutputSection *OS) {
if (TS == nullptr) {
uint32_t Off = 0;
for (auto *IS : OS->Sections) {
@@ -1009,9 +1007,7 @@ ThunkSection *ThunkCreator<ELFT>::getOSThunkSec(ThunkSection *&TS,
return TS;
}
-template <class ELFT>
-ThunkSection *ThunkCreator<ELFT>::getISThunkSec(InputSection *IS,
- OutputSection *OS) {
+ThunkSection *ThunkCreator::getISThunkSec(InputSection *IS, OutputSection *OS) {
ThunkSection *TS = ThunkedSections.lookup(IS);
if (TS)
return TS;
@@ -1022,12 +1018,11 @@ ThunkSection *ThunkCreator<ELFT>::getISThunkSec(InputSection *IS,
return TS;
}
-template <class ELFT>
-std::pair<Thunk *, bool> ThunkCreator<ELFT>::getThunk(SymbolBody &Body,
- uint32_t Type) {
+std::pair<Thunk *, bool> ThunkCreator::getThunk(SymbolBody &Body,
+ uint32_t Type) {
auto res = ThunkedSymbols.insert({&Body, nullptr});
if (res.second)
- res.first->second = addThunk<ELFT>(Type, Body);
+ res.first->second = addThunk(Type, Body);
return std::make_pair(res.first->second, res.second);
}
@@ -1041,9 +1036,7 @@ std::pair<Thunk *, bool> ThunkCreator<ELFT>::getThunk(SymbolBody &Body,
//
// FIXME: All Thunks are assumed to be in range of the relocation. Range
// extension Thunks are not yet supported.
-template <class ELFT>
-bool ThunkCreator<ELFT>::createThunks(
- ArrayRef<OutputSection *> OutputSections) {
+bool ThunkCreator::createThunks(ArrayRef<OutputSection *> OutputSections) {
// Create all the Thunks and insert them into synthetic ThunkSections. The
// ThunkSections are later inserted back into the OutputSection.
@@ -1086,8 +1079,3 @@ template void elf::scanRelocations<ELF32LE>(InputSectionBase &);
template void elf::scanRelocations<ELF32BE>(InputSectionBase &);
template void elf::scanRelocations<ELF64LE>(InputSectionBase &);
template void elf::scanRelocations<ELF64BE>(InputSectionBase &);
-
-template class elf::ThunkCreator<ELF32LE>;
-template class elf::ThunkCreator<ELF32BE>;
-template class elf::ThunkCreator<ELF64LE>;
-template class elf::ThunkCreator<ELF64BE>;