class MCELFStreamer

Declaration

class MCELFStreamer : public MCObjectStreamer { /* full declaration omitted */ };

Description

Streaming object file generation interface. This class provides an implementation of the MCStreamer interface which is suitable for use with the assembler backend. Specific object file formats are expected to subclass this interface to implement directives specific to that file format or custom semantics expected by the object writer implementation.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:31

Inherits from: MCObjectStreamer

Member Variables

public SmallVector<llvm::MCELFStreamer::AttributeItem, 64> Contents
private SmallVector<llvm::MCELFStreamer::AttributeItem, 64> GNUAttributes
private bool SeenIdent = false
private SmallVector<llvm::MCDataFragment*, 4> BundleGroups
BundleGroups - The stack of fragments holding the bundle-locked instructions.

Method Overview

  • public MCELFStreamer(llvm::MCContext & Context, std::unique_ptr<MCAsmBackend> TAB, std::unique_ptr<MCObjectWriter> OW, std::unique_ptr<MCCodeEmitter> Emitter)
  • private size_t calculateContentSize(SmallVector<llvm::MCELFStreamer::AttributeItem, 64> & AttrsVec)
  • public void changeSection(llvm::MCSection * Section, const llvm::MCExpr * Subsection)
  • private void createAttributesSection(llvm::StringRef Vendor, const llvm::Twine & Section, unsigned int Type, llvm::MCSection *& AttributeSection, SmallVector<llvm::MCELFStreamer::AttributeItem, 64> & AttrsVec)
  • public void emitAssemblerFlag(llvm::MCAssemblerFlag Flag)
  • public void emitAttributesSection(llvm::StringRef Vendor, const llvm::Twine & Section, unsigned int Type, llvm::MCSection *& AttributeSection)
  • public void emitBundleAlignMode(unsigned int AlignPow2)
  • public void emitBundleLock(bool AlignToEnd)
  • public void emitBundleUnlock()
  • public void emitCGProfileEntry(const llvm::MCSymbolRefExpr * From, const llvm::MCSymbolRefExpr * To, uint64_t Count)
  • public void emitCommonSymbol(llvm::MCSymbol * Symbol, uint64_t Size, unsigned int ByteAlignment)
  • public void emitELFSize(llvm::MCSymbol * Symbol, const llvm::MCExpr * Value)
  • public void emitELFSymverDirective(const llvm::MCSymbol * OriginalSym, llvm::StringRef Name, bool KeepOriginalSym)
  • public void emitGNUAttribute(unsigned int Tag, unsigned int Value)
  • public void emitIdent(llvm::StringRef IdentString)
  • private void emitInstToData(const llvm::MCInst & Inst, const llvm::MCSubtargetInfo &)
  • private void emitInstToFragment(const llvm::MCInst & Inst, const llvm::MCSubtargetInfo &)
  • public void emitLabel(llvm::MCSymbol * Symbol, llvm::SMLoc Loc = llvm::SMLoc())
  • public void emitLabelAtPos(llvm::MCSymbol * Symbol, llvm::SMLoc Loc, llvm::MCFragment * F, uint64_t Offset)
  • public void emitLocalCommonSymbol(llvm::MCSymbol * Symbol, uint64_t Size, unsigned int ByteAlignment)
  • public bool emitSymbolAttribute(llvm::MCSymbol * Symbol, llvm::MCSymbolAttr Attribute)
  • public void emitSymbolDesc(llvm::MCSymbol * Symbol, unsigned int DescValue)
  • public void emitTBSSSymbol(llvm::MCSection * Section, llvm::MCSymbol * Symbol, uint64_t Size, unsigned int ByteAlignment = 0)
  • public void emitThumbFunc(llvm::MCSymbol * Func)
  • public void emitValueImpl(const llvm::MCExpr * Value, unsigned int Size, llvm::SMLoc Loc = llvm::SMLoc())
  • public void emitValueToAlignment(unsigned int, int64_t, unsigned int, unsigned int)
  • public void emitWeakReference(llvm::MCSymbol * Alias, const llvm::MCSymbol * Symbol)
  • public void emitZerofill(llvm::MCSection * Section, llvm::MCSymbol * Symbol = nullptr, uint64_t Size = 0, unsigned int ByteAlignment = 0, llvm::SMLoc L = llvm::SMLoc())
  • private void finalizeCGProfile()
  • private void finalizeCGProfileEntry(const llvm::MCSymbolRefExpr *& S, uint64_t Offset)
  • public void finishImpl()
  • private void fixSymbolsInTLSFixups(const llvm::MCExpr * expr)
  • private llvm::MCELFStreamer::AttributeItem * getAttributeItem(unsigned int Attribute)
  • public void initSections(bool NoExecStack, const llvm::MCSubtargetInfo & STI)
  • private bool isBundleLocked() const
  • private void mergeFragment(llvm::MCDataFragment *, llvm::MCDataFragment *)
  • public void reset()
  • public void setAttributeItem(unsigned int Attribute, llvm::StringRef Value, bool OverwriteExisting)
  • public void setAttributeItem(unsigned int Attribute, unsigned int Value, bool OverwriteExisting)
  • public void setAttributeItems(unsigned int Attribute, unsigned int IntValue, llvm::StringRef StringValue, bool OverwriteExisting)
  • public ~MCELFStreamer()

Inherited from MCObjectStreamer:

Inherited from MCStreamer:

Methods

MCELFStreamer(
    llvm::MCContext& Context,
    std::unique_ptr<MCAsmBackend> TAB,
    std::unique_ptr<MCObjectWriter> OW,
    std::unique_ptr<MCCodeEmitter> Emitter)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:33

Parameters

llvm::MCContext& Context
std::unique_ptr<MCAsmBackend> TAB
std::unique_ptr<MCObjectWriter> OW
std::unique_ptr<MCCodeEmitter> Emitter

size_t calculateContentSize(
    SmallVector<
        llvm::MCELFStreamer::AttributeItem,
        64>& AttrsVec)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:121

Parameters

SmallVector<llvm::MCELFStreamer::AttributeItem, 64>& AttrsVec

void changeSection(llvm::MCSection* Section,
                   const llvm::MCExpr* Subsection)

Description

Update streamer for a new active section. This is called by popSection and switchSection, if the current section changes.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:50

Parameters

llvm::MCSection* Section
const llvm::MCExpr* Subsection

void createAttributesSection(
    llvm::StringRef Vendor,
    const llvm::Twine& Section,
    unsigned int Type,
    llvm::MCSection*& AttributeSection,
    SmallVector<
        llvm::MCELFStreamer::AttributeItem,
        64>& AttrsVec)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:122

Parameters

llvm::StringRef Vendor
const llvm::Twine& Section
unsigned int Type
llvm::MCSection*& AttributeSection
SmallVector<llvm::MCELFStreamer::AttributeItem, 64>& AttrsVec

void emitAssemblerFlag(llvm::MCAssemblerFlag Flag)

Description

Note in the output the specified \p Flag.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:54

Parameters

llvm::MCAssemblerFlag Flag

void emitAttributesSection(
    llvm::StringRef Vendor,
    const llvm::Twine& Section,
    unsigned int Type,
    llvm::MCSection*& AttributeSection)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:114

Parameters

llvm::StringRef Vendor
const llvm::Twine& Section
unsigned int Type
llvm::MCSection*& AttributeSection

void emitBundleAlignMode(unsigned int AlignPow2)

Description

Set the bundle alignment mode from now on in the section. The argument is the power of 2 to which the alignment is set. The value 0 means turn the bundle alignment off.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:86

Parameters

unsigned int AlignPow2

void emitBundleLock(bool AlignToEnd)

Description

The following instructions are a bundle-locked group.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:87

Parameters

bool AlignToEnd
- If true, the bundle-locked group will be aligned to the end of a bundle.

void emitBundleUnlock()

Description

Ends a bundle-locked group.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:88

void emitCGProfileEntry(
    const llvm::MCSymbolRefExpr* From,
    const llvm::MCSymbolRefExpr* To,
    uint64_t Count)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:81

Parameters

const llvm::MCSymbolRefExpr* From
const llvm::MCSymbolRefExpr* To
uint64_t Count

void emitCommonSymbol(llvm::MCSymbol* Symbol,
                      uint64_t Size,
                      unsigned int ByteAlignment)

Description

Emit a common symbol.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:59

Parameters

llvm::MCSymbol* Symbol
- The common symbol to emit.
uint64_t Size
- The size of the common symbol.
unsigned int ByteAlignment
- The alignment of the symbol if non-zero. This must be a power of 2.

void emitELFSize(llvm::MCSymbol* Symbol,
                 const llvm::MCExpr* Value)

Description

Emit an ELF .size directive. This corresponds to an assembler statement such as: .size symbol, expression

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:62

Parameters

llvm::MCSymbol* Symbol
const llvm::MCExpr* Value

void emitELFSymverDirective(
    const llvm::MCSymbol* OriginalSym,
    llvm::StringRef Name,
    bool KeepOriginalSym)

Description

Emit an ELF .symver directive. This corresponds to an assembler statement such as: .symver _start, foo @ SOME_VERSION

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:63

Parameters

const llvm::MCSymbol* OriginalSym
llvm::StringRef Name
bool KeepOriginalSym

void emitGNUAttribute(unsigned int Tag,
                      unsigned int Value)

Description

Emit a .gnu_attribute directive.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:130

Parameters

unsigned int Tag
unsigned int Value

void emitIdent(llvm::StringRef IdentString)

Description

Emit the "identifiers" directive. This implements the '.ident "version foo"' assembler directive.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:77

Parameters

llvm::StringRef IdentString

void emitInstToData(const llvm::MCInst& Inst,
                    const llvm::MCSubtargetInfo&)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:139

Parameters

const llvm::MCInst& Inst
const llvm::MCSubtargetInfo&

void emitInstToFragment(
    const llvm::MCInst& Inst,
    const llvm::MCSubtargetInfo&)

Description

Emit an instruction to a special fragment, because this instruction can change its size during relaxation.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:138

Parameters

const llvm::MCInst& Inst
const llvm::MCSubtargetInfo&

void emitLabel(llvm::MCSymbol* Symbol,
               llvm::SMLoc Loc = llvm::SMLoc())

Description

@ {

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:51

Parameters

llvm::MCSymbol* Symbol
llvm::SMLoc Loc = llvm::SMLoc()

void emitLabelAtPos(llvm::MCSymbol* Symbol,
                    llvm::SMLoc Loc,
                    llvm::MCFragment* F,
                    uint64_t Offset)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:52

Parameters

llvm::MCSymbol* Symbol
llvm::SMLoc Loc
llvm::MCFragment* F
uint64_t Offset

void emitLocalCommonSymbol(
    llvm::MCSymbol* Symbol,
    uint64_t Size,
    unsigned int ByteAlignment)

Description

Emit a local common (.lcomm) symbol.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:66

Parameters

llvm::MCSymbol* Symbol
- The common symbol to emit.
uint64_t Size
- The size of the common symbol.
unsigned int ByteAlignment
- The alignment of the common symbol in bytes.

bool emitSymbolAttribute(
    llvm::MCSymbol* Symbol,
    llvm::MCSymbolAttr Attribute)

Description

Add the given \p Attribute to \p Symbol.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:57

Parameters

llvm::MCSymbol* Symbol
llvm::MCSymbolAttr Attribute

void emitSymbolDesc(llvm::MCSymbol* Symbol,
                    unsigned int DescValue)

Description

Set the \p DescValue for the \p Symbol.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:58

Parameters

llvm::MCSymbol* Symbol
- The symbol to have its n_desc field set.
unsigned int DescValue
- The value to set into the n_desc field.

void emitTBSSSymbol(
    llvm::MCSection* Section,
    llvm::MCSymbol* Symbol,
    uint64_t Size,
    unsigned int ByteAlignment = 0)

Description

Emit a thread local bss (.tbss) symbol.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:72

Parameters

llvm::MCSection* Section
- The thread local common section.
llvm::MCSymbol* Symbol
- The thread local common symbol to emit.
uint64_t Size
- The size of the symbol.
unsigned int ByteAlignment = 0
- The alignment of the thread local common symbol if non-zero. This must be a power of 2 on some targets.

void emitThumbFunc(llvm::MCSymbol* Func)

Description

Note in the output that the specified \p Func is a Thumb mode function (ARM target only).

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:55

Parameters

llvm::MCSymbol* Func

void emitValueImpl(
    const llvm::MCExpr* Value,
    unsigned int Size,
    llvm::SMLoc Loc = llvm::SMLoc())

Description

Emit the expression \p Value into the output as a native integer of the given \p Size bytes. This is used to implement assembler directives such as .word, .quad, etc.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:74

Parameters

const llvm::MCExpr* Value
- The value to emit.
unsigned int Size
- The size of the integer (in bytes) to emit. This must match a native machine width.
llvm::SMLoc Loc = llvm::SMLoc()
- The location of the expression for error reporting.

void emitValueToAlignment(unsigned int,
                          int64_t,
                          unsigned int,
                          unsigned int)

Description

Emit some number of copies of \p Value until the byte alignment \p ByteAlignment is reached. If the number of bytes need to emit for the alignment is not a multiple of \p ValueSize, then the contents of the emitted fill bytes is undefined. This used to implement the .align assembler directive.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:79

Parameters

unsigned int
int64_t
unsigned int
unsigned int

void emitWeakReference(
    llvm::MCSymbol* Alias,
    const llvm::MCSymbol* Symbol)

Description

Emit an weak reference from \p Alias to \p Symbol. This corresponds to an assembler statement such as: .weakref alias, symbol

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:56

Parameters

llvm::MCSymbol* Alias
- The alias that is being created.
const llvm::MCSymbol* Symbol
- The symbol being aliased.

void emitZerofill(
    llvm::MCSection* Section,
    llvm::MCSymbol* Symbol = nullptr,
    uint64_t Size = 0,
    unsigned int ByteAlignment = 0,
    llvm::SMLoc L = llvm::SMLoc())

Description

Emit the zerofill section and an optional symbol.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:69

Parameters

llvm::MCSection* Section
- The zerofill section to create and or to put the symbol
llvm::MCSymbol* Symbol = nullptr
- The zerofill symbol to emit, if non-NULL.
uint64_t Size = 0
- The size of the zerofill symbol.
unsigned int ByteAlignment = 0
- The alignment of the zerofill symbol if non-zero. This must be a power of 2 on some targets.
llvm::SMLoc L = llvm::SMLoc()

void finalizeCGProfile()

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:143

void finalizeCGProfileEntry(
    const llvm::MCSymbolRefExpr*& S,
    uint64_t Offset)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:142

Parameters

const llvm::MCSymbolRefExpr*& S
uint64_t Offset

void finishImpl()

Description

Streamer specific finalization.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:84

void fixSymbolsInTLSFixups(
    const llvm::MCExpr* expr)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:141

Parameters

const llvm::MCExpr* expr

llvm::MCELFStreamer::AttributeItem*
getAttributeItem(unsigned int Attribute)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:120

Parameters

unsigned int Attribute

void initSections(
    bool NoExecStack,
    const llvm::MCSubtargetInfo& STI)

Description

@ {

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:49

Parameters

bool NoExecStack
const llvm::MCSubtargetInfo& STI

bool isBundleLocked() const

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:137

void mergeFragment(llvm::MCDataFragment*,
                   llvm::MCDataFragment*)

Description

Merge the content of the fragment \p EF into the fragment \p DF.

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:146

Parameters

llvm::MCDataFragment*
llvm::MCDataFragment*

void reset()

Description

state management

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:40

void setAttributeItem(unsigned int Attribute,
                      llvm::StringRef Value,
                      bool OverwriteExisting)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:110

Parameters

unsigned int Attribute
llvm::StringRef Value
bool OverwriteExisting

void setAttributeItem(unsigned int Attribute,
                      unsigned int Value,
                      bool OverwriteExisting)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:108

Parameters

unsigned int Attribute
unsigned int Value
bool OverwriteExisting

void setAttributeItems(
    unsigned int Attribute,
    unsigned int IntValue,
    llvm::StringRef StringValue,
    bool OverwriteExisting)

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:112

Parameters

unsigned int Attribute
unsigned int IntValue
llvm::StringRef StringValue
bool OverwriteExisting

~MCELFStreamer()

Declared at: llvm/include/llvm/MC/MCELFStreamer.h:37