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 { 17class MCAsmBackend; 18class MCContext; 19class MCCodeEmitter; 20class MCExpr; 21class MCInst; 22class MCSection; 23class MCSubtargetInfo; 24class MCSymbol; 25class StringRef; 26class raw_ostream; 27 28class MCWinCOFFStreamer : public MCObjectStreamer { 29public: 30 MCWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB, MCCodeEmitter &CE, 31 raw_ostream &OS); 32 33 /// \name MCStreamer interface 34 /// \{ 35 36 void InitSections() override; 37 void EmitLabel(MCSymbol *Symbol) override; 38 void EmitAssemblerFlag(MCAssemblerFlag Flag) override; 39 void EmitThumbFunc(MCSymbol *Func) override; 40 bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override; 41 void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override; 42 void BeginCOFFSymbolDef(MCSymbol const *Symbol) override; 43 void EmitCOFFSymbolStorageClass(int StorageClass) override; 44 void EmitCOFFSymbolType(int Type) override; 45 void EndCOFFSymbolDef() override; 46 void EmitCOFFSectionIndex(MCSymbol const *Symbol) override; 47 void EmitCOFFSecRel32(MCSymbol const *Symbol) override; 48 void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value) override; 49 void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, 50 unsigned ByteAlignment) override; 51 void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, 52 unsigned ByteAlignment) override; 53 void EmitZerofill(const MCSection *Section, MCSymbol *Symbol, uint64_t Size, 54 unsigned ByteAlignment) override; 55 void EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol, uint64_t Size, 56 unsigned ByteAlignment) override; 57 void EmitFileDirective(StringRef Filename) override; 58 void EmitIdent(StringRef IdentString) override; 59 void EmitWinEHHandlerData() override; 60 void FinishImpl() override; 61 62 /// \} 63 64protected: 65 const MCSymbol *CurSymbol; 66 void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) override; 67 68private: 69 LLVM_ATTRIBUTE_NORETURN void FatalError(const Twine &Msg) const; 70}; 71} 72 73#endif 74 75