| //===- FragmentLinker.h ---------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file provides a number of APIs used by SectLinker. |
| // These APIs do the things which a linker should do. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_FRAGMENT_FRAGMENT_LINKER_H |
| #define MCLD_FRAGMENT_FRAGMENT_LINKER_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| |
| #include <string> |
| |
| #include <mcld/LinkerConfig.h> |
| #include <mcld/LD/LDFileFormat.h> |
| #include <mcld/LD/LDSymbol.h> |
| #include <mcld/Fragment/Relocation.h> |
| #include <mcld/MC/MCLDInput.h> |
| |
| namespace mcld { |
| |
| class Module; |
| class TargetLDBackend; |
| class LinkerConfig; |
| class MemoryArea; |
| |
| /** \class FragmentLinker |
| * \brief FragmentLinker provides a pass to link object files. |
| */ |
| class FragmentLinker |
| { |
| public: |
| FragmentLinker(const LinkerConfig& pConfig, |
| Module& pModule, |
| TargetLDBackend& pBackend); |
| |
| ~FragmentLinker(); |
| |
| bool finalizeSymbols(); |
| |
| /// applyRelocations - apply all relocation enties. |
| bool applyRelocations(); |
| |
| /// syncRelocationResult - After applying relocation, write back relocation target |
| /// data to output file. |
| void syncRelocationResult(MemoryArea& pOutput); |
| |
| private: |
| /// normalSyncRelocationResult - sync relocation result when producing shared |
| /// objects or executables |
| void normalSyncRelocationResult(MemoryArea& pOutput); |
| |
| /// partialSyncRelocationResult - sync relocation result when doing partial |
| /// link |
| void partialSyncRelocationResult(MemoryArea& pOutput); |
| |
| /// writeRelocationResult - helper function of syncRelocationResult, write |
| /// relocation target data to output |
| void writeRelocationResult(Relocation& pReloc, uint8_t* pOutput); |
| |
| private: |
| const LinkerConfig& m_Config; |
| Module& m_Module; |
| TargetLDBackend& m_Backend; |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |
| |