summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h')
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h b/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h
index 3927d69e6be..61e2eedc539 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h
@@ -31,6 +31,7 @@ protected:
bool createImplicitFiles(std::vector<std::unique_ptr<File>> &) override;
void finalizeDefaultAtomValues() override;
+ void createDefaultSections() override;
std::error_code setELFHeader() override;
unique_bump_ptr<SymbolTable<ELFT>> createSymbolTable() override;
@@ -40,6 +41,7 @@ protected:
private:
MipsELFWriter<ELFT> _writeHelper;
MipsTargetLayout<ELFT> &_targetLayout;
+ unique_bump_ptr<Section<ELFT>> _reginfo;
};
template <class ELFT>
@@ -122,6 +124,18 @@ void MipsExecutableWriter<ELFT>::finalizeDefaultAtomValues() {
_writeHelper.finalizeMipsRuntimeAtomValues();
}
+template <class ELFT> void MipsExecutableWriter<ELFT>::createDefaultSections() {
+ ExecutableWriter<ELFT>::createDefaultSections();
+ const auto &mask =
+ static_cast<const MipsLinkingContext &>(this->_ctx).getMergeReginfoMask();
+ if (!ELFT::Is64Bits && mask.hasValue()) {
+ _reginfo = unique_bump_ptr<Section<ELFT>>(
+ new (this->_alloc)
+ MipsReginfoSection<ELFT>(this->_ctx, _targetLayout, *mask));
+ this->_layout.addSection(_reginfo.get());
+ }
+}
+
template <class ELFT>
unique_bump_ptr<SymbolTable<ELFT>>
MipsExecutableWriter<ELFT>::createSymbolTable() {
OpenPOWER on IntegriCloud