LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MCELFStreamer.h
Go to the documentation of this file.
1 //===- MCELFStreamer.h - MCStreamer ELF 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_MCELFSTREAMER_H
11 #define LLVM_MC_MCELFSTREAMER_H
12 
13 #include "llvm/ADT/SmallPtrSet.h"
14 #include "llvm/MC/MCDirectives.h"
16 #include "llvm/MC/SectionKind.h"
17 #include "llvm/Support/DataTypes.h"
18 #include <vector>
19 
20 namespace llvm {
21 class MCAsmBackend;
22 class MCAssembler;
23 class MCCodeEmitter;
24 class MCExpr;
25 class MCInst;
26 class MCSymbol;
27 class MCSymbolData;
28 class raw_ostream;
29 
31 public:
32  MCELFStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
33  MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter)
34  : MCObjectStreamer(Context, TargetStreamer, TAB, OS, Emitter),
35  SeenIdent(false) {}
36 
37  MCELFStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
38  MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter,
39  MCAssembler *Assembler)
40  : MCObjectStreamer(Context, TargetStreamer, TAB, OS, Emitter, Assembler),
41  SeenIdent(false) {}
42 
43  virtual ~MCELFStreamer();
44 
45  /// @name MCStreamer Interface
46  /// @{
47 
48  virtual void InitSections();
49  virtual void InitToTextSection();
50  virtual void ChangeSection(const MCSection *Section,
51  const MCExpr *Subsection);
52  virtual void EmitLabel(MCSymbol *Symbol);
53  virtual void EmitDebugLabel(MCSymbol *Symbol);
54  virtual void EmitAssemblerFlag(MCAssemblerFlag Flag);
55  virtual void EmitThumbFunc(MCSymbol *Func);
56  virtual void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol);
58  virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
59  virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
60  unsigned ByteAlignment);
61  virtual void BeginCOFFSymbolDef(const MCSymbol *Symbol);
62  virtual void EmitCOFFSymbolStorageClass(int StorageClass);
63  virtual void EmitCOFFSymbolType(int Type);
64  virtual void EndCOFFSymbolDef();
65 
67 
68  virtual void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value);
69 
70  virtual void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
71  unsigned ByteAlignment);
72 
73  virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
74  uint64_t Size = 0, unsigned ByteAlignment = 0);
75  virtual void EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol,
76  uint64_t Size, unsigned ByteAlignment = 0);
77  virtual void EmitValueImpl(const MCExpr *Value, unsigned Size);
78 
79  virtual void EmitFileDirective(StringRef Filename);
80 
81  virtual void EmitIdent(StringRef IdentString);
82 
83  virtual void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned);
84 
85  virtual void Flush();
86 
87  virtual void FinishImpl();
88 
89 private:
90  virtual void EmitInstToFragment(const MCInst &Inst);
91  virtual void EmitInstToData(const MCInst &Inst);
92 
93  virtual void EmitBundleAlignMode(unsigned AlignPow2);
94  virtual void EmitBundleLock(bool AlignToEnd);
95  virtual void EmitBundleUnlock();
96 
97  void fixSymbolsInTLSFixups(const MCExpr *expr);
98 
99  bool SeenIdent;
100 
101  struct LocalCommon {
102  MCSymbolData *SD;
103  uint64_t Size;
104  unsigned ByteAlignment;
105  };
106 
107  std::vector<LocalCommon> LocalCommons;
108 
109  SmallPtrSet<MCSymbol *, 16> BindingExplicitlySet;
110 
111 
112  void SetSection(StringRef Section, unsigned Type, unsigned Flags,
113  SectionKind Kind);
114  void SetSectionData();
115  void SetSectionText();
116  void SetSectionBss();
117 };
118 
119 MCELFStreamer *createARMELFStreamer(MCContext &Context, MCAsmBackend &TAB,
120  raw_ostream &OS, MCCodeEmitter *Emitter,
121  bool RelaxAll, bool NoExecStack,
122  bool IsThumb);
123 
124 } // end namespace llvm
125 
126 #endif
COFF::RelocationTypeX86 Type
Definition: COFFYAML.cpp:227
virtual void InitToTextSection()
InitToTextSection - Create a text section and switch the streamer to it.
virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment)
MCELFStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer, MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter, MCAssembler *Assembler)
Definition: MCELFStreamer.h:37
virtual void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol)
virtual void ChangeSection(const MCSection *Section, const MCExpr *Subsection)
COFF::SymbolStorageClass StorageClass
Definition: COFFYAML.cpp:204
virtual void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned)
virtual void EmitValueImpl(const MCExpr *Value, unsigned Size)
virtual void EmitCOFFSymbolStorageClass(int StorageClass)
virtual void FinishImpl()
FinishImpl - Streamer specific finalization.
virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol=0, uint64_t Size=0, unsigned ByteAlignment=0)
#define false
Definition: ConvertUTF.c:64
virtual void EmitAssemblerFlag(MCAssemblerFlag Flag)
EmitAssemblerFlag - Note in the output the specified Flag.
Streaming object file generation interface.
virtual void EmitIdent(StringRef IdentString)
virtual void InitSections()
InitSections - Create the default sections and set the initial one.
virtual void EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment=0)
MCCodeEmitter - Generic instruction encoding interface.
Definition: MCCodeEmitter.h:22
virtual void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value)
virtual void BeginCOFFSymbolDef(const MCSymbol *Symbol)
virtual void EmitFileDirective(StringRef Filename)
virtual void EndCOFFSymbolDef()
EndCOFFSymbolDef - Marks the end of the symbol definition.
virtual void EmitCOFFSymbolType(int Type)
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue)
virtual bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute)
EmitSymbolAttribute - Add the given Attribute to Symbol.
MCSymbolAttr
Definition: MCDirectives.h:19
virtual void EmitDebugLabel(MCSymbol *Symbol)
virtual void EmitLabel(MCSymbol *Symbol)
virtual void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment)
virtual MCSymbolData & getOrCreateSymbolData(MCSymbol *Symbol)
getOrCreateSymbolData - Get symbol data for given symbol.
MCAssemblerFlag
Definition: MCDirectives.h:47
MCELFStreamer * createARMELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter, bool RelaxAll, bool NoExecStack, bool IsThumb)
MCELFStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer, MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter)
Definition: MCELFStreamer.h:32
LLVM Value Representation.
Definition: Value.h:66
MCAsmBackend - Generic interface to target specific assembler backends.
Definition: MCAsmBackend.h:34
virtual void Flush()
Flush - Causes any cached state to be written out.
cl::opt< bool > RelaxAll("mc-relax-all", cl::desc("When used with filetype=obj, ""relax all fixups in the emitted object file"))
virtual void EmitThumbFunc(MCSymbol *Func)