1//===- Relocation.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_RELOCATIONFACTORY_H_ 10#define MCLD_LD_RELOCATIONFACTORY_H_ 11#include "mcld/Config/Config.h" 12#include "mcld/Fragment/Relocation.h" 13#include "mcld/Support/GCFactory.h" 14 15namespace mcld { 16 17class FragmentRef; 18class LinkerConfig; 19 20/** \class RelocationFactory 21 * \brief RelocationFactory provides the interface for generating target 22 * relocation 23 * 24 */ 25class RelocationFactory 26 : public GCFactory<Relocation, MCLD_RELOCATIONS_PER_INPUT> { 27 public: 28 typedef Relocation::Type Type; 29 typedef Relocation::Address Address; 30 typedef Relocation::DWord DWord; 31 typedef Relocation::SWord SWord; 32 33 public: 34 RelocationFactory(); 35 36 void setConfig(const LinkerConfig& pConfig); 37 38 // ----- production ----- // 39 /// produce - produce a relocation entry 40 /// @param pType - the type of the relocation entry 41 /// @param pFragRef - the place to apply the relocation 42 /// @param pAddend - the addend of the relocation entry 43 Relocation* produce(Type pType, FragmentRef& pFragRef, Address pAddend = 0); 44 45 /// produceEmptyEntry - produce an empty relocation which 46 /// occupied memory space but all contents set to zero. 47 Relocation* produceEmptyEntry(); 48 49 void destroy(Relocation* pRelocation); 50 51 private: 52 const LinkerConfig* m_pConfig; 53}; 54 55} // namespace mcld 56 57#endif // MCLD_LD_RELOCATIONFACTORY_H_ 58