15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- X86GOTPLT.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_X86_GOTPLT_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_X86_GOTPLT_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 15cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <llvm/ADT/DenseMap.h> 16cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Target/GOT.h> 18cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/LD/SectionData.h> 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection; 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 24cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoconst unsigned int X86GOTPLT0Num = 3; 25cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class X86GOTPLT 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief X86 .got.plt section. 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass X86GOTPLT : public GOT 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef llvm::DenseMap<const ResolveInfo*, GOTEntry*> SymbolIndexMapType; 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 34cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef SectionData::iterator iterator; 35cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef SectionData::const_iterator const_iterator; 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 38cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao X86GOTPLT(LDSection &pSection, SectionData& pSectionData); 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~X86GOTPLT(); 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator begin(); 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator begin() const; 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator end(); 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator end() const; 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// For GOT0 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang void applyGOT0(uint64_t pAddress); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// For GOTPLT 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang void reserveEntry(size_t pNum = 1); 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang GOTEntry* getEntry(const ResolveInfo& pSymbol, bool& pExist); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang void applyAllGOTPLT(uint64_t pPLTBase, 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang unsigned int pPLT0Size, 62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang unsigned int pPLT1Size); 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang GOTEntry*& lookupGOTPLTMap(const ResolveInfo& pSymbol); 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator m_GOTPLTIterator; 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao SymbolIndexMapType m_GOTPLTMap; 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 75