MCWinCOFFStreamer.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. #ifndef LLVM_MC_MCWINCOFFSTREAMER_H
  10. #define LLVM_MC_MCWINCOFFSTREAMER_H
  11. #include "llvm/MC/MCDirectives.h"
  12. #include "llvm/MC/MCObjectStreamer.h"
  13. namespace llvm {
  14. class MCAsmBackend;
  15. class MCContext;
  16. class MCCodeEmitter;
  17. class MCExpr;
  18. class MCInst;
  19. class MCSection;
  20. class MCSubtargetInfo;
  21. class MCSymbol;
  22. class StringRef;
  23. class raw_ostream;
  24. class raw_pwrite_stream;
  25. class MCWinCOFFStreamer : public MCObjectStreamer {
  26. public:
  27. MCWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB, MCCodeEmitter &CE,
  28. raw_pwrite_stream &OS);
  29. /// state management
  30. void reset() override {
  31. CurSymbol = nullptr;
  32. MCObjectStreamer::reset();
  33. }
  34. /// \name MCStreamer interface
  35. /// \{
  36. void InitSections(bool NoExecStack) 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 EmitCOFFSafeSEH(MCSymbol const *Symbol) override;
  47. void EmitCOFFSectionIndex(MCSymbol const *Symbol) override;
  48. void EmitCOFFSecRel32(MCSymbol const *Symbol) 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(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
  54. unsigned ByteAlignment) override;
  55. void EmitTBSSSymbol(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. protected:
  63. const MCSymbol *CurSymbol;
  64. void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) override;
  65. private:
  66. LLVM_ATTRIBUTE_NORETURN void FatalError(const Twine &Msg) const;
  67. };
  68. }
  69. #endif