31 *TAB.createObjectWriter(OS), OS)),
39 :
MCStreamer(Context, TargetStreamer), Assembler(_Assembler),
61 return prior(CurInsertionPoint);
140 assert(!SD.
getFragment() &&
"Unexpected fragment on symbol data!");
151 if (Value->EvaluateAsAbsolute(IntValue,
getAssembler())) {
161 if (Value->EvaluateAsAbsolute(IntValue,
getAssembler())) {
175 const MCExpr *Subsection) {
176 assert(Section &&
"Cannot switch to a null section!");
180 int64_t IntSubsection = 0;
182 !Subsection->EvaluateAsAbsolute(IntSubsection,
getAssembler()))
184 if (IntSubsection < 0 || IntSubsection > 8192)
211 EmitInstToData(Inst);
224 while (
getAssembler().getBackend().mayNeedRelaxation(Relaxed))
226 EmitInstToData(Relaxed);
249 "Aligned bundling is not implemented for this object format";
265 unsigned Column,
unsigned Flags,
267 unsigned Discriminator,
274 Isa, Discriminator, FileName);
280 unsigned PointerSize) {
287 if (AddrDelta->EvaluateAsAbsolute(Res,
getAssembler())) {
299 if (AddrDelta->EvaluateAsAbsolute(Res,
getAssembler())) {
315 unsigned MaxBytesToEmit) {
316 if (MaxBytesToEmit == 0)
326 unsigned MaxBytesToEmit) {
332 unsigned char Value) {
384 const MCSymbol *LineSectionSymbol = NULL;
virtual void EmitGPRel32Value(const MCExpr *Value)
virtual void EmitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, unsigned Discriminator, StringRef FileName)
EmitDwarfLocDirective - This implements the DWARF2.
static void Emit(MCStreamer *MCOS, int64_t LineDelta, uint64_t AddrDelta)
Utility function to emit the encoding to a streamer.
const MCExpr * ForceExpAbs(const MCExpr *Expr)
virtual void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol)
bool isBundleLocked() const
static const char *const BundlingNotImplementedMsg
void EmitSLEB128IntValue(int64_t Value)
virtual void EmitFill(uint64_t NumBytes, uint8_t FillValue)
virtual void EmitValueImpl(const MCExpr *Value, unsigned Size)
virtual bool EmitValueToOffset(const MCExpr *Offset, unsigned char Value)
virtual void EmitBundleAlignMode(unsigned AlignPow2)
Set the bundle alignment mode from now on in the section. The argument is the power of 2 to which the...
virtual void EmitBundleLock(bool AlignToEnd)
The following instructions are a bundle-locked group.
MCCodeEmitter & getEmitter() const
const_iterator begin(StringRef path)
Get begin iterator over path.
static MCFixupKind getKindForSize(unsigned Size, bool isPCRel)
void RecordProcStart(MCDwarfFrameInfo &Frame)
virtual SmallVectorImpl< char > & getContents()
static void Emit(MCStreamer *MCOS, const MCSymbol *LineSectionSymbol)
const MCExpr * BuildSymbolDiff(MCContext &Context, const MCSymbol *A, const MCSymbol *B)
virtual void EmitDwarfAdvanceLineAddr(int64_t LineDelta, const MCSymbol *LastLabel, const MCSymbol *Label, unsigned PointerSize)
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(const char *reason, bool gen_crash_diag=true)
virtual void EmitGPRel64Value(const MCExpr *Value)
MCFragment * getCurrentFragment() const
SmallVectorImpl< MCFixup > & getFixups()
static void Make(MCStreamer *MCOS, const MCSection *Section)
void insert(MCFragment *F) const
MCSymbol * CreateTempSymbol()
static void EmitAdvanceLoc(MCStreamer &Streamer, uint64_t AddrDelta)
#define llvm_unreachable(msg)
virtual void EmitDebugLabel(MCSymbol *Symbol)
MCSectionSubPair getCurrentSection() const
virtual bool hasInstructions() const
Does this fragment have instructions emitted into it? By default this is false, but specific fragment...
virtual void ChangeSection(const MCSection *Section, const MCExpr *Subsection)
virtual void EmitCodeAlignment(unsigned ByteAlignment, unsigned MaxBytesToEmit=0)
MCContext & getContext() const
virtual void EmitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, unsigned Discriminator, StringRef FileName)
EmitDwarfLocDirective - This implements the DWARF2.
A four-byte gp relative fixup.
MCObjectWriter & getWriter() const
MCDataFragment * getOrCreateDataFragment() const
virtual void EncodeInstruction(const MCInst &Inst, raw_ostream &OS, SmallVectorImpl< MCFixup > &Fixups) const =0
MCFragment * getFragment() const
virtual void EmitIntValue(uint64_t Value, unsigned Size)
static const MCSymbolRefExpr * Create(const MCSymbol *Symbol, MCContext &Ctx)
const MCExpr * getExpr() const
MCObjectStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer, MCAsmBackend &TAB, raw_ostream &_OS, MCCodeEmitter *_Emitter)
const MCExpr * getLHS() const
getLHS - Get the left-hand side expression of the binary operator.
static const MCBinaryExpr * Create(Opcode Op, const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
MCAssembler & getAssembler()
virtual void relaxInstruction(const MCInst &Inst, MCInst &Res) const =0
MCCodeEmitter - Generic instruction encoding interface.
static const MCSymbol * Emit(MCStreamer *MCOS)
virtual bool mayNeedRelaxation(const MCInst &Inst) const =0
void EmitDwarfSetLineAddr(int64_t LineDelta, const MCSymbol *Label, int PointerSize)
virtual void EmitInstruction(const MCInst &Inst)
void append(in_iter in_start, in_iter in_end)
MCBinaryExpr - Binary assembler expressions.
virtual void EmitInstToFragment(const MCInst &Inst)
Emit an instruction to a special fragment, because this instruction can change its size during relaxa...
MCSymbolData & getOrCreateSymbolData(const MCSymbol &Symbol, bool *Created=0)
virtual void EmitBytes(StringRef Data)
virtual SmallVectorImpl< char > & getContents()
virtual void EmitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel, const MCSymbol *Label)
void setOffset(uint64_t Value)
virtual void EmitLabel(MCSymbol *Symbol)
bool isBundlingEnabled() const
virtual void EmitLabel(MCSymbol *Symbol)
void setVariableValue(const MCExpr *Value)
void setHasInstructions(bool Value)
const MCExpr * AddValueSymbols(const MCExpr *Value)
virtual void EmitULEB128Value(const MCExpr *Value)
const MCExpr * getRHS() const
getRHS - Get the right-hand side expression of the binary operator.
MCSectionData & getOrCreateSectionData(const MCSection &Section, bool *Created=0)
virtual void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value=0, unsigned ValueSize=1, unsigned MaxBytesToEmit=0)
virtual void FinishImpl()
FinishImpl - Streamer specific finalization.
void RecordProcEnd(MCDwarfFrameInfo &Frame)
unsigned getNumOperands() const
MCAsmBackend & getBackend() const
void setFragment(MCFragment *Value)
virtual void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value)
References to labels and assigned expressions.
void setAlignment(unsigned Value)
virtual void EmitSLEB128Value(const MCExpr *Value)
void EmitULEB128IntValue(uint64_t Value, unsigned Padding=0)
LLVM Value Representation.
virtual void EmitZeros(uint64_t NumBytes)
Emit NumBytes worth of zeros. This function properly handles data in virtual sections.
MCAsmBackend - Generic interface to target specific assembler backends.
static MCFixup Create(uint32_t Offset, const MCExpr *Value, MCFixupKind Kind, SMLoc Loc=SMLoc())
MCSectionData * getCurrentSectionData() const
ItTy prior(ItTy it, Dist n)
Target specific expression.
iterator getSubsectionInsertionPoint(unsigned Subsection)
const MCOperand & getOperand(unsigned i) const
FragmentListType::iterator iterator
SmallVectorImpl< MCFixup > & getFixups()
virtual void EmitBundleUnlock()
Ends a bundle-locked group.
virtual void reset()
state management