122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- FragmentLinker.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//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file provides a number of APIs used by SectLinker. 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// These APIs do the things which a linker should do. 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef MCLD_FRAGMENT_FRAGMENT_LINKER_H 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#define MCLD_FRAGMENT_FRAGMENT_LINKER_H 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 20cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <string> 21cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LinkerConfig.h> 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDFileFormat.h> 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LD/LDSymbol.h> 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Fragment/Relocation.h> 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCLDInput.h> 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld { 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Module; 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass TargetLDBackend; 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LinkerConfig; 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass MemoryArea; 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class FragmentLinker 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * \brief FragmentLinker provides a pass to link object files. 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass FragmentLinker 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao FragmentLinker(const LinkerConfig& pConfig, 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Module& pModule, 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao TargetLDBackend& pBackend); 44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ~FragmentLinker(); 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool finalizeSymbols(); 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// applyRelocations - apply all relocation enties. 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool applyRelocations(); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// syncRelocationResult - After applying relocation, write back relocation target 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// data to output file. 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void syncRelocationResult(MemoryArea& pOutput); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// normalSyncRelocationResult - sync relocation result when producing shared 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// objects or executables 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void normalSyncRelocationResult(MemoryArea& pOutput); 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// partialSyncRelocationResult - sync relocation result when doing partial 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// link 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void partialSyncRelocationResult(MemoryArea& pOutput); 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// writeRelocationResult - helper function of syncRelocationResult, write 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// relocation target data to output 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void writeRelocationResult(Relocation& pReloc, uint8_t* pOutput); 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const LinkerConfig& m_Config; 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Module& m_Module; 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao TargetLDBackend& m_Backend; 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 79