summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h')
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
index 034b57ca7c3..a72a467b808 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
@@ -13,6 +13,7 @@
#include "MipsDynamicTable.h"
#include "MipsELFWriters.h"
#include "MipsLinkingContext.h"
+#include "MipsSectionChunks.h"
namespace lld {
namespace elf {
@@ -32,6 +33,7 @@ protected:
bool createImplicitFiles(std::vector<std::unique_ptr<File>> &) override;
void finalizeDefaultAtomValues() override;
+ void createDefaultSections() override;
std::error_code setELFHeader() override {
DynamicLibraryWriter<ELFT>::setELFHeader();
@@ -46,6 +48,7 @@ protected:
private:
MipsELFWriter<ELFT> _writeHelper;
MipsTargetLayout<ELFT> &_targetLayout;
+ unique_bump_ptr<Section<ELFT>> _reginfo;
};
template <class ELFT>
@@ -70,6 +73,19 @@ void MipsDynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues() {
}
template <class ELFT>
+void MipsDynamicLibraryWriter<ELFT>::createDefaultSections() {
+ DynamicLibraryWriter<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>>
MipsDynamicLibraryWriter<ELFT>::createSymbolTable() {
return unique_bump_ptr<SymbolTable<ELFT>>(
OpenPOWER on IntegriCloud