15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- GOT.h --------------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_TARGET_GOT_H
1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_TARGET_GOT_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSection.h>
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LD/SectionData.h>
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Fragment/TargetFragment.h>
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass GOT;
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LDSection;
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ResolveInfo;
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class GOT
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *  \brief The Global Offset Table
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass GOT
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprotected:
28d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  GOT(LDSection& pSection);
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic:
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef SectionData::iterator iterator;
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef SectionData::const_iterator const_iterator;
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  template<size_t SIZE>
3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  class Entry : public TargetFragment
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  {
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  public:
38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    enum { EntrySize = SIZE };
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
40d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  public:
41d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    Entry(uint64_t pValue, SectionData* pParent)
42d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao      : TargetFragment(Fragment::Target, pParent),
43d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        f_Value(pValue) {
44d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    }
45d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    virtual ~Entry() {}
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    uint64_t getValue() const
49d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    { return f_Value; }
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
51d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    void setValue(uint64_t pValue)
52d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    { f_Value = pValue; }
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    // Override pure virtual function
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    size_t size() const
56d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    { return EntrySize; }
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  protected:
59d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    uint64_t f_Value;
6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  };
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual ~GOT();
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // ----- observers -----//
6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  uint64_t addr() const { return m_Section.addr(); }
67551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  uint64_t size() const { return m_Section.size(); }
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const_iterator begin() const { return m_SectionData->begin(); }
7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  iterator       begin()       { return m_SectionData->begin(); }
7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const_iterator end  () const { return m_SectionData->end();   }
7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  iterator       end  ()       { return m_SectionData->end();   }
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  bool empty() const
7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  { return m_SectionData->empty(); }
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // finalizeSectionSize - set LDSection size
7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  virtual void finalizeSectionSize();
7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected:
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& m_Section;
8222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SectionData* m_SectionData;
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
89