ARMPLT.h revision 5460a1f25d9ddecb5c70667267d66d51af177a99
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- ARMPLT.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//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_ARM_PLT_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_ARM_PLT_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Target/PLT.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld { 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ARMGOT; 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass GOTEntry; 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass MemoryRegion; 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ARMPLT0 : public PLTEntry { 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ARMPLT0(llvm::MCSectionData* pParent); 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ARMPLT1 : public PLTEntry { 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ARMPLT1(llvm::MCSectionData* pParent); 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class ARMPLT 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief ARM Procedure Linkage Table 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ARMPLT : public PLT 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef llvm::DenseMap<const ResolveInfo*, ARMPLT1*> SymbolIndexType; 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef llvm::MCSectionData::iterator iterator; 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef llvm::MCSectionData::const_iterator const_iterator; 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ARMPLT(LDSection& pSection, 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::MCSectionData& pSectionData, 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ARMGOT& pGOTPLT); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~ARMPLT(); 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Override virtual function. 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // reserveEntry is ARMGOT friend function. 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void reserveEntry(size_t pNum = 1) ; 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PLTEntry* getPLTEntry(const ResolveInfo& pSymbol, bool& pExist) ; 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao GOTEntry* getGOTPLTEntry(const ResolveInfo& pSymbol, bool& pExist); 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator begin() { return m_SectionData.begin(); } 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator begin() const { return m_SectionData.begin(); } 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator end() { return m_SectionData.end(); } 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator end() const { return m_SectionData.end(); } 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ARMPLT0* getPLT0() const; 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void applyPLT0(); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void applyPLT1(); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint64_t emit(MemoryRegion& pRegion); 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ARMGOT& m_GOT; 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Used by getEntry() for mapping a ResolveInfo 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // instance to a PLT1 Entry. 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator m_PLTEntryIterator; 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao SymbolIndexType m_PLTEntryMap; 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 88