1//===- MCWinCOFFStreamer.h - COFF Object File Interface ---------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef LLVM_MC_MCWINCOFFSTREAMER_H 11#define LLVM_MC_MCWINCOFFSTREAMER_H 12 13#include "llvm/MC/MCDirectives.h" 14#include "llvm/MC/MCObjectStreamer.h" 15 16namespace llvm { 17 18class MCAsmBackend; 19class MCContext; 20class MCCodeEmitter; 21class MCInst; 22class MCSection; 23class MCSubtargetInfo; 24class MCSymbol; 25class StringRef; 26class raw_pwrite_stream; 27 28class MCWinCOFFStreamer : public MCObjectStreamer { 29public: 30 MCWinCOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB, 31 std::unique_ptr<MCCodeEmitter> CE, raw_pwrite_stream &OS); 32 33 /// state management 34 void reset() override { 35 CurSymbol = nullptr; 36 MCObjectStreamer::reset(); 37 } 38 39 /// \name MCStreamer interface 40 /// \{ 41 42 void InitSections(bool NoExecStack) override; 43 void EmitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override; 44 void EmitAssemblerFlag(MCAssemblerFlag Flag) override; 45 void EmitThumbFunc(MCSymbol *Func) override; 46 bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override; 47 void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override; 48 void BeginCOFFSymbolDef(MCSymbol const *Symbol) override; 49 void EmitCOFFSymbolStorageClass(int StorageClass) override; 50 void EmitCOFFSymbolType(int Type) override; 51 void EndCOFFSymbolDef() override; 52 void EmitCOFFSafeSEH(MCSymbol const *Symbol) override; 53 void EmitCOFFSectionIndex(MCSymbol const *Symbol) override; 54 void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override; 55 void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, 56 unsigned ByteAlignment) override; 57 void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, 58 unsigned ByteAlignment) override; 59 void EmitZerofill(MCSection *Section, MCSymbol *Symbol, uint64_t Size, 60 unsigned ByteAlignment) override; 61 void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, 62 unsigned ByteAlignment) override; 63 void EmitIdent(StringRef IdentString) override; 64 void EmitWinEHHandlerData(SMLoc Loc) override; 65 void FinishImpl() override; 66 67 /// \} 68 69protected: 70 const MCSymbol *CurSymbol; 71 72 void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) override; 73 74private: 75 void Error(const Twine &Msg) const; 76}; 77 78} // end namespace llvm 79 80#endif // LLVM_MC_MCWINCOFFSTREAMER_H 81