1 //===- lib/MC/MCNullStreamer.cpp - Dummy Streamer Implementation ----------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/MC/MCStreamer.h"
12 #include "llvm/MC/MCContext.h"
13 #include "llvm/MC/MCInst.h"
14 #include "llvm/MC/MCSectionMachO.h"
15 #include "llvm/MC/MCSymbol.h"
21 class MCNullStreamer
: public MCStreamer
{
23 MCNullStreamer(MCContext
&Context
) : MCStreamer(Context
) {}
25 /// @name MCStreamer Interface
28 virtual void InitSections() {
31 virtual void ChangeSection(const MCSection
*Section
) {
34 virtual void EmitLabel(MCSymbol
*Symbol
) {
35 assert(Symbol
->isUndefined() && "Cannot define a symbol twice!");
36 assert(getCurrentSection() && "Cannot emit before setting section!");
37 Symbol
->setSection(*getCurrentSection());
40 virtual void EmitAssemblerFlag(MCAssemblerFlag Flag
) {}
41 virtual void EmitThumbFunc(MCSymbol
*Func
) {}
43 virtual void EmitAssignment(MCSymbol
*Symbol
, const MCExpr
*Value
) {}
44 virtual void EmitWeakReference(MCSymbol
*Alias
, const MCSymbol
*Symbol
){}
45 virtual void EmitDwarfAdvanceLineAddr(int64_t LineDelta
,
46 const MCSymbol
*LastLabel
,
47 const MCSymbol
*Label
) {}
49 virtual void EmitSymbolAttribute(MCSymbol
*Symbol
, MCSymbolAttr Attribute
){}
51 virtual void EmitSymbolDesc(MCSymbol
*Symbol
, unsigned DescValue
) {}
53 virtual void BeginCOFFSymbolDef(const MCSymbol
*Symbol
) {}
54 virtual void EmitCOFFSymbolStorageClass(int StorageClass
) {}
55 virtual void EmitCOFFSymbolType(int Type
) {}
56 virtual void EndCOFFSymbolDef() {}
58 virtual void EmitELFSize(MCSymbol
*Symbol
, const MCExpr
*Value
) {}
59 virtual void EmitCommonSymbol(MCSymbol
*Symbol
, uint64_t Size
,
60 unsigned ByteAlignment
) {}
61 virtual void EmitLocalCommonSymbol(MCSymbol
*Symbol
, uint64_t Size
) {}
63 virtual void EmitZerofill(const MCSection
*Section
, MCSymbol
*Symbol
= 0,
64 unsigned Size
= 0, unsigned ByteAlignment
= 0) {}
65 virtual void EmitTBSSSymbol(const MCSection
*Section
, MCSymbol
*Symbol
,
66 uint64_t Size
, unsigned ByteAlignment
) {}
67 virtual void EmitBytes(StringRef Data
, unsigned AddrSpace
) {}
69 virtual void EmitValueImpl(const MCExpr
*Value
, unsigned Size
,
70 unsigned AddrSpace
) {}
71 virtual void EmitULEB128Value(const MCExpr
*Value
) {}
72 virtual void EmitSLEB128Value(const MCExpr
*Value
) {}
73 virtual void EmitGPRel32Value(const MCExpr
*Value
) {}
74 virtual void EmitValueToAlignment(unsigned ByteAlignment
, int64_t Value
= 0,
75 unsigned ValueSize
= 1,
76 unsigned MaxBytesToEmit
= 0) {}
78 virtual void EmitCodeAlignment(unsigned ByteAlignment
,
79 unsigned MaxBytesToEmit
= 0) {}
81 virtual void EmitValueToOffset(const MCExpr
*Offset
,
82 unsigned char Value
= 0) {}
84 virtual void EmitFileDirective(StringRef Filename
) {}
85 virtual bool EmitDwarfFileDirective(unsigned FileNo
,StringRef Filename
) {
88 virtual void EmitDwarfLocDirective(unsigned FileNo
, unsigned Line
,
89 unsigned Column
, unsigned Flags
,
90 unsigned Isa
, unsigned Discriminator
,
91 StringRef FileName
) {}
92 virtual void EmitInstruction(const MCInst
&Inst
) {}
94 virtual void Finish() {}
101 MCStreamer
*llvm::createNullStreamer(MCContext
&Context
) {
102 return new MCNullStreamer(Context
);