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