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