1d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===- Relocator.h --------------------------------------------------------===// 2d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// 3d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// The MCLinker Project 4d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// 5d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// This file is distributed under the University of Illinois Open Source 6d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// License. See LICENSE.TXT for details. 7d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// 8d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===// 9d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#ifndef MCLD_RELOCATOR_H 10d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#define MCLD_RELOCATOR_H 11d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#ifdef ENABLE_UNITTEST 12d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <gtest.h> 13d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#endif 14d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 15d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <mcld/Fragment/Relocation.h> 16d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 17d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaonamespace mcld 18d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{ 19d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 20d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaoclass FragmentLinker; 21d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaoclass TargetLDBackend; 22d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 23d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao/** \class Relocator 24d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao * \brief Relocator provides the interface of performing relocations 25d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao */ 26d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaoclass Relocator 27d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{ 28d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaopublic: 296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef Relocation::Type Type; 30d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao typedef Relocation::Address Address; 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef Relocation::DWord DWord; 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef Relocation::SWord SWord; 336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef Relocation::Size Size; 34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaopublic: 36d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao enum Result { 37d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao OK, 38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao BadReloc, 39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao Overflow, 40d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao Unsupport, 41d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao Unknown 42d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao }; 43d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 44d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaopublic: 456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual ~Relocator() = 0; 46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao /// apply - general apply function 48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao virtual Result applyRelocation(Relocation& pRelocation) = 0; 49d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao // ------ observers -----// 51d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao virtual TargetLDBackend& getTarget() = 0; 52d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 53d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao virtual const TargetLDBackend& getTarget() const = 0; 54d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// getName - get the name of a relocation 56d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao virtual const char* getName(Type pType) const = 0; 57d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// getSize - get the size of a relocation in bit 596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual Size getSize(Type pType) const = 0; 60d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao}; 61d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 62d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao} // namespace of mcld 63d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 64d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#endif 65d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 66