15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- Relocation.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//===----------------------------------------------------------------------===// 9cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#ifndef MCLD_LD_RELOCATION_FACTORY_H 10cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#define MCLD_LD_RELOCATION_FACTORY_H 11d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <mcld/Config/Config.h> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/GCFactory.h> 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Fragment/Relocation.h> 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 17cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoclass FragmentRef; 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LinkerConfig; 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class RelocationFactory 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief RelocationFactory provides the interface for generating target 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * relocation 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 25d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaoclass RelocationFactory : public GCFactory<Relocation, MCLD_RELOCATIONS_PER_INPUT> 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef Relocation::Type Type; 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef Relocation::Address Address; 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef Relocation::DWord DWord; 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao typedef Relocation::SWord SWord; 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao explicit RelocationFactory(); 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 36d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao void setConfig(const LinkerConfig& pConfig); 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- production ----- // 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// produce - produce a relocation entry 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pType - the type of the relocation entry 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pFragRef - the place to apply the relocation 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pAddend - the addend of the relocation entry 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Relocation* produce(Type pType, 44cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao FragmentRef& pFragRef, 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Address pAddend = 0); 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// produceEmptyEntry - produce an empty relocation which 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// occupied memory space but all contents set to zero. 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Relocation* produceEmptyEntry(); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void destroy(Relocation* pRelocation); 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 54d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao const LinkerConfig* m_pConfig; 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 61