summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2015-04-05 09:01:46 +0000
committerSimon Atanasyan <simon@atanasyan.com>2015-04-05 09:01:46 +0000
commit4c5b23f6df9685117e6ce748082f01cf1fbae5d5 (patch)
treedaa199a1d62fb5c779a9ad9d4138d0b5fbd3e1ba /lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
parentb2d1c0c09cc118b78c37ebad715fdc4d919bd7d7 (diff)
downloadbcm5719-llvm-4c5b23f6df9685117e6ce748082f01cf1fbae5d5.tar.gz
bcm5719-llvm-4c5b23f6df9685117e6ce748082f01cf1fbae5d5.zip
[Mips] Support writing .MIPS.options section into the linked file
In case of MIPS N64 ABI linker should merge registers usage masks stored in the input .MIPS.options sections and save result into the output .MIPS.options section. llvm-svn: 234115
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h')
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h17
1 files changed, 10 insertions, 7 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
index a72a467b808..e67144275ea 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
@@ -75,14 +75,17 @@ 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()) {
+ const auto &ctx = static_cast<const MipsLinkingContext &>(this->_ctx);
+ const auto &mask = ctx.getMergeReginfoMask();
+ if (!mask.hasValue())
+ return;
+ if (ELFT::Is64Bits)
_reginfo = unique_bump_ptr<Section<ELFT>>(
- new (this->_alloc)
- MipsReginfoSection<ELFT>(this->_ctx, _targetLayout, *mask));
- this->_layout.addSection(_reginfo.get());
- }
+ new (this->_alloc) MipsOptionsSection<ELFT>(ctx, _targetLayout, *mask));
+ else
+ _reginfo = unique_bump_ptr<Section<ELFT>>(
+ new (this->_alloc) MipsReginfoSection<ELFT>(ctx, _targetLayout, *mask));
+ this->_layout.addSection(_reginfo.get());
}
template <class ELFT>
OpenPOWER on IntegriCloud