PLT.h revision 5460a1f25d9ddecb5c70667267d66d51af177a99
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//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef PROCEDURE_LINKAGE_TABLE_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define PROCEDURE_LINKAGE_TABLE_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSection.h> 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCTargetFragment.h> 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/ADT/ilist.h> 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ResolveInfo; 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class PLTEntry 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass PLTEntry : public MCTargetFragment 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PLTEntry(size_t pSize, llvm::MCSectionData* pParent); 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual ~PLTEntry(); 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t getEntrySize() const 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_EntrySize; } 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setContent(unsigned char* pContent) 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_pContent = pContent; } 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const unsigned char* getContent() const 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pContent; } 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao //Used by llvm::cast<>. 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao static bool classof(const MCFragment *O) 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return true; } 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t getSize() const 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_EntrySize; } 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t m_EntrySize; 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned char* m_pContent; 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class PLT 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief Procedure linkage table 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass PLT 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PLT(LDSection& pSection, llvm::MCSectionData& pSectionData); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual ~PLT(); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getSection() const 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_Section; } 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const llvm::MCSectionData& getSectionData() const 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_SectionData; } 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// reserveEntry - reseve the number of pNum of empty entries 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// The empty entris are reserved for layout to adjust the fragment offset. 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual void reserveEntry(size_t pNum = 1) = 0; 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// getPLTEntry - get an empty entry or an exitsted filled entry with pSymbol. 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pSymbol - the target symbol 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pExist - ture if the a filled entry with pSymbol existed, otherwise false. 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual PLTEntry* getPLTEntry(const ResolveInfo& pSymbol, bool& pExist) = 0; 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& m_Section; 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::MCSectionData& m_SectionData; 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 87