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