LLVM  13.0.0git
MCObjectStreamer.h
Go to the documentation of this file.
1 //===- MCObjectStreamer.h - MCStreamer 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_MCOBJECTSTREAMER_H
10 #define LLVM_MC_MCOBJECTSTREAMER_H
11 
12 #include "llvm/ADT/SetVector.h"
13 #include "llvm/ADT/SmallVector.h"
14 #include "llvm/MC/MCAssembler.h"
15 #include "llvm/MC/MCSection.h"
16 #include "llvm/MC/MCStreamer.h"
17 
18 namespace llvm {
19 class MCAssembler;
20 class MCCodeEmitter;
21 class MCSubtargetInfo;
22 class MCExpr;
23 class MCFragment;
24 class MCDataFragment;
25 class MCAsmBackend;
26 class raw_ostream;
27 class raw_pwrite_stream;
28 
29 /// Streaming object file generation interface.
30 ///
31 /// This class provides an implementation of the MCStreamer interface which is
32 /// suitable for use with the assembler backend. Specific object file formats
33 /// are expected to subclass this interface to implement directives specific
34 /// to that file format or custom semantics expected by the object writer
35 /// implementation.
36 class MCObjectStreamer : public MCStreamer {
37  std::unique_ptr<MCAssembler> Assembler;
38  MCSection::iterator CurInsertionPoint;
39  bool EmitEHFrame;
40  bool EmitDebugFrame;
41  SmallVector<MCSymbol *, 2> PendingLabels;
42  SmallSetVector<MCSection *, 4> PendingLabelSections;
43  unsigned CurSubsectionIdx;
44  struct PendingMCFixup {
45  const MCSymbol *Sym;
46  MCFixup Fixup;
48  PendingMCFixup(const MCSymbol *McSym, MCDataFragment *F, MCFixup McFixup)
49  : Sym(McSym), Fixup(McFixup), DF(F) {}
50  };
51  SmallVector<PendingMCFixup, 2> PendingFixups;
52 
53  virtual void emitInstToData(const MCInst &Inst, const MCSubtargetInfo&) = 0;
54  void emitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override;
55  void emitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override;
56  MCSymbol *emitCFILabel() override;
57  void emitInstructionImpl(const MCInst &Inst, const MCSubtargetInfo &STI);
58  void resolvePendingFixups();
59 
60 protected:
61  MCObjectStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB,
62  std::unique_ptr<MCObjectWriter> OW,
63  std::unique_ptr<MCCodeEmitter> Emitter);
65 
66 public:
67  /// state management
68  void reset() override;
69 
70  /// Object streamers require the integrated assembler.
71  bool isIntegratedAssemblerRequired() const override { return true; }
72 
73  void emitFrames(MCAsmBackend *MAB);
74  void emitCFISections(bool EH, bool Debug) override;
75 
77 
78  void insert(MCFragment *F) {
80  MCSection *CurSection = getCurrentSectionOnly();
81  CurSection->getFragmentList().insert(CurInsertionPoint, F);
82  F->setParent(CurSection);
83  }
84 
85  /// Get a data fragment to write into, creating a new one if the current
86  /// fragment is not a data fragment.
87  /// Optionally a \p STI can be passed in so that a new fragment is created
88  /// if the Subtarget differs from the current fragment.
90 
91 protected:
92  bool changeSectionImpl(MCSection *Section, const MCExpr *Subsection);
93 
94  /// Assign a label to the current Section and Subsection even though a
95  /// fragment is not yet present. Use flushPendingLabels(F) to associate
96  /// a fragment with this label.
97  void addPendingLabel(MCSymbol* label);
98 
99  /// If any labels have been emitted but not assigned fragments in the current
100  /// Section and Subsection, ensure that they get assigned, either to fragment
101  /// F if possible or to a new data fragment. Optionally, one can provide an
102  /// offset \p FOffset as a symbol offset within the fragment.
103  void flushPendingLabels(MCFragment *F, uint64_t FOffset = 0);
104 
105 public:
106  void visitUsedSymbol(const MCSymbol &Sym) override;
107 
108  /// Create a data fragment for any pending labels across all Sections
109  /// and Subsections.
110  void flushPendingLabels();
111 
112  MCAssembler &getAssembler() { return *Assembler; }
113  MCAssembler *getAssemblerPtr() override;
114  /// \name MCStreamer Interface
115  /// @{
116 
117  void emitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override;
118  virtual void emitLabelAtPos(MCSymbol *Symbol, SMLoc Loc, MCFragment *F,
119  uint64_t Offset);
120  void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
121  void emitValueImpl(const MCExpr *Value, unsigned Size,
122  SMLoc Loc = SMLoc()) override;
123  void emitULEB128Value(const MCExpr *Value) override;
124  void emitSLEB128Value(const MCExpr *Value) override;
125  void emitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
126  void changeSection(MCSection *Section, const MCExpr *Subsection) override;
127  void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override;
128 
129  /// Emit an instruction to a special fragment, because this instruction
130  /// can change its size during relaxation.
131  virtual void emitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &);
132 
133  void emitBundleAlignMode(unsigned AlignPow2) override;
134  void emitBundleLock(bool AlignToEnd) override;
135  void emitBundleUnlock() override;
136  void emitBytes(StringRef Data) override;
137  void emitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
138  unsigned ValueSize = 1,
139  unsigned MaxBytesToEmit = 0) override;
140  void emitCodeAlignment(unsigned ByteAlignment,
141  unsigned MaxBytesToEmit = 0) override;
142  void emitValueToOffset(const MCExpr *Offset, unsigned char Value,
143  SMLoc Loc) override;
144  void emitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column,
145  unsigned Flags, unsigned Isa,
146  unsigned Discriminator,
147  StringRef FileName) override;
148  void emitDwarfAdvanceLineAddr(int64_t LineDelta, const MCSymbol *LastLabel,
149  const MCSymbol *Label,
150  unsigned PointerSize) override;
151  void emitDwarfLineEndEntry(MCSection *Section, MCSymbol *LastLabel) override;
152  void emitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel,
153  const MCSymbol *Label);
154  void emitCVLocDirective(unsigned FunctionId, unsigned FileNo, unsigned Line,
155  unsigned Column, bool PrologueEnd, bool IsStmt,
156  StringRef FileName, SMLoc Loc) override;
157  void emitCVLinetableDirective(unsigned FunctionId, const MCSymbol *Begin,
158  const MCSymbol *End) override;
159  void emitCVInlineLinetableDirective(unsigned PrimaryFunctionId,
160  unsigned SourceFileId,
161  unsigned SourceLineNum,
162  const MCSymbol *FnStartSym,
163  const MCSymbol *FnEndSym) override;
165  ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
166  StringRef FixedSizePortion) override;
167  void emitCVStringTableDirective() override;
168  void emitCVFileChecksumsDirective() override;
169  void emitCVFileChecksumOffsetDirective(unsigned FileNo) override;
170  void emitDTPRel32Value(const MCExpr *Value) override;
171  void emitDTPRel64Value(const MCExpr *Value) override;
172  void emitTPRel32Value(const MCExpr *Value) override;
173  void emitTPRel64Value(const MCExpr *Value) override;
174  void emitGPRel32Value(const MCExpr *Value) override;
175  void emitGPRel64Value(const MCExpr *Value) override;
177  emitRelocDirective(const MCExpr &Offset, StringRef Name, const MCExpr *Expr,
178  SMLoc Loc, const MCSubtargetInfo &STI) override;
179  using MCStreamer::emitFill;
180  void emitFill(const MCExpr &NumBytes, uint64_t FillValue,
181  SMLoc Loc = SMLoc()) override;
182  void emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr,
183  SMLoc Loc = SMLoc()) override;
184  void emitNops(int64_t NumBytes, int64_t ControlledNopLength,
185  SMLoc Loc) override;
186  void emitFileDirective(StringRef Filename) override;
187  void emitFileDirective(StringRef Filename, StringRef CompilerVerion,
188  StringRef TimeStamp, StringRef Description) override;
189 
190  void emitAddrsig() override;
191  void emitAddrsigSym(const MCSymbol *Sym) override;
192 
193  void finishImpl() override;
194 
195  /// Emit the absolute difference between two symbols if possible.
196  ///
197  /// Emit the absolute difference between \c Hi and \c Lo, as long as we can
198  /// compute it. Currently, that requires that both symbols are in the same
199  /// data fragment and that the target has not specified that diff expressions
200  /// require relocations to be emitted. Otherwise, do nothing and return
201  /// \c false.
202  ///
203  /// \pre Offset of \c Hi is greater than the offset \c Lo.
204  void emitAbsoluteSymbolDiff(const MCSymbol *Hi, const MCSymbol *Lo,
205  unsigned Size) override;
206 
208  const MCSymbol *Lo) override;
209 
210  bool mayHaveInstructions(MCSection &Sec) const override;
211 };
212 
213 } // end namespace llvm
214 
215 #endif
llvm::Check::Size
@ Size
Definition: FileCheck.h:73
llvm::MCObjectStreamer::emitRelocDirective
Optional< std::pair< bool, std::string > > emitRelocDirective(const MCExpr &Offset, StringRef Name, const MCExpr *Expr, SMLoc Loc, const MCSubtargetInfo &STI) override
Record a relocation described by the .reloc directive.
Definition: MCObjectStreamer.cpp:746
llvm::MCObjectStreamer::emitDwarfLocDirective
void emitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, unsigned Discriminator, StringRef FileName) override
This implements the DWARF2 '.loc fileno lineno ...' assembler directive.
Definition: MCObjectStreamer.cpp:448
llvm::MCObjectStreamer::emitCVLinetableDirective
void emitCVLinetableDirective(unsigned FunctionId, const MCSymbol *Begin, const MCSymbol *End) override
This implements the CodeView '.cv_linetable' assembler directive.
Definition: MCObjectStreamer.cpp:550
llvm::MCObjectStreamer::emitFileDirective
void emitFileDirective(StringRef Filename) override
Switch to a new logical file.
Definition: MCObjectStreamer.cpp:847
llvm
---------------------— PointerInfo ------------------------------------—
Definition: AllocatorList.h:23
llvm::MCSymbol
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:41
llvm::MCObjectStreamer::emitLabel
void emitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc()) override
Emit a label for Symbol into the current section.
Definition: MCObjectStreamer.cpp:264
llvm::MCObjectStreamer::emitCVLocDirective
void emitCVLocDirective(unsigned FunctionId, unsigned FileNo, unsigned Line, unsigned Column, bool PrologueEnd, bool IsStmt, StringRef FileName, SMLoc Loc) override
This implements the CodeView '.cv_loc' assembler directive.
Definition: MCObjectStreamer.cpp:534
llvm::MCObjectStreamer::~MCObjectStreamer
~MCObjectStreamer()
Definition: MCObjectStreamer.cpp:40
llvm::MCObjectStreamer::emitValueToAlignment
void emitValueToAlignment(unsigned ByteAlignment, int64_t Value=0, unsigned ValueSize=1, unsigned MaxBytesToEmit=0) override
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
Definition: MCObjectStreamer.cpp:597
llvm::MCContext
Context object for machine code objects.
Definition: MCContext.h:71
llvm::MCObjectStreamer::MCObjectStreamer
MCObjectStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter)
Definition: MCObjectStreamer.cpp:28
llvm::MCObjectStreamer::emitDTPRel64Value
void emitDTPRel64Value(const MCExpr *Value) override
Emit the expression Value into the output as a dtprel (64-bit DTP relative) value.
Definition: MCObjectStreamer.cpp:634
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1168
llvm::MCObjectStreamer::emitAbsoluteSymbolDiffAsULEB128
void emitAbsoluteSymbolDiffAsULEB128(const MCSymbol *Hi, const MCSymbol *Lo) override
Emit the absolute difference between two symbols encoded with ULEB128.
Definition: MCObjectStreamer.cpp:149
llvm::MipsISD::Lo
@ Lo
Definition: MipsISelLowering.h:79
MCAssembler.h
llvm::MCObjectStreamer::emitBundleLock
void emitBundleLock(bool AlignToEnd) override
The following instructions are a bundle-locked group.
Definition: MCObjectStreamer.cpp:440
llvm::MCObjectStreamer::emitCFISections
void emitCFISections(bool EH, bool Debug) override
Definition: MCObjectStreamer.cpp:216
llvm::MCObjectStreamer::emitAbsoluteSymbolDiff
void emitAbsoluteSymbolDiff(const MCSymbol *Hi, const MCSymbol *Lo, unsigned Size) override
Emit the absolute difference between two symbols if possible.
Definition: MCObjectStreamer.cpp:140
llvm::MCObjectStreamer::emitLabelAtPos
virtual void emitLabelAtPos(MCSymbol *Symbol, SMLoc Loc, MCFragment *F, uint64_t Offset)
Definition: MCObjectStreamer.cpp:288
llvm::Optional
Definition: APInt.h:33
llvm::MCObjectStreamer::visitUsedSymbol
void visitUsedSymbol(const MCSymbol &Sym) override
Definition: MCObjectStreamer.cpp:212
Offset
uint64_t Offset
Definition: ELFObjHandler.cpp:81
llvm::MCObjectStreamer::emitCVFileChecksumOffsetDirective
void emitCVFileChecksumOffsetDirective(unsigned FileNo) override
This implements the CodeView '.cv_filechecksumoffset' assembler directive.
Definition: MCObjectStreamer.cpp:586
llvm::MCInst
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:184
llvm::MCObjectStreamer::changeSection
void changeSection(MCSection *Section, const MCExpr *Subsection) override
Update streamer for a new active section.
Definition: MCObjectStreamer.cpp:329
llvm::MCObjectStreamer::reset
void reset() override
state management
Definition: MCObjectStreamer.cpp:157
llvm::MCObjectStreamer::emitDTPRel32Value
void emitDTPRel32Value(const MCExpr *Value) override
Emit the expression Value into the output as a dtprel (32-bit DTP relative) value.
Definition: MCObjectStreamer.cpp:624
llvm::Data
@ Data
Definition: SIMachineScheduler.h:56
llvm::MCSection::getFragmentList
MCSection::FragmentListType & getFragmentList()
Definition: MCSection.h:157
F
#define F(x, y, z)
Definition: MD5.cpp:56
llvm::MipsISD::Hi
@ Hi
Definition: MipsISelLowering.h:75
Context
LLVMContext & Context
Definition: NVVMIntrRange.cpp:66
llvm::ARMBuildAttrs::Section
@ Section
Legacy Tags.
Definition: ARMBuildAttributes.h:78
llvm::MCFragment
Definition: MCFragment.h:31
llvm::MCStreamer
Streaming machine code generation interface.
Definition: MCStreamer.h:197
llvm::MCAsmBackend
Generic interface to target specific assembler backends.
Definition: MCAsmBackend.h:36
llvm::SMLoc
Represents a location in source code.
Definition: SMLoc.h:23
llvm::MCObjectStreamer::emitGPRel32Value
void emitGPRel32Value(const MCExpr *Value) override
Emit the expression Value into the output as a gprel32 (32-bit GP relative) value.
Definition: MCObjectStreamer.cpp:664
llvm::MCObjectStreamer::emitValueImpl
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.
Definition: MCObjectStreamer.cpp:222
llvm::MCObjectStreamer::emitInstruction
void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override
Emit the given Instruction into the current section.
Definition: MCObjectStreamer.cpp:362
llvm::MCObjectStreamer::emitBundleAlignMode
void emitBundleAlignMode(unsigned AlignPow2) override
Set the bundle alignment mode from now on in the section.
Definition: MCObjectStreamer.cpp:436
llvm::MCObjectStreamer
Streaming object file generation interface.
Definition: MCObjectStreamer.h:36
llvm::MCObjectStreamer::emitDwarfAdvanceLineAddr
void emitDwarfAdvanceLineAddr(int64_t LineDelta, const MCSymbol *LastLabel, const MCSymbol *Label, unsigned PointerSize) override
If targets does not support representing debug line section by .loc/.file directives in assembly outp...
Definition: MCObjectStreamer.cpp:486
llvm::MCObjectStreamer::emitDwarfLineEndEntry
void emitDwarfLineEndEntry(MCSection *Section, MCSymbol *LastLabel) override
Emit the debug line end entry.
Definition: MCObjectStreamer.cpp:505
llvm::MCObjectStreamer::emitTPRel32Value
void emitTPRel32Value(const MCExpr *Value) override
Emit the expression Value into the output as a tprel (32-bit TP relative) value.
Definition: MCObjectStreamer.cpp:644
llvm::MCObjectStreamer::emitAssignment
void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override
Emit an assignment of Value to Symbol.
Definition: MCObjectStreamer.cpp:353
llvm::MCObjectStreamer::getCurrentFragment
MCFragment * getCurrentFragment() const
Definition: MCObjectStreamer.cpp:179
llvm::MCStreamer::getCurrentSectionOnly
MCSection * getCurrentSectionOnly() const
Definition: MCStreamer.h:374
llvm::MCObjectStreamer::emitValueToOffset
void emitValueToOffset(const MCExpr *Offset, unsigned char Value, SMLoc Loc) override
Emit some number of copies of Value until the byte offset Offset is reached.
Definition: MCObjectStreamer.cpp:617
DF
static RegisterPass< DebugifyFunctionPass > DF("debugify-function", "Attach debug info to a function")
llvm::MCObjectStreamer::addPendingLabel
void addPendingLabel(MCSymbol *label)
Assign a label to the current Section and Subsection even though a fragment is not yet present.
Definition: MCObjectStreamer.cpp:51
llvm::MCAssembler
Definition: MCAssembler.h:60
llvm::MCObjectStreamer::emitCVFileChecksumsDirective
void emitCVFileChecksumsDirective() override
This implements the CodeView '.cv_filechecksums' assembler directive.
Definition: MCObjectStreamer.cpp:582
llvm::MCObjectStreamer::emitBundleUnlock
void emitBundleUnlock() override
Ends a bundle-locked group.
Definition: MCObjectStreamer.cpp:444
llvm::MCObjectStreamer::emitSLEB128Value
void emitSLEB128Value(const MCExpr *Value) override
Definition: MCObjectStreamer.cpp:315
Debug
bool Debug
Definition: PassBuilderBindings.cpp:51
llvm::MCObjectStreamer::insert
void insert(MCFragment *F)
Definition: MCObjectStreamer.h:78
llvm::MCObjectStreamer::isIntegratedAssemblerRequired
bool isIntegratedAssemblerRequired() const override
Object streamers require the integrated assembler.
Definition: MCObjectStreamer.h:71
MCSection.h
llvm::MCObjectStreamer::getAssembler
MCAssembler & getAssembler()
Definition: MCObjectStreamer.h:112
llvm::ArrayRef
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: APInt.h:32
llvm::MCObjectStreamer::getOrCreateDataFragment
MCDataFragment * getOrCreateDataFragment(const MCSubtargetInfo *STI=nullptr)
Get a data fragment to write into, creating a new one if the current fragment is not a data fragment.
Definition: MCObjectStreamer.cpp:203
llvm::MCObjectStreamer::emitNops
void emitNops(int64_t NumBytes, int64_t ControlledNopLength, SMLoc Loc) override
Definition: MCObjectStreamer.cpp:837
Fixup
PowerPC TLS Dynamic Call Fixup
Definition: PPCTLSDynamicCall.cpp:235
llvm::MCObjectStreamer::changeSectionImpl
bool changeSectionImpl(MCSection *Section, const MCExpr *Subsection)
Definition: MCObjectStreamer.cpp:334
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
llvm::MCSection
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition: MCSection.h:39
llvm::MCObjectStreamer::emitWeakReference
void emitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override
Emit an weak reference from Alias to Symbol.
Definition: MCObjectStreamer.cpp:324
llvm::MCObjectStreamer::emitInstToFragment
virtual void emitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &)
Emit an instruction to a special fragment, because this instruction can change its size during relaxa...
Definition: MCObjectStreamer.cpp:414
llvm::MCObjectStreamer::emitAddrsigSym
void emitAddrsigSym(const MCSymbol *Sym) override
Definition: MCObjectStreamer.cpp:863
llvm::MCObjectStreamer::emitFill
void emitFill(const MCExpr &NumBytes, uint64_t FillValue, SMLoc Loc=SMLoc()) override
Emit Size bytes worth of the value specified by FillValue.
Definition: MCObjectStreamer.cpp:798
llvm::MCObjectStreamer::emitCodeAlignment
void emitCodeAlignment(unsigned ByteAlignment, unsigned MaxBytesToEmit=0) override
Emit nops until the byte alignment ByteAlignment is reached.
Definition: MCObjectStreamer.cpp:611
llvm::GraphProgram::Name
Name
Definition: GraphWriter.h:52
llvm::ilist_iterator
Iterator for intrusive lists based on ilist_node.
Definition: ilist_iterator.h:57
llvm::MCObjectStreamer::emitULEB128Value
void emitULEB128Value(const MCExpr *Value) override
Definition: MCObjectStreamer.cpp:306
llvm::MCObjectStreamer::emitCVDefRangeDirective
void emitCVDefRangeDirective(ArrayRef< std::pair< const MCSymbol *, const MCSymbol * >> Ranges, StringRef FixedSizePortion) override
This implements the CodeView '.cv_def_range' assembler directive.
Definition: MCObjectStreamer.cpp:568
llvm::MCObjectStreamer::emitAddrsig
void emitAddrsig() override
Definition: MCObjectStreamer.cpp:859
llvm::LCOMM::ByteAlignment
@ ByteAlignment
Definition: MCAsmInfo.h:50
llvm::ARMBuildAttrs::Symbol
@ Symbol
Definition: ARMBuildAttributes.h:79
llvm::iplist_impl::insert
iterator insert(iterator where, pointer New)
Definition: ilist.h:228
llvm::MCObjectStreamer::emitCVStringTableDirective
void emitCVStringTableDirective() override
This implements the CodeView '.cv_stringtable' assembler directive.
Definition: MCObjectStreamer.cpp:579
llvm::MCObjectStreamer::emitBytes
void emitBytes(StringRef Data) override
Emit the bytes in Data into the output.
Definition: MCObjectStreamer.cpp:590
llvm::MCObjectStreamer::flushPendingLabels
void flushPendingLabels()
Create a data fragment for any pending labels across all Sections and Subsections.
Definition: MCObjectStreamer.cpp:92
llvm::MCStreamer::emitFill
void emitFill(uint64_t NumBytes, uint8_t FillValue)
Emit NumBytes bytes worth of the value specified by FillValue.
Definition: MCStreamer.cpp:216
SmallVector.h
MCStreamer.h
llvm::MCObjectStreamer::emitGPRel64Value
void emitGPRel64Value(const MCExpr *Value) override
Emit the expression Value into the output as a gprel64 (64-bit GP relative) value.
Definition: MCObjectStreamer.cpp:674
llvm::SmallSetVector
A SetVector that performs no allocations if smaller than a certain size.
Definition: SetVector.h:307
llvm::MCObjectStreamer::emitTPRel64Value
void emitTPRel64Value(const MCExpr *Value) override
Emit the expression Value into the output as a tprel (64-bit TP relative) value.
Definition: MCObjectStreamer.cpp:654
llvm::MCObjectStreamer::mayHaveInstructions
bool mayHaveInstructions(MCSection &Sec) const override
Definition: MCObjectStreamer.cpp:358
llvm::MCObjectStreamer::finishImpl
void finishImpl() override
Streamer specific finalization.
Definition: MCObjectStreamer.cpp:868
llvm::MCObjectStreamer::emitFrames
void emitFrames(MCAsmBackend *MAB)
Definition: MCObjectStreamer.cpp:168
llvm::MCDataFragment
Fragment for data and encoded instructions.
Definition: MCFragment.h:242
llvm::MCObjectStreamer::emitCVInlineLinetableDirective
void emitCVInlineLinetableDirective(unsigned PrimaryFunctionId, unsigned SourceFileId, unsigned SourceLineNum, const MCSymbol *FnStartSym, const MCSymbol *FnEndSym) override
This implements the CodeView '.cv_inline_linetable' assembler directive.
Definition: MCObjectStreamer.cpp:558
llvm::MCDwarfFrameInfo
Definition: MCDwarf.h:637
llvm::MCSubtargetInfo
Generic base class for all target subtargets.
Definition: MCSubtargetInfo.h:75
llvm::MCFixup
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Definition: MCFixup.h:71
llvm::Value
LLVM Value Representation.
Definition: Value.h:75
llvm::MCExpr
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:35
llvm::MCObjectStreamer::emitDwarfAdvanceFrameAddr
void emitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel, const MCSymbol *Label)
Definition: MCObjectStreamer.cpp:523
SetVector.h
llvm::MCObjectStreamer::getAssemblerPtr
MCAssembler * getAssemblerPtr() override
Definition: MCObjectStreamer.cpp:45