1//===- MCLinker.h ---------------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// MCLinker is a base class inherited by target specific linker. 11// This class primarily handles common functionality used by all linkers. 12// 13//===----------------------------------------------------------------------===// 14#ifndef MCLD_CODEGEN_MCLINKER_H 15#define MCLD_CODEGEN_MCLINKER_H 16#include <llvm/CodeGen/MachineFunctionPass.h> 17 18namespace llvm { 19 20class Module; 21class MachineFunction; 22 23} // namespace of llvm 24 25namespace mcld { 26 27class Module; 28class IRBuilder; 29class LinkerConfig; 30class Linker; 31class FileHandle; 32 33/** \class MCLinker 34* \brief MCLinker provides a linking pass for standard compilation flow 35* 36* MCLinker is responded for 37* - provide an interface for target-specific linker 38* - set up environment for ObjectLinker 39* - perform linking 40* 41* @see MachineFunctionPass ObjectLinker 42*/ 43class MCLinker : public llvm::MachineFunctionPass 44{ 45protected: 46 // Constructor. Although MCLinker has only two arguments, 47 // TargetMCLinker should handle 48 // - enabled attributes 49 // - the default attribute 50 // - the default link script 51 // - the standard symbols 52 MCLinker(LinkerConfig& pConfig, 53 mcld::Module& pModule, 54 FileHandle& pFileHandle); 55 56public: 57 virtual ~MCLinker(); 58 59 virtual bool doInitialization(llvm::Module &pM); 60 61 virtual bool doFinalization(llvm::Module &pM); 62 63 virtual bool runOnMachineFunction(llvm::MachineFunction& pMFn); 64 65protected: 66 void initializeInputTree(IRBuilder& pBuilder); 67 68protected: 69 LinkerConfig& m_Config; 70 mcld::Module& m_Module; 71 FileHandle& m_FileHandle; 72 IRBuilder* m_pBuilder; 73 Linker* m_pLinker; 74 75private: 76 static char m_ID; 77}; 78 79} // namespace of MC Linker 80 81#endif 82 83