diff options
| author | Simon Atanasyan <simon@atanasyan.com> | 2015-04-20 07:36:27 +0000 |
|---|---|---|
| committer | Simon Atanasyan <simon@atanasyan.com> | 2015-04-20 07:36:27 +0000 |
| commit | 84adf3ff1579134a4b019a09ba69504d5de1fe05 (patch) | |
| tree | 55541a70d5b1b9a3119daca2daa300589e46b7b7 /lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h | |
| parent | 811922897710b9790678b588f63bb4182ce8f4ec (diff) | |
| download | bcm5719-llvm-84adf3ff1579134a4b019a09ba69504d5de1fe05.tar.gz bcm5719-llvm-84adf3ff1579134a4b019a09ba69504d5de1fe05.zip | |
[Mips] Write DT_MIPS_OPTIONS tag to .dynamic section
If .MIPS.options section exists the DT_MIPS_OPTIONS tag should hold
an address of this section.
llvm-svn: 235290
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h index 9731fefd813..8f2d36edea1 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h @@ -66,6 +66,17 @@ public: _dt_pltgot = this->addEntry(dyn); } + void doPreFlight() override { + DynamicTable<ELFT>::doPreFlight(); + + if (_targetLayout.findOutputSection(".MIPS.options")) { + typename DynamicTable<ELFT>::Elf_Dyn dyn; + dyn.d_un.d_val = 0; + dyn.d_tag = DT_MIPS_OPTIONS; + _dt_options = this->addEntry(dyn); + } + } + void updateDynamicTable() override { DynamicTable<ELFT>::updateDynamicTable(); @@ -83,6 +94,9 @@ public: this->getSymbolTable()->size() - got.getGlobalCount(); this->_entries[_dt_localgot].d_un.d_val = got.getLocalCount(); this->_entries[_dt_pltgot].d_un.d_ptr = got.virtualAddr(); + + if (const auto *sec = _targetLayout.findOutputSection(".MIPS.options")) + this->_entries[_dt_options].d_un.d_ptr = sec->virtualAddr(); } int64_t getGotPltTag() override { return DT_MIPS_PLTGOT; } @@ -103,6 +117,7 @@ private: std::size_t _dt_gotsym; std::size_t _dt_pltgot; std::size_t _dt_baseaddr; + std::size_t _dt_options; MipsTargetLayout<ELFT> &_targetLayout; }; |

