LLVM 19.0.0git
Public Types | Public Member Functions | Friends | List of all members
llvm::jitlink::Block Class Reference

An Addressable with content and edges. More...

#include "llvm/ExecutionEngine/JITLink/JITLink.h"

Inheritance diagram for llvm::jitlink::Block:
Inheritance graph
[legend]

Public Types

using EdgeVector = std::vector< Edge >
 
using edge_iterator = EdgeVector::iterator
 
using const_edge_iterator = EdgeVector::const_iterator
 

Public Member Functions

 Block (const Block &)=delete
 
Blockoperator= (const Block &)=delete
 
 Block (Block &&)=delete
 
Blockoperator= (Block &&)=delete
 
SectiongetSection () const
 Return the parent section for this block.
 
bool isZeroFill () const
 Returns true if this is a zero-fill block.
 
size_t getSize () const
 Returns the size of this defined addressable.
 
orc::ExecutorAddrRange getRange () const
 Returns the address range of this defined addressable.
 
ArrayRef< chargetContent () const
 Get the content for this block. Block must not be a zero-fill block.
 
void setContent (ArrayRef< char > Content)
 Set the content for this block.
 
MutableArrayRef< chargetMutableContent (LinkGraph &G)
 Get mutable content for this block.
 
MutableArrayRef< chargetAlreadyMutableContent ()
 Get mutable content for this block.
 
void setMutableContent (MutableArrayRef< char > MutableContent)
 Set mutable content for this block.
 
bool isContentMutable () const
 Returns true if this block's content is mutable.
 
uint64_t getAlignment () const
 Get the alignment for this content.
 
void setAlignment (uint64_t Alignment)
 Set the alignment for this content.
 
uint64_t getAlignmentOffset () const
 Get the alignment offset for this content.
 
void setAlignmentOffset (uint64_t AlignmentOffset)
 Set the alignment offset for this content.
 
void addEdge (Edge::Kind K, Edge::OffsetT Offset, Symbol &Target, Edge::AddendT Addend)
 Add an edge to this block.
 
void addEdge (const Edge &E)
 Add an edge by copying an existing one.
 
iterator_range< edge_iteratoredges ()
 Return the list of edges attached to this content.
 
iterator_range< const_edge_iteratoredges () const
 Returns the list of edges attached to this content.
 
size_t edges_size () const
 Return the size of the edges list.
 
bool edges_empty () const
 Returns true if the list of edges is empty.
 
edge_iterator removeEdge (edge_iterator I)
 Remove the edge pointed to by the given iterator.
 
orc::ExecutorAddr getFixupAddress (const Edge &E) const
 Returns the address of the fixup for the given edge, which is equal to this block's address plus the edge's offset.
 

Friends

class LinkGraph
 

Additional Inherited Members

Detailed Description

An Addressable with content and edges.

Definition at line 157 of file JITLink.h.

Member Typedef Documentation

◆ const_edge_iterator

using llvm::jitlink::Block::const_edge_iterator = EdgeVector::const_iterator

Definition at line 214 of file JITLink.h.

◆ edge_iterator

using llvm::jitlink::Block::edge_iterator = EdgeVector::iterator

Definition at line 213 of file JITLink.h.

◆ EdgeVector

using llvm::jitlink::Block::EdgeVector = std::vector<Edge>

Definition at line 212 of file JITLink.h.

Constructor & Destructor Documentation

◆ Block() [1/2]

llvm::jitlink::Block::Block ( const Block )
delete

◆ Block() [2/2]

llvm::jitlink::Block::Block ( Block &&  )
delete

Member Function Documentation

◆ addEdge() [1/2]

void llvm::jitlink::Block::addEdge ( const Edge E)
inline

Add an edge by copying an existing one.

This is typically used when moving edges between blocks.

Definition at line 320 of file JITLink.h.

References E.

◆ addEdge() [2/2]

void llvm::jitlink::Block::addEdge ( Edge::Kind  K,
Edge::OffsetT  Offset,
Symbol Target,
Edge::AddendT  Addend 
)
inline

Add an edge to this block.

Definition at line 311 of file JITLink.h.

References assert(), isZeroFill(), llvm::jitlink::Edge::KeepAlive, and llvm::Offset.

Referenced by llvm::jitlink::loongarch::createAnonymousPointerJumpStub().

◆ edges() [1/2]

iterator_range< edge_iterator > llvm::jitlink::Block::edges ( )
inline

Return the list of edges attached to this content.

Definition at line 323 of file JITLink.h.

References llvm::make_range().

Referenced by llvm::jitlink::finalizeBlockRelax(), and llvm::jitlink::prune().

◆ edges() [2/2]

iterator_range< const_edge_iterator > llvm::jitlink::Block::edges ( ) const
inline

Returns the list of edges attached to this content.

Definition at line 328 of file JITLink.h.

References llvm::make_range().

◆ edges_empty()

bool llvm::jitlink::Block::edges_empty ( ) const
inline

Returns true if the list of edges is empty.

Definition at line 336 of file JITLink.h.

◆ edges_size()

size_t llvm::jitlink::Block::edges_size ( ) const
inline

Return the size of the edges list.

Definition at line 333 of file JITLink.h.

◆ getAlignment()

uint64_t llvm::jitlink::Block::getAlignment ( ) const
inline

Get the alignment for this content.

Definition at line 292 of file JITLink.h.

References llvm::jitlink::Addressable::P2Align.

◆ getAlignmentOffset()

uint64_t llvm::jitlink::Block::getAlignmentOffset ( ) const
inline

Get the alignment offset for this content.

Definition at line 301 of file JITLink.h.

References llvm::jitlink::Addressable::AlignmentOffset.

◆ getAlreadyMutableContent()

MutableArrayRef< char > llvm::jitlink::Block::getAlreadyMutableContent ( )
inline

Get mutable content for this block.

This block's content must already be mutable. It is a programmatic error to call this on a block with immutable content – consider using getMutableContent instead.

Definition at line 266 of file JITLink.h.

References assert(), llvm::jitlink::Addressable::ContentMutable, and Size.

Referenced by llvm::jitlink::finalizeBlockRelax().

◆ getContent()

ArrayRef< char > llvm::jitlink::Block::getContent ( ) const
inline

Get the content for this block. Block must not be a zero-fill block.

Definition at line 239 of file JITLink.h.

References assert(), and Size.

Referenced by llvm::jitlink::Symbol::getSymbolContent().

◆ getFixupAddress()

orc::ExecutorAddr llvm::jitlink::Block::getFixupAddress ( const Edge E) const
inline

Returns the address of the fixup for the given edge, which is equal to this block's address plus the edge's offset.

Definition at line 344 of file JITLink.h.

References E, and llvm::jitlink::Addressable::getAddress().

◆ getMutableContent()

MutableArrayRef< char > llvm::jitlink::Block::getMutableContent ( LinkGraph G)
inline

Get mutable content for this block.

If this Block's content is not already mutable this will trigger a copy of the existing immutable content to a new, mutable buffer allocated using LinkGraph::allocateContent.

Definition at line 1552 of file JITLink.h.

References llvm::jitlink::Addressable::ContentMutable, G, and setMutableContent().

◆ getRange()

orc::ExecutorAddrRange llvm::jitlink::Block::getRange ( ) const
inline

Returns the address range of this defined addressable.

Definition at line 234 of file JITLink.h.

References llvm::jitlink::Addressable::getAddress(), and getSize().

◆ getSection()

Section & llvm::jitlink::Block::getSection ( ) const
inline

◆ getSize()

size_t llvm::jitlink::Block::getSize ( ) const
inline

Returns the size of this defined addressable.

Definition at line 231 of file JITLink.h.

References Size.

Referenced by llvm::jitlink::SectionRange::getEnd(), getRange(), llvm::jitlink::Symbol::setSize(), and llvm::jitlink::LinkGraph::transferDefinedSymbol().

◆ isContentMutable()

bool llvm::jitlink::Block::isContentMutable ( ) const
inline

Returns true if this block's content is mutable.

This is primarily useful for asserting that a block is already in a mutable state prior to modifying the content. E.g. when applying fixups we expect the block to already be mutable as it should have been copied to working memory.

Definition at line 289 of file JITLink.h.

References llvm::jitlink::Addressable::ContentMutable.

◆ isZeroFill()

bool llvm::jitlink::Block::isZeroFill ( ) const
inline

Returns true if this is a zero-fill block.

If true, getSize is callable but getContent is not (the content is defined to be a sequence of zero bytes of length Size).

Definition at line 228 of file JITLink.h.

Referenced by addEdge(), and llvm::jitlink::Symbol::isSymbolZeroFill().

◆ operator=() [1/2]

Block & llvm::jitlink::Block::operator= ( Block &&  )
delete

◆ operator=() [2/2]

Block & llvm::jitlink::Block::operator= ( const Block )
delete

◆ removeEdge()

edge_iterator llvm::jitlink::Block::removeEdge ( edge_iterator  I)
inline

Remove the edge pointed to by the given iterator.

Returns an iterator to the new next element.

Definition at line 340 of file JITLink.h.

References I.

Referenced by llvm::jitlink::finalizeBlockRelax().

◆ setAlignment()

void llvm::jitlink::Block::setAlignment ( uint64_t  Alignment)
inline

Set the alignment for this content.

Definition at line 295 of file JITLink.h.

References assert(), llvm::countr_zero(), llvm::isPowerOf2_64(), and llvm::jitlink::Addressable::P2Align.

◆ setAlignmentOffset()

void llvm::jitlink::Block::setAlignmentOffset ( uint64_t  AlignmentOffset)
inline

Set the alignment offset for this content.

Definition at line 304 of file JITLink.h.

References llvm::jitlink::Addressable::AlignmentOffset, assert(), and llvm::jitlink::Addressable::P2Align.

◆ setContent()

void llvm::jitlink::Block::setContent ( ArrayRef< char Content)
inline

Set the content for this block.

Caller is responsible for ensuring the underlying bytes are not deallocated while pointed to by this block.

Definition at line 247 of file JITLink.h.

References assert(), Content, llvm::jitlink::Addressable::ContentMutable, and Size.

◆ setMutableContent()

void llvm::jitlink::Block::setMutableContent ( MutableArrayRef< char MutableContent)
inline

Set mutable content for this block.

The caller is responsible for ensuring that the memory pointed to by MutableContent is not deallocated while pointed to by this block.

Definition at line 276 of file JITLink.h.

References assert(), llvm::jitlink::Addressable::ContentMutable, llvm::MutableArrayRef< T >::data(), llvm::ArrayRef< T >::size(), and Size.

Referenced by getMutableContent().

Friends And Related Function Documentation

◆ LinkGraph

friend class LinkGraph
friend

Definition at line 158 of file JITLink.h.


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