LLVM  14.0.0git

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

## Classes

class  nested_collection_iterator

## Public Types

using external_symbol_iterator = ExternalSymbolSet::iterator

using section_iterator = pointee_iterator< SectionList::iterator >

using const_section_iterator = pointee_iterator< SectionList::const_iterator >

using defined_symbol_iterator = nested_collection_iterator< const_section_iterator, Section::symbol_iterator, Symbol *, getSectionSymbols >

using const_defined_symbol_iterator = nested_collection_iterator< const_section_iterator, Section::const_symbol_iterator, const Symbol *, getSectionConstSymbols >

using block_iterator = nested_collection_iterator< const_section_iterator, Section::block_iterator, Block *, getSectionBlocks >

using const_block_iterator = nested_collection_iterator< const_section_iterator, Section::const_block_iterator, const Block *, getSectionConstBlocks >

using GetEdgeKindNameFunction = const char *(*)(Edge::Kind)

using SplitBlockCache = Optional< SmallVector< Symbol *, 8 > >
Cache type for the splitBlock function. More...

## Public Member Functions

LinkGraph (std::string Name, const Triple &TT, unsigned PointerSize, support::endianness Endianness, GetEdgeKindNameFunction GetEdgeKindName)

const std::string & getName () const
Returns the name of this graph (usually the name of the original underlying MemoryBuffer). More...

const TriplegetTargetTriple () const
Returns the target triple for this Graph. More...

unsigned getPointerSize () const
Returns the pointer size for use in this graph. More...

support::endianness getEndianness () const
Returns the endianness of content in this graph. More...

const char * getEdgeKindName (Edge::Kind K) const

MutableArrayRef< char > allocateBuffer (size_t Size)
Allocate a mutable buffer of the given size using the LinkGraph's allocator. More...

MutableArrayRef< char > allocateContent (ArrayRef< char > Source)
Allocate a copy of the given string using the LinkGraph's allocator. More...

MutableArrayRef< char > allocateString (Twine Source)
Allocate a copy of the given string using the LinkGraph's allocator. More...

SectioncreateSection (StringRef Name, sys::Memory::ProtectionFlags Prot)
Create a section with the given name, protection flags, and alignment. More...

BlockcreateContentBlock (Section &Parent, ArrayRef< char > Content, uint64_t Address, uint64_t Alignment, uint64_t AlignmentOffset)
Create a content block. More...

BlockcreateMutableContentBlock (Section &Parent, MutableArrayRef< char > MutableContent, uint64_t Address, uint64_t Alignment, uint64_t AlignmentOffset)
Create a content block with initially mutable data. More...

BlockcreateZeroFillBlock (Section &Parent, uint64_t Size, uint64_t Address, uint64_t Alignment, uint64_t AlignmentOffset)
Create a zero-fill block. More...

BlocksplitBlock (Block &B, size_t SplitIndex, SplitBlockCache *Cache=nullptr)
Splits block B at the given index which must be greater than zero. More...

Convenience method for adding a weak zero-fill symbol. More...

iterator_range< section_iteratorsections ()

SectionList::size_type sections_size () const

SectionfindSectionByName (StringRef Name)
Returns the section with the given name if it exists, otherwise returns null. More...

iterator_range< block_iteratorblocks ()

iterator_range< const_block_iteratorblocks () const

iterator_range< external_symbol_iteratorexternal_symbols ()

iterator_range< external_symbol_iteratorabsolute_symbols ()

iterator_range< defined_symbol_iteratordefined_symbols ()

iterator_range< const_defined_symbol_iteratordefined_symbols () const

void makeExternal (Symbol &Sym)
Make the given symbol external (must not already be external). More...

Make the given symbol an absolute with the given address (must not already be absolute). More...

Turn an absolute or external symbol into a defined one by attaching it to a block. More...

void transferDefinedSymbol (Symbol &Sym, Block &DestBlock, JITTargetAddress NewOffset, Optional< JITTargetAddress > ExplicitNewSize)
Transfer a defined symbol from one block to another. More...

void transferBlock (Block &B, Section &NewSection)
Transfers the given Block and all Symbols pointing to it to the given Section. More...

void mergeSections (Section &DstSection, Section &SrcSection, bool PreserveSrcSection=false)
Move all blocks and symbols from the source section to the destination section. More...

void removeExternalSymbol (Symbol &Sym)
Removes an external symbol. Also removes the underlying Addressable. More...

void removeAbsoluteSymbol (Symbol &Sym)
Remove an absolute symbol. Also removes the underlying Addressable. More...

void removeDefinedSymbol (Symbol &Sym)
Removes defined symbols. Does not remove the underlying block. More...

void removeBlock (Block &B)
Remove a block. More...

void removeSection (Section &Sec)
Remove a section. More...

void dump (raw_ostream &OS)
Dump the graph. More...

## Detailed Description

Definition at line 784 of file JITLink.h.

## ◆ block_iterator

Definition at line 904 of file JITLink.h.

## ◆ const_block_iterator

Definition at line 909 of file JITLink.h.

## ◆ const_defined_symbol_iterator

Definition at line 900 of file JITLink.h.

## ◆ const_section_iterator

Definition at line 843 of file JITLink.h.

## ◆ defined_symbol_iterator

Definition at line 895 of file JITLink.h.

## ◆ external_symbol_iterator

Definition at line 840 of file JITLink.h.

## ◆ GetEdgeKindNameFunction

Definition at line 911 of file JITLink.h.

## ◆ section_iterator

Definition at line 842 of file JITLink.h.

## ◆ SplitBlockCache

Cache type for the splitBlock function.

Definition at line 999 of file JITLink.h.

## Constructor & Destructor Documentation

inline

Definition at line 913 of file JITLink.h.

## ◆ absolute_symbols()

inline

Definition at line 1145 of file JITLink.h.

inline

Definition at line 1058 of file JITLink.h.

inline

Definition at line 1090 of file JITLink.h.

inline

Convenience method for adding a weak zero-fill symbol.

Definition at line 1073 of file JITLink.h.

inline

Definition at line 1100 of file JITLink.h.

inline

Some formats (e.g. ELF) allow Symbols to have sizes. For Symbols whose size is not known, you should substitute '0'. For external symbols Linkage determines whether the symbol must be present during lookup: Externals with strong linkage must be found or an error will be emitted. Externals with weak linkage are permitted to be undefined, in which case they are assigned a value of 0.

Definition at line 1044 of file JITLink.h.

## ◆ allocateBuffer()

inline

Allocate a mutable buffer of the given size using the LinkGraph's allocator.

Definition at line 936 of file JITLink.h.

## ◆ allocateContent()

inline

Allocate a copy of the given string using the LinkGraph's allocator.

This can be useful when renaming symbols or adding new content to the graph.

Definition at line 943 of file JITLink.h.

## ◆ allocateString()

inline

Allocate a copy of the given string using the LinkGraph's allocator.

This can be useful when renaming symbols or adding new content to the graph.

Note: This Twine-based overload requires an extra string copy and an extra heap allocation for large strings. The ArrayRef<char> overload should be preferred where possible.

Definition at line 956 of file JITLink.h.

## ◆ blocks() [1/2]

inline

Definition at line 1131 of file JITLink.h.

References llvm::make_range().

## ◆ blocks() [2/2]

inline

Definition at line 1136 of file JITLink.h.

References llvm::make_range().

## ◆ createContentBlock()

 Block& llvm::jitlink::LinkGraph::createContentBlock ( Section & Parent, ArrayRef< char > Content, uint64_t Address, uint64_t Alignment, uint64_t AlignmentOffset )
inline

Create a content block.

Definition at line 977 of file JITLink.h.

## ◆ createMutableContentBlock()

 Block& llvm::jitlink::LinkGraph::createMutableContentBlock ( Section & Parent, MutableArrayRef< char > MutableContent, uint64_t Address, uint64_t Alignment, uint64_t AlignmentOffset )
inline

Create a content block with initially mutable data.

Definition at line 984 of file JITLink.h.

## ◆ createSection()

inline

Create a section with the given name, protection flags, and alignment.

Definition at line 965 of file JITLink.h.

References assert(), llvm::find_if(), move, and llvm::ARMBuildAttrs::Section.

## ◆ createZeroFillBlock()

inline

Create a zero-fill block.

Definition at line 993 of file JITLink.h.

## ◆ defined_symbols() [1/2]

inline

Definition at line 1149 of file JITLink.h.

References llvm::make_range().

## ◆ defined_symbols() [2/2]

inline

Definition at line 1154 of file JITLink.h.

References llvm::make_range().

## ◆ dump()

Dump the graph.

Definition at line 228 of file JITLink.cpp.

References llvm::sort().

## ◆ external_symbols()

inline

Definition at line 1141 of file JITLink.h.

## ◆ findSectionByName()

inline

Returns the section with the given name if it exists, otherwise returns null.

Definition at line 1124 of file JITLink.h.

References S, and sections().

## ◆ getEdgeKindName()

inline

Definition at line 932 of file JITLink.h.

## ◆ getEndianness()

inline

Returns the endianness of content in this graph.

Definition at line 930 of file JITLink.h.

## ◆ getName()

inline

Returns the name of this graph (usually the name of the original underlying MemoryBuffer).

Definition at line 921 of file JITLink.h.

## ◆ getPointerSize()

inline

Returns the pointer size for use in this graph.

Definition at line 927 of file JITLink.h.

## ◆ getTargetTriple()

inline

Returns the target triple for this Graph.

Definition at line 924 of file JITLink.h.

## ◆ makeAbsolute()

inline

Make the given symbol an absolute with the given address (must not already be absolute).

Symbol size, linkage, scope, and callability, and liveness will be left unchanged. Symbol offset will be reset to 0.

Definition at line 1186 of file JITLink.h.

## ◆ makeDefined()

inline

Turn an absolute or external symbol into a defined one by attaching it to a block.

Symbol must not already be defined.

Definition at line 1205 of file JITLink.h.

## ◆ makeExternal()

inline

Make the given symbol external (must not already be external).

Symbol size, linkage and callability will be left unchanged. Symbol scope will be set to Default, and offset will be reset to 0.

Definition at line 1164 of file JITLink.h.

## ◆ mergeSections()

 void llvm::jitlink::LinkGraph::mergeSections ( Section & DstSection, Section & SrcSection, bool PreserveSrcSection = false )
inline

Move all blocks and symbols from the source section to the destination section.

If PreserveSrcSection is true (or SrcSection and DstSection are the same) then SrcSection is preserved, otherwise it is removed (the default).

Definition at line 1284 of file JITLink.h.

References removeSection().

## ◆ removeAbsoluteSymbol()

inline

Remove an absolute symbol. Also removes the underlying Addressable.

Definition at line 1309 of file JITLink.h.

## ◆ removeBlock()

inline

Remove a block.

The block reference is defunct after calling this function and should no longer be used.

Definition at line 1333 of file JITLink.h.

References assert(), B, and llvm::none_of().

## ◆ removeDefinedSymbol()

inline

Removes defined symbols. Does not remove the underlying block.

Definition at line 1325 of file JITLink.h.

## ◆ removeExternalSymbol()

inline

Removes an external symbol. Also removes the underlying Addressable.

Definition at line 1294 of file JITLink.h.

## ◆ removeSection()

inline

Remove a section.

The section reference is defunct after calling this function and should no longer be used.

Definition at line 1345 of file JITLink.h.

References assert(), llvm::find_if(), I, and S.

Referenced by mergeSections().

inline

## ◆ sections_size()

inline

Definition at line 1120 of file JITLink.h.

## ◆ splitBlock()

 Block & llvm::jitlink::LinkGraph::splitBlock ( Block & B, size_t SplitIndex, SplitBlockCache * Cache = nullptr )

Splits block B at the given index which must be greater than zero.

If SplitIndex == B.getSize() then this function is a no-op and returns B. If SplitIndex < B.getSize() then this function returns a new block covering the range [ 0, SplitIndex ), and B is modified to cover the range [ SplitIndex, B.size() ).

The optional Cache parameter can be used to speed up repeated calls to splitBlock for a single block. If the value is None the cache will be treated as uninitialized and splitBlock will populate it. Otherwise it is assumed to contain the list of Symbols pointing at B, sorted in descending order of offset.

Notes:

1. splitBlock must be used with care. Splitting a block may cause incoming edges to become invalid if the edge target subexpression points outside the bounds of the newly split target block (E.g. an edge 'S + 10 : Pointer64' where S points to a newly split block whose size is less than 10). No attempt is made to detect invalidation of incoming edges, as in general this requires context that the LinkGraph does not have. Clients are responsible for ensuring that splitBlock is not used in a way that invalidates edges.
2. The newly introduced block will have a new ordinal which will be higher than any other ordinals in the section. Clients are responsible for re-assigning block ordinals to restore a compatible order if needed.
3. The cache is not automatically updated if new symbols are introduced between calls to splitBlock. Any newly introduced symbols may be added to the cache manually (descending offset order must be preserved), or the cache can be set to None and rebuilt by splitBlock on the next call.

Definition at line 153 of file JITLink.cpp.

References assert(), B, llvm::jitlink::Symbol::getOffset(), I, llvm::None, and llvm::sort().

## ◆ transferBlock()

inline

Transfers the given Block and all Symbols pointing to it to the given Section.

No attempt is made to check compatibility of the source and destination sections. Blocks may be moved between sections with incompatible permissions (e.g. from data to text). The client is responsible for ensuring that this is safe.

Definition at line 1263 of file JITLink.h.

References B, and S.

## ◆ transferDefinedSymbol()

inline

Transfer a defined symbol from one block to another.

The symbol's offset within DestBlock is set to NewOffset.

If ExplicitNewSize is given as None then the size of the symbol will be checked and auto-truncated to at most the size of the remainder (from the given offset) of the size of the new block.

All other symbol attributes are unchanged.

Definition at line 1237 of file JITLink.h.

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