PLT.h revision 22add6ff3426df1a85089fe6a6e1597ee3b6f300
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- PLT.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//===----------------------------------------------------------------------===// 9cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#ifndef MCLD_PROCEDURE_LINKAGE_TABLE_H 10cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#define MCLD_PROCEDURE_LINKAGE_TABLE_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 15cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/LD/LDSection.h> 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LD/SectionData.h> 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Fragment/TargetFragment.h> 18cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LDSection; 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ResolveInfo; 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class PLT 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * \brief Procedure linkage table 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass PLT 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao typedef SectionData::iterator iterator; 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao typedef SectionData::const_iterator const_iterator; 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao class Entry : public TargetFragment 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao public: 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Entry(size_t pSize, SectionData& pParent); 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual ~Entry(); 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao size_t getEntrySize() const 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_EntrySize; } 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setContent(unsigned char* pContent) 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_pContent = pContent; } 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const unsigned char* getContent() const 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_pContent; } 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao //Used by llvm::cast<>. 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao static bool classof(const Fragment *O) 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return true; } 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao size_t size() const 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_EntrySize; } 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao protected: 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao size_t m_EntrySize; 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned char* m_pContent; 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao }; 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic: 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao PLT(LDSection& pSection); 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual ~PLT(); 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// reserveEntry - reseve the number of pNum of empty entries 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// The empty entris are reserved for layout to adjust the fragment offset. 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual void reserveEntry(size_t pNum = 1) = 0; 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // finalizeSectionSize - set LDSection size 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual void finalizeSectionSize() = 0; 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao uint64_t addr() const { return m_Section.addr(); } 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const_iterator begin() const { return m_SectionData->begin(); } 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao iterator begin() { return m_SectionData->begin(); } 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const_iterator end () const { return m_SectionData->end(); } 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao iterator end () { return m_SectionData->end(); } 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& m_Section; 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao SectionData* m_SectionData; 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 88