diff options
| author | Simon Atanasyan <simon@atanasyan.com> | 2014-01-28 18:52:41 +0000 |
|---|---|---|
| committer | Simon Atanasyan <simon@atanasyan.com> | 2014-01-28 18:52:41 +0000 |
| commit | 7aa9061ead8a1dec83ee7ec10b92b9d305a1d96f (patch) | |
| tree | 00a849945e23663ec0f2cefce410605e352e876d /lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h | |
| parent | a0e9be2bb26c6a4976cff771a78257b5d9b1cb7f (diff) | |
| download | bcm5719-llvm-7aa9061ead8a1dec83ee7ec10b92b9d305a1d96f.tar.gz bcm5719-llvm-7aa9061ead8a1dec83ee7ec10b92b9d305a1d96f.zip | |
[Mips] Declare MipsDynamicTable class in a separate header file.
llvm-svn: 200328
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h index 1cad6a40ccd..b34f0f15a36 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h @@ -116,85 +116,6 @@ private: MipsTargetLayout<Mips32ElELFType> &_mipsTargetLayout; }; -class MipsDynamicTable : public DynamicTable<Mips32ElELFType> { -public: - MipsDynamicTable(MipsLinkingContext &context, - MipsTargetLayout<Mips32ElELFType> &layout) - : DynamicTable<Mips32ElELFType>( - context, layout, ".dynamic", - DefaultLayout<Mips32ElELFType>::ORDER_DYNAMIC), - _mipsTargetLayout(layout) {} - - virtual void createDefaultEntries() { - DynamicTable<Mips32ElELFType>::createDefaultEntries(); - - Elf_Dyn dyn; - - // Version id for the Runtime Linker Interface. - dyn.d_un.d_val = 1; - dyn.d_tag = DT_MIPS_RLD_VERSION; - addEntry(dyn); - - // MIPS flags. - dyn.d_un.d_val = RHF_NOTPOT; - dyn.d_tag = DT_MIPS_FLAGS; - addEntry(dyn); - - // The base address of the segment. - dyn.d_un.d_ptr = 0; - dyn.d_tag = DT_MIPS_BASE_ADDRESS; - _dt_baseaddr = addEntry(dyn); - - // Number of local global offset table entries. - dyn.d_un.d_val = 0; - dyn.d_tag = DT_MIPS_LOCAL_GOTNO; - _dt_localgot = addEntry(dyn); - - // Number of entries in the .dynsym section. - dyn.d_un.d_val = 0; - dyn.d_tag = DT_MIPS_SYMTABNO; - _dt_symtabno = addEntry(dyn); - - // The index of the first dynamic symbol table entry that corresponds - // to an entry in the global offset table. - dyn.d_un.d_val = 0; - dyn.d_tag = DT_MIPS_GOTSYM; - _dt_gotsym = addEntry(dyn); - - // Address of the .got section. - dyn.d_un.d_val = 0; - dyn.d_tag = DT_PLTGOT; - _dt_pltgot = addEntry(dyn); - } - - virtual void updateDynamicTable() { - DynamicTable<Mips32ElELFType>::updateDynamicTable(); - - // Assign the minimum segment address to the DT_MIPS_BASE_ADDRESS tag. - auto baseAddr = std::numeric_limits<uint64_t>::max(); - for (auto si : _mipsTargetLayout.segments()) - if (si->segmentType() != llvm::ELF::PT_NULL) - baseAddr = std::min(baseAddr, si->virtualAddr()); - _entries[_dt_baseaddr].d_un.d_val = baseAddr; - - auto &got = _mipsTargetLayout.getGOTSection(); - - _entries[_dt_symtabno].d_un.d_val = getSymbolTable()->size(); - _entries[_dt_gotsym].d_un.d_val = - getSymbolTable()->size() - got.getGlobalCount(); - _entries[_dt_localgot].d_un.d_val = got.getLocalCount(); - _entries[_dt_pltgot].d_un.d_ptr = - _mipsTargetLayout.findOutputSection(".got")->virtualAddr(); - } - -private: - std::size_t _dt_symtabno; - std::size_t _dt_localgot; - std::size_t _dt_gotsym; - std::size_t _dt_pltgot; - std::size_t _dt_baseaddr; - MipsTargetLayout<Mips32ElELFType> &_mipsTargetLayout; -}; } // end namespace elf } // end namespace lld |

