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