- //===- MCWinCOFFStreamer.h - COFF Object File Interface ---------*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_MC_MCWINCOFFSTREAMER_H 
- #define LLVM_MC_MCWINCOFFSTREAMER_H 
-   
- #include "llvm/MC/MCDirectives.h" 
- #include "llvm/MC/MCObjectStreamer.h" 
-   
- namespace llvm { 
-   
- class MCAsmBackend; 
- class MCContext; 
- class MCCodeEmitter; 
- class MCInst; 
- class MCSection; 
- class MCSubtargetInfo; 
- class MCSymbol; 
- class StringRef; 
- class raw_pwrite_stream; 
-   
- class MCWinCOFFStreamer : public MCObjectStreamer { 
- public: 
-   MCWinCOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB, 
-                     std::unique_ptr<MCCodeEmitter> CE, 
-                     std::unique_ptr<MCObjectWriter> OW); 
-   
-   /// state management 
-   void reset() override { 
-     CurSymbol = nullptr; 
-     MCObjectStreamer::reset(); 
-   } 
-   
-   /// \name MCStreamer interface 
-   /// \{ 
-   
-   void initSections(bool NoExecStack, const MCSubtargetInfo &STI) override; 
-   void emitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override; 
-   void emitAssemblerFlag(MCAssemblerFlag Flag) override; 
-   void emitThumbFunc(MCSymbol *Func) override; 
-   bool emitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override; 
-   void emitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override; 
-   void beginCOFFSymbolDef(MCSymbol const *Symbol) override; 
-   void emitCOFFSymbolStorageClass(int StorageClass) override; 
-   void emitCOFFSymbolType(int Type) override; 
-   void endCOFFSymbolDef() override; 
-   void emitCOFFSafeSEH(MCSymbol const *Symbol) override; 
-   void emitCOFFSymbolIndex(MCSymbol const *Symbol) override; 
-   void emitCOFFSectionIndex(MCSymbol const *Symbol) override; 
-   void emitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override; 
-   void emitCOFFImgRel32(MCSymbol const *Symbol, int64_t Offset) override; 
-   void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size, 
-                         Align ByteAlignment) override; 
-   void emitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, 
-                              Align ByteAlignment) override; 
-   void emitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override; 
-   void emitZerofill(MCSection *Section, MCSymbol *Symbol, uint64_t Size, 
-                     Align ByteAlignment, SMLoc Loc = SMLoc()) override; 
-   void emitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, 
-                       Align ByteAlignment) override; 
-   void emitIdent(StringRef IdentString) override; 
-   void emitWinEHHandlerData(SMLoc Loc) override; 
-   void emitCGProfileEntry(const MCSymbolRefExpr *From, 
-                           const MCSymbolRefExpr *To, uint64_t Count) override; 
-   void finishImpl() override; 
-   
-   /// \} 
-   
- protected: 
-   const MCSymbol *CurSymbol; 
-   
-   void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) override; 
-   
-   void finalizeCGProfileEntry(const MCSymbolRefExpr *&S); 
-   void finalizeCGProfile(); 
-   
- private: 
-   void Error(const Twine &Msg) const; 
- }; 
-   
- } // end namespace llvm 
-   
- #endif // LLVM_MC_MCWINCOFFSTREAMER_H 
-