StubFactory.h revision 37b74a387bb3993387029859c2d9d051c41c724e
1//===- StubFactory.h ------------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#ifndef MCLD_LD_STUBFACTORY_H_ 10#define MCLD_LD_STUBFACTORY_H_ 11 12#include <llvm/Support/DataTypes.h> 13 14#include <vector> 15 16namespace mcld { 17 18class BranchIslandFactory; 19class IRBuilder; 20class Relocation; 21class Stub; 22 23/** \class StubFactory 24 * \brief the clone factory of Stub 25 * 26 */ 27class StubFactory { 28 public: 29 ~StubFactory(); 30 31 /// addPrototype - register a stub prototype 32 void addPrototype(Stub* pPrototype); 33 34 /// create - create a stub if needed, otherwise return NULL 35 Stub* create(Relocation& pReloc, 36 uint64_t pTargetSymValue, 37 IRBuilder& pBuilder, 38 BranchIslandFactory& pBRIslandFactory); 39 40 private: 41 /// findPrototype - find if there is a registered stub prototype for the given 42 /// relocation 43 Stub* findPrototype(const Relocation& pReloc, 44 const uint64_t pSource, 45 uint64_t pTargetSymValue); 46 47 private: 48 typedef std::vector<Stub*> StubPoolType; 49 50 private: 51 StubPoolType m_StubPool; // stub pool 52}; 53 54} // namespace mcld 55 56#endif // MCLD_LD_STUBFACTORY_H_ 57