1//===- MCWinCOFFStreamer.h - COFF Object File Interface ---------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_MC_MCWINCOFFSTREAMER_H
10#define LLVM_MC_MCWINCOFFSTREAMER_H
11
12#include "llvm/MC/MCDirectives.h"
13#include "llvm/MC/MCObjectStreamer.h"
14
15namespace llvm {
16
17class MCAsmBackend;
18class MCContext;
19class MCCodeEmitter;
20class MCInst;
21class MCSection;
22class MCSubtargetInfo;
23class MCSymbol;
24class StringRef;
25class raw_pwrite_stream;
26
27class MCWinCOFFStreamer : public MCObjectStreamer {
28public:
29 MCWinCOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
30 std::unique_ptr<MCCodeEmitter> CE,
31 std::unique_ptr<MCObjectWriter> OW);
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, const MCSubtargetInfo &STI) 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 emitCOFFSymbolIndex(MCSymbol const *Symbol) override;
54 void emitCOFFSectionIndex(MCSymbol const *Symbol) override;
55 void emitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override;
56 void emitCOFFImgRel32(MCSymbol const *Symbol, int64_t Offset) override;
57 void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
58 Align ByteAlignment) override;
59 void emitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
60 Align ByteAlignment) override;
61 void emitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
62 void emitZerofill(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
63 Align ByteAlignment, SMLoc Loc = SMLoc()) override;
64 void emitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
65 Align ByteAlignment) override;
66 void emitIdent(StringRef IdentString) override;
67 void emitWinEHHandlerData(SMLoc Loc) override;
68 void emitCGProfileEntry(const MCSymbolRefExpr *From,
69 const MCSymbolRefExpr *To, uint64_t Count) override;
70 void finishImpl() override;
71
72 /// \}
73
74protected:
75 const MCSymbol *CurSymbol;
76
77 void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) override;
78
79 void finalizeCGProfileEntry(const MCSymbolRefExpr *&S);
80 void finalizeCGProfile();
81
82private:
83 void Error(const Twine &Msg) const;
84};
85
86} // end namespace llvm
87
88#endif // LLVM_MC_MCWINCOFFSTREAMER_H
89

source code of llvm/include/llvm/MC/MCWinCOFFStreamer.h