| //===- MCLinker.h ---------------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // MCLinker is a base class inherited by target specific linker. |
| // This class primarily handles common functionality used by all linkers. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_CODEGEN_MCLINKER_H |
| #define MCLD_CODEGEN_MCLINKER_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| #include <llvm/CodeGen/MachineFunctionPass.h> |
| |
| namespace llvm { |
| |
| class Module; |
| class MachineFunction; |
| |
| } // namespace of llvm |
| |
| namespace mcld { |
| |
| class Module; |
| class MemoryArea; |
| class IRBuilder; |
| class LinkerConfig; |
| class Linker; |
| |
| /** \class MCLinker |
| * \brief MCLinker provides a linking pass for standard compilation flow |
| * |
| * MCLinker is responded for |
| * - provide an interface for target-specific linker |
| * - set up environment for ObjectLinker |
| * - perform linking |
| * |
| * @see MachineFunctionPass ObjectLinker |
| */ |
| class MCLinker : public llvm::MachineFunctionPass |
| { |
| protected: |
| // Constructor. Although MCLinker has only two arguments, |
| // TargetMCLinker should handle |
| // - enabled attributes |
| // - the default attribute |
| // - the default link script |
| // - the standard symbols |
| MCLinker(LinkerConfig& pConfig, |
| mcld::Module& pModule, |
| MemoryArea& pOutput); |
| |
| public: |
| virtual ~MCLinker(); |
| |
| virtual bool doInitialization(llvm::Module &pM); |
| |
| virtual bool doFinalization(llvm::Module &pM); |
| |
| virtual bool runOnMachineFunction(llvm::MachineFunction& pMFn); |
| |
| protected: |
| void initializeInputTree(IRBuilder& pBuilder); |
| |
| protected: |
| LinkerConfig& m_Config; |
| mcld::Module& m_Module; |
| MemoryArea& m_Output; |
| IRBuilder* m_pBuilder; |
| Linker* m_pLinker; |
| |
| private: |
| static char m_ID; |
| }; |
| |
| } // namespace of MC Linker |
| |
| #endif |
| |