MCLinker.h revision 87f34658dec9097d987d254a990ea7f311bfc95f
122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- MCLinker.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// 1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// MCLinker is a base class inherited by target specific linker. 1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This class primarily handles common functionality used by all linkers. 1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef MCLD_CODEGEN_MCLINKER_H 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#define MCLD_CODEGEN_MCLINKER_H 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifdef ENABLE_UNITTEST 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <gtest.h> 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/CodeGen/MachineFunctionPass.h> 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace llvm { 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Module; 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass MachineFunction; 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of llvm 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Module; 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass IRBuilder; 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LinkerConfig; 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Linker; 3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass FileHandle; 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class MCLinker 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* \brief MCLinker provides a linking pass for standard compilation flow 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* MCLinker is responded for 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* - provide an interface for target-specific linker 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* - set up environment for ObjectLinker 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* - perform linking 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao* @see MachineFunctionPass ObjectLinker 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao*/ 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass MCLinker : public llvm::MachineFunctionPass 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprotected: 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // Constructor. Although MCLinker has only two arguments, 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // TargetMCLinker should handle 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // - enabled attributes 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // - the default attribute 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // - the default link script 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // - the standard symbols 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao MCLinker(LinkerConfig& pConfig, 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao mcld::Module& pModule, 5787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines FileHandle& pFileHandle); 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic: 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual ~MCLinker(); 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual bool doInitialization(llvm::Module &pM); 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual bool doFinalization(llvm::Module &pM); 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual bool runOnMachineFunction(llvm::MachineFunction& pMFn); 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprotected: 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void initializeInputTree(IRBuilder& pBuilder); 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprotected: 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LinkerConfig& m_Config; 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao mcld::Module& m_Module; 7487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines FileHandle& m_FileHandle; 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao IRBuilder* m_pBuilder; 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Linker* m_pLinker; 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao static char m_ID; 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of MC Linker 8322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif 8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 86