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//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_TARGET_GOT_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_TARGET_GOT_H_
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Fragment/TargetFragment.h"
1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/LDSection.h"
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/SectionData.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 */
2537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass GOT {
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines protected:
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit GOT(LDSection& pSection);
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef SectionData::iterator iterator;
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef SectionData::const_iterator const_iterator;
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  template <size_t SIZE>
3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  class Entry : public TargetFragment {
3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines   public:
36d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    enum { EntrySize = SIZE };
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines   public:
39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    Entry(uint64_t pValue, SectionData* pParent)
4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines        : TargetFragment(Fragment::Target, pParent), f_Value(pValue) {}
41d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
42d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    virtual ~Entry() {}
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines    uint64_t getValue() const { return f_Value; }
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines    void setValue(uint64_t pValue) { f_Value = pValue; }
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    // Override pure virtual function
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines    size_t size() const { return EntrySize; }
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines   protected:
52d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    uint64_t f_Value;
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  };
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual ~GOT();
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // ----- observers -----//
5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  uint64_t addr() const { return m_Section.addr(); }
60551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  uint64_t size() const { return m_Section.size(); }
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const_iterator begin() const { return m_SectionData->begin(); }
6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  iterator begin() { return m_SectionData->begin(); }
6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  const_iterator end() const { return m_SectionData->end(); }
6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  iterator end() { return m_SectionData->end(); }
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  bool empty() const { return m_SectionData->empty(); }
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // finalizeSectionSize - set LDSection size
7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  virtual void finalizeSectionSize();
7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines protected:
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& m_Section;
7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SectionData* m_SectionData;
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7737b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // MCLD_TARGET_GOT_H_
80