1 //===- MCWasmStreamer.h - MCStreamer Wasm Object File Interface -*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_MC_MCWASMSTREAMER_H
10 #define LLVM_MC_MCWASMSTREAMER_H
12 #include "MCAsmBackend.h"
13 #include "MCCodeEmitter.h"
14 #include "llvm/ADT/SmallPtrSet.h"
15 #include "llvm/MC/MCDirectives.h"
16 #include "llvm/MC/MCObjectStreamer.h"
17 #include "llvm/MC/MCObjectWriter.h"
18 #include "llvm/MC/SectionKind.h"
19 #include "llvm/Support/DataTypes.h"
27 class MCWasmStreamer
: public MCObjectStreamer
{
29 MCWasmStreamer(MCContext
&Context
, std::unique_ptr
<MCAsmBackend
> TAB
,
30 std::unique_ptr
<MCObjectWriter
> OW
,
31 std::unique_ptr
<MCCodeEmitter
> Emitter
)
32 : MCObjectStreamer(Context
, std::move(TAB
), std::move(OW
),
36 ~MCWasmStreamer() override
;
39 void reset() override
{
41 MCObjectStreamer::reset();
44 /// \name MCStreamer Interface
47 void ChangeSection(MCSection
*Section
, const MCExpr
*Subsection
) override
;
48 void EmitAssemblerFlag(MCAssemblerFlag Flag
) override
;
49 void EmitThumbFunc(MCSymbol
*Func
) override
;
50 void EmitWeakReference(MCSymbol
*Alias
, const MCSymbol
*Symbol
) override
;
51 bool EmitSymbolAttribute(MCSymbol
*Symbol
, MCSymbolAttr Attribute
) override
;
52 void EmitSymbolDesc(MCSymbol
*Symbol
, unsigned DescValue
) override
;
53 void EmitCommonSymbol(MCSymbol
*Symbol
, uint64_t Size
,
54 unsigned ByteAlignment
) override
;
56 void emitELFSize(MCSymbol
*Symbol
, const MCExpr
*Value
) override
;
58 void EmitLocalCommonSymbol(MCSymbol
*Symbol
, uint64_t Size
,
59 unsigned ByteAlignment
) override
;
61 void EmitZerofill(MCSection
*Section
, MCSymbol
*Symbol
= nullptr,
62 uint64_t Size
= 0, unsigned ByteAlignment
= 0,
63 SMLoc Loc
= SMLoc()) override
;
64 void EmitTBSSSymbol(MCSection
*Section
, MCSymbol
*Symbol
, uint64_t Size
,
65 unsigned ByteAlignment
= 0) override
;
66 void EmitValueImpl(const MCExpr
*Value
, unsigned Size
,
67 SMLoc Loc
= SMLoc()) override
;
69 void EmitIdent(StringRef IdentString
) override
;
71 void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned) override
;
73 void FinishImpl() override
;
76 void EmitInstToFragment(const MCInst
&Inst
, const MCSubtargetInfo
&) override
;
77 void EmitInstToData(const MCInst
&Inst
, const MCSubtargetInfo
&) override
;
79 /// Merge the content of the fragment \p EF into the fragment \p DF.
80 void mergeFragment(MCDataFragment
*, MCDataFragment
*);
85 } // end namespace llvm