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