LLVM  8.0.1
MCWasmStreamer.h
Go to the documentation of this file.
1 //===- MCWasmStreamer.h - MCStreamer Wasm 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_MCWASMSTREAMER_H
11 #define LLVM_MC_MCWASMSTREAMER_H
12 
13 #include "MCAsmBackend.h"
14 #include "MCCodeEmitter.h"
15 #include "llvm/ADT/SmallPtrSet.h"
16 #include "llvm/MC/MCDirectives.h"
18 #include "llvm/MC/MCObjectWriter.h"
19 #include "llvm/MC/SectionKind.h"
20 #include "llvm/Support/DataTypes.h"
21 
22 namespace llvm {
23 class MCAssembler;
24 class MCExpr;
25 class MCInst;
26 class raw_ostream;
27 
29 public:
30  MCWasmStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB,
31  std::unique_ptr<MCObjectWriter> OW,
32  std::unique_ptr<MCCodeEmitter> Emitter)
33  : MCObjectStreamer(Context, std::move(TAB), std::move(OW),
34  std::move(Emitter)),
35  SeenIdent(false) {}
36 
37  ~MCWasmStreamer() override;
38 
39  /// state management
40  void reset() override {
41  SeenIdent = false;
43  }
44 
45  /// \name MCStreamer Interface
46  /// @{
47 
48  void ChangeSection(MCSection *Section, const MCExpr *Subsection) override;
49  void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
50  void EmitThumbFunc(MCSymbol *Func) override;
51  void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
52  bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
53  void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override;
54  void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
55  unsigned ByteAlignment) override;
56 
57  void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
58 
59  void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
60  unsigned ByteAlignment) override;
61 
62  void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
63  uint64_t Size = 0, unsigned ByteAlignment = 0,
64  SMLoc Loc = SMLoc()) override;
65  void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
66  unsigned ByteAlignment = 0) override;
67  void EmitValueImpl(const MCExpr *Value, unsigned Size,
68  SMLoc Loc = SMLoc()) override;
69 
70  void EmitIdent(StringRef IdentString) override;
71 
72  void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned) override;
73 
74  void FinishImpl() override;
75 
76 private:
77  void EmitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &) override;
78  void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override;
79 
80  /// Merge the content of the fragment \p EF into the fragment \p DF.
81  void mergeFragment(MCDataFragment *, MCDataFragment *);
82 
83  bool SeenIdent;
84 };
85 
86 } // end namespace llvm
87 
88 #endif
Instances of this class represent a uniqued identifier for a section in the current translation unit...
Definition: MCSection.h:39
This class represents lattice values for constants.
Definition: AllocatorList.h:24
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:42
Definition: BitVector.h:938
void EmitIdent(StringRef IdentString) override
Emit the "identifiers" directive.
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:36
Context object for machine code objects.
Definition: MCContext.h:63
bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override
Add the given Attribute to Symbol.
void ChangeSection(MCSection *Section, const MCExpr *Subsection) override
Update streamer for a new active section.
Streaming object file generation interface.
void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment=0) override
Emit a thread local bss (.tbss) symbol.
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:161
void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override
Set the DescValue for the Symbol.
Flag
These should be considered private to the implementation of the MCInstrDesc class.
Definition: MCInstrDesc.h:118
void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override
Emit an weak reference from Alias to Symbol.
void EmitThumbFunc(MCSymbol *Func) override
Note in the output that the specified Func is a Thumb mode function (ARM target only).
void reset() override
state management
void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment) override
Emit a local common (.lcomm) symbol.
void EmitAssemblerFlag(MCAssemblerFlag Flag) override
Note in the output the specified Flag.
void FinishImpl() override
Streamer specific finalization.
MCSymbolAttr
Definition: MCDirectives.h:19
void EmitZerofill(MCSection *Section, MCSymbol *Symbol=nullptr, uint64_t Size=0, unsigned ByteAlignment=0, SMLoc Loc=SMLoc()) override
Emit the zerofill section and an optional symbol.
void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment) override
Emit a common symbol.
MCAssemblerFlag
Definition: MCDirectives.h:48
void reset() override
state management
Generic base class for all target subtargets.
MCWasmStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter)
void EmitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc=SMLoc()) override
Emit the expression Value into the output as a native integer of the given Size bytes.
uint32_t Size
Definition: Profile.cpp:47
void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned) override
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
Fragment for data and encoded instructions.
Definition: MCFragment.h:242
void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override
Emit an ELF .size directive.
LLVM Value Representation.
Definition: Value.h:73
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
Represents a location in source code.
Definition: SMLoc.h:24