summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h14
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h10
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h17
3 files changed, 13 insertions, 28 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
index 9811d8e056a..ed889db0715 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
@@ -42,16 +42,7 @@ protected:
LLD_UNIQUE_BUMP_PTR(DynamicSymbolTable<ELFT>) createDynamicSymbolTable();
private:
- void addDefaultAtoms() {
- if (this->_context.isDynamic()) {
- _mipsRuntimeFile->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
- _mipsRuntimeFile->addAbsoluteAtom("_gp");
- _mipsRuntimeFile->addAbsoluteAtom("_gp_disp");
- }
- }
-
MipsELFWriter<ELFT> _writeHelper;
- std::unique_ptr<MipsRuntimeFile<ELFT>> _mipsRuntimeFile;
MipsLinkingContext &_mipsContext;
MipsTargetLayout<Mips32ElELFType> &_mipsTargetLayout;
};
@@ -61,16 +52,13 @@ MipsDynamicLibraryWriter<ELFT>::MipsDynamicLibraryWriter(
MipsLinkingContext &context, MipsTargetLayout<ELFT> &layout)
: DynamicLibraryWriter<ELFT>(context, layout),
_writeHelper(context, layout),
- _mipsRuntimeFile(new MipsRuntimeFile<ELFT>(context)),
_mipsContext(context), _mipsTargetLayout(layout) {}
template <class ELFT>
bool MipsDynamicLibraryWriter<ELFT>::createImplicitFiles(
std::vector<std::unique_ptr<File>> &result) {
DynamicLibraryWriter<ELFT>::createImplicitFiles(result);
- // Add the default atoms as defined for mips
- addDefaultAtoms();
- result.push_back(std::move(_mipsRuntimeFile));
+ result.push_back(std::move(_writeHelper.createRuntimeFile()));
return true;
}
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h b/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h
index 5e24d6f00e6..51734c97109 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h
@@ -66,6 +66,16 @@ public:
return _targetLayout.getGOTSection().hasGlobalGOTEntry(a);
}
+ std::unique_ptr<MipsRuntimeFile<ELFT>> createRuntimeFile() {
+ auto file = llvm::make_unique<MipsRuntimeFile<ELFT>>(_context);
+ if (_context.isDynamic()) {
+ file->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
+ file->addAbsoluteAtom("_gp");
+ file->addAbsoluteAtom("_gp_disp");
+ }
+ return file;
+ }
+
private:
MipsLinkingContext &_context;
MipsTargetLayout<ELFT> &_targetLayout;
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h b/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h
index 6275ef8e361..27997f636df 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h
@@ -44,16 +44,7 @@ protected:
LLD_UNIQUE_BUMP_PTR(DynamicSymbolTable<ELFT>) createDynamicSymbolTable();
private:
- void addDefaultAtoms() {
- if (this->_context.isDynamic()) {
- _mipsRuntimeFile->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
- _mipsRuntimeFile->addAbsoluteAtom("_gp");
- _mipsRuntimeFile->addAbsoluteAtom("_gp_disp");
- }
- }
-
MipsELFWriter<ELFT> _writeHelper;
- std::unique_ptr<MipsRuntimeFile<ELFT>> _mipsRuntimeFile;
MipsLinkingContext &_mipsContext;
MipsTargetLayout<Mips32ElELFType> &_mipsTargetLayout;
};
@@ -61,9 +52,7 @@ private:
template <class ELFT>
MipsExecutableWriter<ELFT>::MipsExecutableWriter(MipsLinkingContext &context,
MipsTargetLayout<ELFT> &layout)
- : ExecutableWriter<ELFT>(context, layout),
- _writeHelper(context, layout),
- _mipsRuntimeFile(new MipsRuntimeFile<ELFT>(context)),
+ : ExecutableWriter<ELFT>(context, layout), _writeHelper(context, layout),
_mipsContext(context), _mipsTargetLayout(layout) {}
template <class ELFT>
@@ -84,9 +73,7 @@ template <class ELFT>
bool MipsExecutableWriter<ELFT>::createImplicitFiles(
std::vector<std::unique_ptr<File>> &result) {
ExecutableWriter<ELFT>::createImplicitFiles(result);
- // Add the default atoms as defined for mips
- addDefaultAtoms();
- result.push_back(std::move(_mipsRuntimeFile));
+ result.push_back(std::move(_writeHelper.createRuntimeFile()));
return true;
}
OpenPOWER on IntegriCloud