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