1//===- MCBitcodeInterceptor.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#ifndef MCLD_BITCODE_INTERCEPTOR_H
10#define MCLD_BITCODE_INTERCEPTOR_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14#include <llvm/MC/MCObjectWriter.h>
15
16
17namespace llvm
18{
19  class MCStreamer;
20  class MCObjectStreamer;
21  class MCAsmLayout;
22  class MCAssembler;
23  class MCFixup;
24  class MCFragment;
25  class MCSymbol;
26  class MCSymbolData;
27  class MCSymbolRefExpr;
28  class MCValue;
29  class raw_ostream;
30} // namespace of llvm
31
32namespace mcld
33{
34
35class MCLDInfo;
36class TargetLDBackend;
37
38/** \class MCBitcodeInterceptor
39 *  \brief MCBitcodeInterceptor converts bitcode into LDContext
40 *
41 *  @see LDContext
42 *  @see MCObjectWriter
43 */
44class MCBitcodeInterceptor : public llvm::MCObjectWriter
45{
46public:
47  MCBitcodeInterceptor(llvm::MCObjectStreamer&, TargetLDBackend&, MCLDInfo&);
48  ~MCBitcodeInterceptor();
49
50  void ExecutePostLayoutBinding(llvm::MCAssembler &Asm,
51                                const llvm::MCAsmLayout &Layout);
52
53  /// RecordRelocation - record relocations
54  //  make a LDRelocation and recordds in the LDContext.
55  void RecordRelocation(const llvm::MCAssembler &Asm,
56                        const llvm::MCAsmLayout &Layout,
57                        const llvm::MCFragment *Fragment,
58                        const llvm::MCFixup &Fixup,
59                        llvm::MCValue Target,
60                        uint64_t &FixedValue);
61
62  /// WriteObject - not really write out a object. Instead, load data to
63  /// LDContext
64  void WriteObject(llvm::MCAssembler &Asm, const llvm::MCAsmLayout &Layout);
65
66private:
67  TargetLDBackend& m_Backend;
68  MCLDInfo& m_LDInfo;
69
70};
71
72} // namespace of mcld
73
74#endif
75
76