Linker.h revision 6f75755c9204b1d8817ae5a65a2f7e5af0ec3f70
122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- Linker.h -----------------------------------------------------------===// 222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// The MCLinker Project 422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source 622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details. 722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef MCLD_LINKER_H 1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#define MCLD_LINKER_H 1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifdef ENABLE_UNITTEST 1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <gtest.h> 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <string> 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Module; 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LinkerConfig; 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Target; 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass TargetLDBackend; 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass IRBuilder; 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ObjectLinker; 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass FileHandle; 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass MemoryArea; 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class Linker 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* \brief Linker is a modular linker. 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao*/ 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Linker 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic: 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Linker(); 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ~Linker(); 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// config - To set up target-dependent options in pConfig. 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool config(LinkerConfig& pConfig); 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// resolve - To read participatory input files and build up mcld::Module 456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines bool resolve(Module& pModule, IRBuilder& pBuilder); 466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// layout - To serialize the final result of the output mcld::Module 486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines bool layout(); 496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// link - A convenient way to resolve and to layout the output mcld::Module. 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool link(Module& pModule, IRBuilder& pBuilder); 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// emit - To emit output mcld::Module to a output MemoryArea 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool emit(MemoryArea& pOutput); 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// emit - To open a file for output in pPath and to emit output mcld::Module 576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// to the file. 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool emit(const std::string& pPath); 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// emit - To emit output mcld::Module in the pFileDescriptor. 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool emit(int pFileDescriptor); 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool reset(); 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool initTarget(); 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool initBackend(); 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool initEmulator(); 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool initOStream(); 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LinkerConfig* m_pConfig; 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao IRBuilder* m_pIRBuilder; 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const Target* m_pTarget; 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao TargetLDBackend* m_pBackend; 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ObjectLinker* m_pObjLinker; 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 8222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of MC Linker 8422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif 8622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 87