LLVM  13.0.0git
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
llvm::MCSection Class Referenceabstract

Instances of this class represent a uniqued identifier for a section in the current translation unit. More...

#include "llvm/MC/MCSection.h"

Inheritance diagram for llvm::MCSection:
Inheritance graph
[legend]
Collaboration diagram for llvm::MCSection:
Collaboration graph
[legend]

Public Types

enum  SectionVariant {
  SV_COFF = 0, SV_ELF, SV_MachO, SV_Wasm,
  SV_XCOFF
}
 
enum  BundleLockStateType { NotBundleLocked, BundleLocked, BundleLockedAlignToEnd }
 Express the state of bundle locked groups while emitting code. More...
 
using FragmentListType = iplist< MCFragment >
 
using const_iterator = FragmentListType::const_iterator
 
using iterator = FragmentListType::iterator
 
using const_reverse_iterator = FragmentListType::const_reverse_iterator
 
using reverse_iterator = FragmentListType::reverse_iterator
 

Public Member Functions

 MCSection (const MCSection &)=delete
 
MCSectionoperator= (const MCSection &)=delete
 
StringRef getName () const
 
SectionKind getKind () const
 
SectionVariant getVariant () const
 
MCSymbolgetBeginSymbol ()
 
const MCSymbolgetBeginSymbol () const
 
void setBeginSymbol (MCSymbol *Sym)
 
MCSymbolgetEndSymbol (MCContext &Ctx)
 
bool hasEnded () const
 
unsigned getAlignment () const
 
void setAlignment (Align Value)
 
unsigned getOrdinal () const
 
void setOrdinal (unsigned Value)
 
unsigned getLayoutOrder () const
 
void setLayoutOrder (unsigned Value)
 
BundleLockStateType getBundleLockState () const
 
void setBundleLockState (BundleLockStateType NewState)
 
bool isBundleLocked () const
 
bool isBundleGroupBeforeFirstInst () const
 
void setBundleGroupBeforeFirstInst (bool IsFirst)
 
bool hasInstructions () const
 
void setHasInstructions (bool Value)
 
bool isRegistered () const
 
void setIsRegistered (bool Value)
 
MCSection::FragmentListTypegetFragmentList ()
 
const MCSection::FragmentListTypegetFragmentList () const
 
const MCDummyFragmentgetDummyFragment () const
 
MCDummyFragmentgetDummyFragment ()
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
MCSection::iterator getSubsectionInsertionPoint (unsigned Subsection)
 
void dump () const
 
virtual void PrintSwitchToSection (const MCAsmInfo &MAI, const Triple &T, raw_ostream &OS, const MCExpr *Subsection) const =0
 
virtual bool UseCodeAlign () const =0
 Return true if a .align directive should use "optimized nops" to fill instead of 0s. More...
 
virtual bool isVirtualSection () const =0
 Check whether this section is "virtual", that is has no actual object file contents. More...
 
virtual StringRef getVirtualSectionKind () const
 
void addPendingLabel (MCSymbol *label, unsigned Subsection=0)
 Add a pending label for the requested subsection. More...
 
void flushPendingLabels (MCFragment *F, uint64_t FOffset=0, unsigned Subsection=0)
 Associate all pending labels in a subsection with a fragment. More...
 
void flushPendingLabels ()
 Associate all pending labels with empty data fragments. More...
 

Static Public Member Functions

static FragmentListType MCSection::* getSublistAccess (MCFragment *)
 Support for MCFragment::getNextNode(). More...
 

Static Public Attributes

static constexpr unsigned NonUniqueID = ~0U
 

Protected Member Functions

 MCSection (SectionVariant V, StringRef Name, SectionKind K, MCSymbol *Begin)
 
 ~MCSection ()
 

Protected Attributes

StringRef Name
 
SectionVariant Variant
 
SectionKind Kind
 

Detailed Description

Instances of this class represent a uniqued identifier for a section in the current translation unit.

The MCContext class uniques and creates these.

Definition at line 39 of file MCSection.h.

Member Typedef Documentation

◆ const_iterator

Definition at line 54 of file MCSection.h.

◆ const_reverse_iterator

Definition at line 57 of file MCSection.h.

◆ FragmentListType

Definition at line 52 of file MCSection.h.

◆ iterator

Definition at line 55 of file MCSection.h.

◆ reverse_iterator

Definition at line 58 of file MCSection.h.

Member Enumeration Documentation

◆ BundleLockStateType

Express the state of bundle locked groups while emitting code.

Enumerator
NotBundleLocked 
BundleLocked 
BundleLockedAlignToEnd 

Definition at line 46 of file MCSection.h.

◆ SectionVariant

Enumerator
SV_COFF 
SV_ELF 
SV_MachO 
SV_Wasm 
SV_XCOFF 

Definition at line 43 of file MCSection.h.

Constructor & Destructor Documentation

◆ MCSection() [1/2]

MCSection::MCSection ( SectionVariant  V,
StringRef  Name,
SectionKind  K,
MCSymbol Begin 
)
protected

Definition at line 23 of file MCSection.cpp.

◆ ~MCSection()

MCSection::~MCSection ( )
protecteddefault

◆ MCSection() [2/2]

llvm::MCSection::MCSection ( const MCSection )
delete

Member Function Documentation

◆ addPendingLabel()

void MCSection::addPendingLabel ( MCSymbol label,
unsigned  Subsection = 0 
)

Add a pending label for the requested subsection.

This label will be associated with a fragment in flushPendingLabels()

Definition at line 91 of file MCSection.cpp.

Referenced by llvm::MCObjectStreamer::addPendingLabel(), and llvm::MCObjectStreamer::flushPendingLabels().

◆ begin() [1/2]

iterator llvm::MCSection::begin ( )
inline

Definition at line 170 of file MCSection.h.

Referenced by dump(), and llvm::MCAssembler::layout().

◆ begin() [2/2]

const_iterator llvm::MCSection::begin ( ) const
inline

Definition at line 171 of file MCSection.h.

◆ dump()

LLVM_DUMP_METHOD void MCSection::dump ( ) const

Definition at line 127 of file MCSection.cpp.

References begin(), end(), llvm::errs(), and it.

◆ end() [1/2]

iterator llvm::MCSection::end ( )
inline

Definition at line 173 of file MCSection.h.

Referenced by dump(), and getSubsectionInsertionPoint().

◆ end() [2/2]

const_iterator llvm::MCSection::end ( ) const
inline

Definition at line 174 of file MCSection.h.

◆ flushPendingLabels() [1/2]

void MCSection::flushPendingLabels ( )

Associate all pending labels with empty data fragments.

One fragment will be created for each subsection as necessary.

Definition at line 112 of file MCSection.cpp.

References F, getFragmentList(), getSubsectionInsertionPoint(), and llvm::iplist_impl< IntrusiveListT, TraitsT >::insert().

◆ flushPendingLabels() [2/2]

void MCSection::flushPendingLabels ( MCFragment F,
uint64_t  FOffset = 0,
unsigned  Subsection = 0 
)

Associate all pending labels in a subsection with a fragment.

Definition at line 95 of file MCSection.cpp.

References llvm::SmallVectorImpl< T >::erase(), and F.

Referenced by llvm::MCObjectStreamer::flushPendingLabels().

◆ getAlignment()

unsigned llvm::MCSection::getAlignment ( ) const
inline

◆ getBeginSymbol() [1/2]

MCSymbol* llvm::MCSection::getBeginSymbol ( )
inline

◆ getBeginSymbol() [2/2]

const MCSymbol* llvm::MCSection::getBeginSymbol ( ) const
inline

Definition at line 121 of file MCSection.h.

References getBeginSymbol().

◆ getBundleLockState()

BundleLockStateType llvm::MCSection::getBundleLockState ( ) const
inline

Definition at line 140 of file MCSection.h.

Referenced by llvm::MCELFStreamer::emitBundleUnlock().

◆ getDummyFragment() [1/2]

MCDummyFragment& llvm::MCSection::getDummyFragment ( )
inline

Definition at line 168 of file MCSection.h.

◆ getDummyFragment() [2/2]

const MCDummyFragment& llvm::MCSection::getDummyFragment ( ) const
inline

Definition at line 167 of file MCSection.h.

◆ getEndSymbol()

MCSymbol * MCSection::getEndSymbol ( MCContext Ctx)

Definition at line 29 of file MCSection.cpp.

References llvm::MCContext::createTempSymbol().

◆ getFragmentList() [1/2]

MCSection::FragmentListType& llvm::MCSection::getFragmentList ( )
inline

◆ getFragmentList() [2/2]

const MCSection::FragmentListType& llvm::MCSection::getFragmentList ( ) const
inline

Definition at line 158 of file MCSection.h.

References getFragmentList().

◆ getKind()

SectionKind llvm::MCSection::getKind ( ) const
inline

◆ getLayoutOrder()

unsigned llvm::MCSection::getLayoutOrder ( ) const
inline

Definition at line 137 of file MCSection.h.

Referenced by llvm::MachObjectWriter::getPaddingSize().

◆ getName()

StringRef llvm::MCSection::getName ( ) const
inline

◆ getOrdinal()

unsigned llvm::MCSection::getOrdinal ( ) const
inline

Definition at line 134 of file MCSection.h.

◆ getSublistAccess()

static FragmentListType MCSection::* llvm::MCSection::getSublistAccess ( MCFragment )
inlinestatic

Support for MCFragment::getNextNode().

Definition at line 163 of file MCSection.h.

◆ getSubsectionInsertionPoint()

MCSection::iterator MCSection::getSubsectionInsertionPoint ( unsigned  Subsection)

◆ getVariant()

SectionVariant llvm::MCSection::getVariant ( ) const
inline

Definition at line 118 of file MCSection.h.

References Variant.

◆ getVirtualSectionKind()

StringRef MCSection::getVirtualSectionKind ( ) const
virtual

Reimplemented in llvm::MCSectionELF, and llvm::MCSectionCOFF.

Definition at line 89 of file MCSection.cpp.

Referenced by llvm::MCObjectStreamer::emitInstruction().

◆ hasEnded()

bool MCSection::hasEnded ( ) const

Definition at line 35 of file MCSection.cpp.

References llvm::MCSymbol::isInSection().

◆ hasInstructions()

bool llvm::MCSection::hasInstructions ( ) const
inline

Definition at line 151 of file MCSection.h.

Referenced by llvm::MCObjectStreamer::mayHaveInstructions().

◆ isBundleGroupBeforeFirstInst()

bool llvm::MCSection::isBundleGroupBeforeFirstInst ( ) const
inline

Definition at line 144 of file MCSection.h.

Referenced by llvm::MCELFStreamer::emitBundleUnlock().

◆ isBundleLocked()

bool llvm::MCSection::isBundleLocked ( ) const
inline

Definition at line 142 of file MCSection.h.

References NotBundleLocked.

◆ isRegistered()

bool llvm::MCSection::isRegistered ( ) const
inline

Definition at line 154 of file MCSection.h.

Referenced by llvm::AArch64TargetStreamer::emitNoteSection().

◆ isVirtualSection()

virtual bool llvm::MCSection::isVirtualSection ( ) const
pure virtual

◆ operator=()

MCSection& llvm::MCSection::operator= ( const MCSection )
delete

◆ PrintSwitchToSection()

virtual void llvm::MCSection::PrintSwitchToSection ( const MCAsmInfo MAI,
const Triple T,
raw_ostream OS,
const MCExpr Subsection 
) const
pure virtual

◆ setAlignment()

void llvm::MCSection::setAlignment ( Align  Value)
inline

◆ setBeginSymbol()

void llvm::MCSection::setBeginSymbol ( MCSymbol Sym)
inline

Definition at line 124 of file MCSection.h.

References assert().

◆ setBundleGroupBeforeFirstInst()

void llvm::MCSection::setBundleGroupBeforeFirstInst ( bool  IsFirst)
inline

Definition at line 147 of file MCSection.h.

Referenced by llvm::MCELFStreamer::emitBundleLock().

◆ setBundleLockState()

void MCSection::setBundleLockState ( BundleLockStateType  NewState)

◆ setHasInstructions()

void llvm::MCSection::setHasInstructions ( bool  Value)
inline

Definition at line 152 of file MCSection.h.

◆ setIsRegistered()

void llvm::MCSection::setIsRegistered ( bool  Value)
inline

Definition at line 155 of file MCSection.h.

◆ setLayoutOrder()

void llvm::MCSection::setLayoutOrder ( unsigned  Value)
inline

Definition at line 138 of file MCSection.h.

Referenced by llvm::MCAssembler::layout().

◆ setOrdinal()

void llvm::MCSection::setOrdinal ( unsigned  Value)
inline

Definition at line 135 of file MCSection.h.

Referenced by llvm::MCAssembler::layout().

◆ UseCodeAlign()

virtual bool llvm::MCSection::UseCodeAlign ( ) const
pure virtual

Return true if a .align directive should use "optimized nops" to fill instead of 0s.

Implemented in llvm::MCSectionXCOFF, llvm::MCSectionELF, llvm::MCSectionCOFF, llvm::MCSectionMachO, and llvm::MCSectionWasm.

Referenced by llvm::MCAssembler::computeFragmentSize().

Member Data Documentation

◆ Kind

SectionKind llvm::MCSection::Kind
protected

Definition at line 106 of file MCSection.h.

Referenced by getKind(), and llvm::MCSectionWasm::isWasmData().

◆ Name

StringRef llvm::MCSection::Name
protected

◆ NonUniqueID

constexpr unsigned llvm::MCSection::NonUniqueID = ~0U
staticconstexpr

◆ Variant

SectionVariant llvm::MCSection::Variant
protected

Definition at line 105 of file MCSection.h.

Referenced by getVariant().


The documentation for this class was generated from the following files: