diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-02-28 00:10:58 +0000 | 
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-02-28 00:10:58 +0000 | 
| commit | 3a4d0a7c17d90d78d299122b44576576da7d9311 (patch) | |
| tree | b86319c5dc6c1b39e9a6530121a446be615af0ad /lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h | |
| parent | 985ff20a9caff5091ade54ddc2e21dd8ef016194 (diff) | |
| download | bcm5719-llvm-3a4d0a7c17d90d78d299122b44576576da7d9311.tar.gz bcm5719-llvm-3a4d0a7c17d90d78d299122b44576576da7d9311.zip | |
Remove the old ELF linker.
I think it is clear by now that the new linker is viable.
llvm-svn: 262158
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h | 124 | 
1 files changed, 0 insertions, 124 deletions
| diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h deleted file mode 100644 index 480c69cf460..00000000000 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h +++ /dev/null @@ -1,124 +0,0 @@ -//===- lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h -----------------------===// -// -//                             The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -#ifndef LLD_READER_WRITER_ELF_MIPS_MIPS_DYNAMIC_TABLE_H -#define LLD_READER_WRITER_ELF_MIPS_MIPS_DYNAMIC_TABLE_H - -#include "TargetLayout.h" -#include "SectionChunks.h" - -namespace lld { -namespace elf { - -template <class ELFT> class MipsTargetLayout; - -template <class ELFT> class MipsDynamicTable : public DynamicTable<ELFT> { -public: -  MipsDynamicTable(const ELFLinkingContext &ctx, MipsTargetLayout<ELFT> &layout) -      : DynamicTable<ELFT>(ctx, layout, ".dynamic", -                           TargetLayout<ELFT>::ORDER_DYNAMIC), -        _targetLayout(layout) {} - -  void createDefaultEntries() override { -    DynamicTable<ELFT>::createDefaultEntries(); - -    // Version id for the Runtime Linker Interface. -    this->addEntry(DT_MIPS_RLD_VERSION, 1); - -    // The .rld_map section address. -    if (this->_ctx.getOutputELFType() == ET_EXEC) { -      _dt_rldmap = this->addEntry(DT_MIPS_RLD_MAP, 0); -      _dt_rldmaprel = this->addEntry(DT_MIPS_RLD_MAP_REL, 0); -    } - -    // MIPS flags. -    this->addEntry(DT_MIPS_FLAGS, RHF_NOTPOT); - -    // The base address of the segment. -    _dt_baseaddr = this->addEntry(DT_MIPS_BASE_ADDRESS, 0); - -    // Number of local global offset table entries. -    _dt_localgot = this->addEntry(DT_MIPS_LOCAL_GOTNO, 0); - -    // Number of entries in the .dynsym section. -    _dt_symtabno = this->addEntry(DT_MIPS_SYMTABNO, 0); - -    // The index of the first dynamic symbol table entry that corresponds -    // to an entry in the global offset table. -    _dt_gotsym = this->addEntry(DT_MIPS_GOTSYM, 0); - -    // Address of the .got section. -    _dt_pltgot = this->addEntry(DT_PLTGOT, 0); -  } - -  void doPreFlight() override { -    DynamicTable<ELFT>::doPreFlight(); - -    if (_targetLayout.findOutputSection(".MIPS.options")) { -      _dt_options = this->addEntry(DT_MIPS_OPTIONS, 0); -    } -  } - -  void updateDynamicTable() override { -    DynamicTable<ELFT>::updateDynamicTable(); - -    // Assign the minimum segment address to the DT_MIPS_BASE_ADDRESS tag. -    auto baseAddr = std::numeric_limits<uint64_t>::max(); -    for (auto si : _targetLayout.segments()) -      if (si->segmentType() != llvm::ELF::PT_NULL) -        baseAddr = std::min(baseAddr, si->virtualAddr()); -    this->_entries[_dt_baseaddr].d_un.d_val = baseAddr; - -    auto &got = _targetLayout.getGOTSection(); - -    this->_entries[_dt_symtabno].d_un.d_val = this->getSymbolTable()->size(); -    this->_entries[_dt_gotsym].d_un.d_val = -        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(); - -    if (const auto *sec = _targetLayout.findOutputSection(".rld_map")) { -      this->_entries[_dt_rldmap].d_un.d_ptr = sec->virtualAddr(); -      this->_entries[_dt_rldmaprel].d_un.d_ptr = -          sec->virtualAddr() - -          (this->virtualAddr() + -           _dt_rldmaprel * sizeof(typename DynamicTable<ELFT>::Elf_Dyn)); -    } -  } - -  int64_t getGotPltTag() override { return DT_MIPS_PLTGOT; } - -protected: -  /// \brief Adjust the symbol's value for microMIPS code. -  uint64_t getAtomVirtualAddress(const AtomLayout *al) const override { -    if (const auto *da = dyn_cast<DefinedAtom>(al->_atom)) -      if (da->codeModel() == DefinedAtom::codeMipsMicro || -          da->codeModel() == DefinedAtom::codeMipsMicroPIC) -        return al->_virtualAddr | 1; -    return al->_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; -  std::size_t _dt_options; -  std::size_t _dt_rldmap; -  std::size_t _dt_rldmaprel; -  MipsTargetLayout<ELFT> &_targetLayout; -}; - -} // end namespace elf -} // end namespace lld - -#endif | 

