LLVM 22.0.0git
llvm::jitlink Namespace Reference

Namespaces

namespace  aarch32
namespace  aarch64
namespace  loongarch
namespace  ppc64
namespace  riscv
namespace  x86
namespace  x86_64

Classes

class  Addressable
 Base class for Addressable entities (externals, absolutes, blocks). More...
class  BasicLayout
 BasicLayout simplifies the implementation of JITLinkMemoryManagers. More...
class  Block
 An Addressable with content and edges. More...
class  BlockAddressMap
 Enables easy lookup of blocks by addresses. More...
class  COFFDirectiveParser
 Parser for the MSVC specific preprocessor directives. More...
class  COFFLinkGraphBuilder
class  CompactUnwindManager
 Architecture specific implementation of CompactUnwindManager. More...
struct  CompactUnwindTraits
 CRTP base for compact unwind traits classes. More...
struct  CompactUnwindTraits_MachO_arm64
struct  CompactUnwindTraits_MachO_x86_64
class  DefineExternalSectionStartAndEndSymbols
 Pass implementation for the createDefineExternalSectionStartAndEndSymbols function. More...
class  DWARFRecordSectionSplitter
 A LinkGraph pass that splits blocks in a section that follows the DWARF Record format into sub-blocks where each header gets its own block. More...
class  Edge
 Represents fixups and constraints in the LinkGraph. More...
class  EHFrameCFIBlockInspector
 Inspect an eh-frame CFI record. More...
class  EHFrameEdgeFixer
 A LinkGraph pass that adds missing FDE-to-CIE, FDE-to-PC and FDE-to-LSDA edges. More...
class  EHFrameNullTerminator
 Add a 32-bit null-terminator to the end of the eh-frame section. More...
class  ELFJITLinker_aarch32
class  ELFJITLinker_ppc64
class  ELFJITLinker_riscv
class  ELFJITLinker_x86
class  ELFJITLinker_x86_64
class  ELFLinkGraphBuilder
 LinkGraph building code that's specific to the given ELFT, but common across all architectures. More...
class  ELFLinkGraphBuilder_aarch32
class  ELFLinkGraphBuilder_ppc64
class  ELFLinkGraphBuilder_riscv
class  ELFLinkGraphBuilder_x86
class  ELFLinkGraphBuilder_x86_64
class  ELFLinkGraphBuilderBase
 Common link-graph building code shared between all ELFFiles. More...
class  GetImageBaseSymbol
class  InProcessMemoryManager
 A JITLinkMemoryManager that allocates in-process memory. More...
class  JITLinkAsyncLookupContinuation
 A function object to call with a resolved symbol map (See AsyncLookupResult) or an error if resolution failed. More...
class  JITLinkContext
 Holds context for a single jitLink invocation. More...
class  JITLinkDylib
class  JITLinker
class  JITLinkerBase
 Base class for a JIT linker. More...
class  JITLinkError
 Base class for errors originating in JIT linker, e.g. More...
class  JITLinkMemoryManager
 Manages allocations of JIT memory. More...
class  LinkGraph
class  MachOJITLinker_arm64
class  MachOJITLinker_x86_64
class  MachOLinkGraphBuilder
struct  PassConfiguration
 An LinkGraph pass configuration, consisting of a list of pre-prune, post-prune, and post-fixup passes. More...
class  PerGraphGOTAndPLTStubsBuilder
 Per-object GOT and PLT Stub builder. More...
class  Section
 Represents an object file section. More...
class  SectionRange
 Represents a section address range via a pair of Block pointers to the first and last Blocks in the section. More...
struct  SectionRangeSymbolDesc
class  SEHFrameKeepAlivePass
 This pass adds keep-alive edge from SEH frame sections to the parent function content block. More...
class  SimpleSegmentAlloc
 A utility class for making simple allocations using JITLinkMemoryManager. More...
class  Symbol
 Symbol representation. More...
class  SymbolAddressMap
 A map of addresses to Symbols. More...
class  TableManager
 A CRTP base for tables that are built on demand, e.g. More...
class  XCOFFJITLinker_ppc64
class  XCOFFLinkGraphBuilder

Typedefs

using SectionOrdinal = unsigned
using TargetFlagsType = uint8_t
 Holds target-specific properties for a symbol.
using LinkGraphPassFunction = unique_function<Error(LinkGraph &)>
 A function for mutating LinkGraphs.
using LinkGraphPassList = std::vector<LinkGraphPassFunction>
 A list of LinkGraph passes.
using AsyncLookupResult
 A map of symbol names to resolved addresses.
using AnonymousPointerCreator
 Creates a new pointer block in the given section and returns an Anonymous symbol pointing to it.
using PointerJumpStubCreator
 Create a jump stub that jumps via the pointer at the given symbol and an anonymous symbol pointing to it.

Enumerations

enum class  Linkage : uint8_t { Strong , Weak }
 Describes symbol linkage. This can be used to resolve definition clashes. More...
enum class  Scope : uint8_t { Default , Hidden , SideEffectsOnly , Local }
 Defines the scope in which this symbol should be visible: Default – Visible in the public interface of the linkage unit. More...
enum class  SymbolLookupFlags { RequiredSymbol , WeaklyReferencedSymbol }
 Flags for symbol lookup. More...
enum  { COFF_OPT_INVALID = 0 }

Functions

Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromCOFFObject (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an COFF relocatable object.
void link_COFF (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 Link the given graph.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromCOFFObject_x86_64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an COFF/x86-64 relocatable object.
void link_COFF_x86_64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a COFF x86-64 object file.
const chargetCOFFX86RelocationKindName (Edge::Kind R)
 Return the string name of the given COFF x86-64 edge kind.
LLVM_ABI SectiongetEHFrameSection (LinkGraph &G)
 Returns a pointer to the DWARF eh-frame section if the graph contains a non-empty one, otherwise returns null.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF relocatable object.
void link_ELF (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 Link the given graph.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_aarch32 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/arm relocatable object.
void link_ELF_aarch32 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be an ELF arm/thumb object file.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_aarch64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/aarch64 relocatable object.
void link_ELF_aarch64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a ELF aarch64 relocatable object file.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_loongarch (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/loongarch relocatable object.
void link_ELF_loongarch (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be an ELF loongarch object file.
LinkGraphPassFunction createRelaxationPass_ELF_loongarch ()
 Returns a pass that performs linker relaxation.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_ppc64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/ppc64 relocatable object.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_ppc64le (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/ppc64le relocatable object.
void link_ELF_ppc64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a ELF ppc64le object file.
void link_ELF_ppc64le (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a ELF ppc64le object file.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_riscv (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/riscv relocatable object.
void link_ELF_riscv (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a ELF riscv object file.
LinkGraphPassFunction createRelaxationPass_ELF_riscv ()
 Returns a pass that performs linker relaxation.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_x86 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/x86 relocatable object.
void link_ELF_x86 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a ELF x86 relocatable object file.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_x86_64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an ELF/x86-64 relocatable object.
void link_ELF_x86_64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a ELF x86-64 object file.
LLVM_ABI const chargetGenericEdgeKindName (Edge::Kind K)
 Returns the string name of the given generic edge kind, or "unknown" otherwise.
uint64_t alignToBlock (uint64_t Addr, const Block &B)
orc::ExecutorAddr alignToBlock (orc::ExecutorAddr Addr, const Block &B)
LLVM_ABI bool isCStringBlock (Block &B)
LLVM_ABI const chargetLinkageName (Linkage L)
 For errors and debugging output.
LLVM_ABI const chargetScopeName (Scope S)
 For debugging output.
LLVM_ABI raw_ostreamoperator<< (raw_ostream &OS, const Block &B)
LLVM_ABI raw_ostreamoperator<< (raw_ostream &OS, const Symbol &A)
LLVM_ABI void printEdge (raw_ostream &OS, const Block &B, const Edge &E, StringRef EdgeKindName)
LLVM_ABI raw_ostreamoperator<< (raw_ostream &OS, const SymbolLookupFlags &LF)
template<typename Continuation>
std::unique_ptr< JITLinkAsyncLookupContinuationcreateLookupContinuation (Continuation Cont)
 Create a lookup continuation from a function object.
LLVM_ABI Error markAllSymbolsLive (LinkGraph &G)
 Marks all symbols in a graph live.
LLVM_ABI Error makeTargetOutOfRangeError (const LinkGraph &G, const Block &B, const Edge &E)
 Create an out of range error for the given edge in the given block.
LLVM_ABI Error makeAlignmentError (llvm::orc::ExecutorAddr Loc, uint64_t Value, int N, const Edge &E)
LLVM_ABI AnonymousPointerCreator getAnonymousPointerCreator (const Triple &TT)
 Get target-specific AnonymousPointerCreator.
LLVM_ABI PointerJumpStubCreator getPointerJumpStubCreator (const Triple &TT)
 Get target-specific PointerJumpStubCreator.
void visitEdge (LinkGraph &G, Block *B, Edge &E)
 Base case for edge-visitors where the visitor-list is empty.
template<typename VisitorT, typename... VisitorTs>
void visitEdge (LinkGraph &G, Block *B, Edge &E, VisitorT &&V, VisitorTs &&...Vs)
 Applies the first visitor in the list to the given edge.
template<typename... VisitorTs>
void visitExistingEdges (LinkGraph &G, VisitorTs &&...Vs)
 For each edge in the given graph, apply a list of visitors to the edge, stopping when the first visitor's visitEdge method returns true.
LLVM_ABI Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromObject (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from the given object buffer.
LLVM_ABI std::unique_ptr< LinkGraphabsoluteSymbolsLinkGraph (Triple TT, std::shared_ptr< orc::SymbolStringPool > SSP, orc::SymbolMap Symbols)
 Create a LinkGraph defining the given absolute symbols.
LLVM_ABI void link (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 Link the given graph.
LLVM_ABI Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromMachOObject (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from a MachO relocatable object.
LLVM_ABI void link_MachO (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given ObjBuffer, which must be a MachO object file.
SectiongetMachODefaultRWDataSection (LinkGraph &G)
 Get a pointer to the standard MachO data section (creates an empty section with RW- permissions and standard lifetime if one does not already exist).
SectiongetMachODefaultTextSection (LinkGraph &G)
 Get a pointer to the standard MachO text section (creates an empty section with R-X permissions and standard lifetime if one does not already exist).
LLVM_ABI Expected< Symbol & > getOrCreateLocalMachOHeader (LinkGraph &G)
 Gets or creates a MachO header for the current LinkGraph.
LLVM_ABI Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromMachOObject_arm64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from a MachO/arm64 relocatable object.
LLVM_ABI void link_MachO_arm64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a MachO arm64 object file.
LLVM_ABI LinkGraphPassFunction createEHFrameSplitterPass_MachO_arm64 ()
 Returns a pass suitable for splitting __eh_frame sections in MachO/x86-64 objects.
LLVM_ABI LinkGraphPassFunction createEHFrameEdgeFixerPass_MachO_arm64 ()
 Returns a pass suitable for fixing missing edges in an __eh_frame section in a MachO/x86-64 object.
LLVM_ABI Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromMachOObject_x86_64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from a MachO/x86-64 relocatable object.
LLVM_ABI void link_MachO_x86_64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given LinkGraph.
LLVM_ABI LinkGraphPassFunction createEHFrameSplitterPass_MachO_x86_64 ()
 Returns a pass suitable for splitting __eh_frame sections in MachO/x86-64 objects.
LLVM_ABI LinkGraphPassFunction createEHFrameEdgeFixerPass_MachO_x86_64 ()
 Returns a pass suitable for fixing missing edges in an __eh_frame section in a MachO/x86-64 object.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromXCOFFObject (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an XCOFF relocatable object.
void link_XCOFF (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 Link the given graph.
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromXCOFFObject_ppc64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
 Create a LinkGraph from an XCOFF/ppc64 relocatable object.
void link_XCOFF_ppc64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
 jit-link the given object buffer, which must be a XCOFF ppc64 object file.
static StringRef getMachineName (uint16_t Machine)
static Triple createTripleWithCOFFFormat (Triple T)
Error splitCompactUnwindBlocks (LinkGraph &G, Section &CompactUnwindSection, size_t RecordSize)
 Split blocks in an __LD,__compact_unwind section on record boundaries.
template<typename SymbolIdentifierFunction>
DefineExternalSectionStartAndEndSymbols< SymbolIdentifierFunction > createDefineExternalSectionStartAndEndSymbolsPass (SymbolIdentifierFunction &&F)
 Returns a JITLink pass (as a function class) that uses the given symbol identification function to identify external section start and end symbols (and their associated Section*s) and transform the identified externals into defined symbols pointing to the start of the first block in the section and the end of the last (start and end symbols for empty sections will be transformed into absolute symbols at address 0).
SectionRangeSymbolDesc identifyELFSectionStartAndEndSymbols (LinkGraph &G, Symbol &Sym)
 ELF section start/end symbol detection.
SectionRangeSymbolDesc identifyMachOSectionStartAndEndSymbols (LinkGraph &G, Symbol &Sym)
 MachO section start/end symbol detection.
static Expected< size_t > readCFIRecordLength (const Block &B, BinaryStreamReader &R)
Expected< uint16_treadTargetMachineArch (StringRef Buffer)
LLVM_ABI Expected< aarch32::EdgeKind_aarch32getJITLinkEdgeKind (uint32_t ELFType, const aarch32::ArmConfig &ArmCfg)
 Translate from ELF relocation type to JITLink-internal edge kind.
LLVM_ABI Expected< uint32_tgetELFRelocationType (Edge::Kind Kind)
 Translate from JITLink-internal edge kind back to ELF relocation type.
const chargetELFAArch32EdgeKindName (Edge::Kind R)
 Get a human-readable name for the given ELF AArch32 edge kind.
template<typename StubsManagerType>
Error buildTables_ELF_aarch32 (LinkGraph &G)
template<llvm::endianness Endianness>
Expected< std::unique_ptr< LinkGraph > > createLinkGraphFromELFObject_ppc64 (MemoryBufferRef ObjectBuffer, std::shared_ptr< orc::SymbolStringPool > SSP)
template<llvm::endianness Endianness>
void link_ELF_ppc64 (std::unique_ptr< LinkGraph > G, std::unique_ptr< JITLinkContext > Ctx)
static uint32_t extractBits (uint32_t Num, unsigned Low, unsigned Size)
static bool isAlignmentCorrect (uint64_t Value, int N)
static bool isInRangeForImm (int64_t Value, int N)
static bool shouldRelax (const Section &S)
static bool isRelaxable (const Edge &E)
static RelaxAux initRelaxAux (LinkGraph &G)
static void relaxAlign (orc::ExecutorAddr Loc, const Edge &E, uint32_t &Remove, Edge::Kind &NewEdgeKind)
static void relaxCall (const Block &B, BlockRelaxAux &Aux, const RelaxConfig &Config, orc::ExecutorAddr Loc, const Edge &E, uint32_t &Remove, Edge::Kind &NewEdgeKind)
static bool relaxBlock (LinkGraph &G, Block &Block, BlockRelaxAux &Aux, const RelaxConfig &Config)
static bool relaxOnce (LinkGraph &G, RelaxAux &Aux)
static void finalizeBlockRelax (LinkGraph &G, Block &Block, BlockRelaxAux &Aux)
static void finalizeRelax (LinkGraph &G, RelaxAux &Aux)
static Error relax (LinkGraph &G)
void prune (LinkGraph &G)
 Removes dead symbols/blocks/addressables.
template<typename MachOHeaderType>
static Expected< Block & > createLocalHeaderBlock (LinkGraph &G, Section &Sec)
Error buildTables_MachO_arm64 (LinkGraph &G)
static Error applyPACSigningToModInitPointers (LinkGraph &G)
static llvm::StringRef getStorageClassString (XCOFF::StorageClass SC)
static std::optional< object::XCOFFSymbolRefgetXCOFFSymbolContainingSymbolRef (const object::XCOFFObjectFile &Obj, const object::SymbolRef &Sym)
static void printSymbolEntry (raw_ostream &OS, const object::XCOFFObjectFile &Obj, const object::XCOFFSymbolRef &Sym)

Typedef Documentation

◆ AnonymousPointerCreator

Initial value:
unique_function<Symbol &(LinkGraph &G, Section &PointerSection,
Symbol *InitialTarget, uint64_t InitialAddend)>
#define G(x, y, z)
Definition MD5.cpp:56
unique_function is a type-erasing functor similar to std::function.

Creates a new pointer block in the given section and returns an Anonymous symbol pointing to it.

The pointer block will have the following default values: alignment: PointerSize alignment-offset: 0 address: highest allowable

Definition at line 2015 of file JITLink.h.

◆ AsyncLookupResult

Initial value:

A map of symbol names to resolved addresses.

Definition at line 1901 of file JITLink.h.

◆ LinkGraphPassFunction

A function for mutating LinkGraphs.

Definition at line 1831 of file JITLink.h.

◆ LinkGraphPassList

A list of LinkGraph passes.

Definition at line 1834 of file JITLink.h.

◆ PointerJumpStubCreator

Initial value:
LinkGraph &G, Section &StubSection, Symbol &PointerSymbol)>

Create a jump stub that jumps via the pointer at the given symbol and an anonymous symbol pointing to it.

Return the anonymous symbol.

The stub block will be created by createPointerJumpStubBlock.

Definition at line 2026 of file JITLink.h.

◆ SectionOrdinal

Definition at line 156 of file JITLink.h.

◆ TargetFlagsType

Holds target-specific properties for a symbol.

Definition at line 402 of file JITLink.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
COFF_OPT_INVALID 

Definition at line 27 of file COFFDirectiveParser.h.

◆ Linkage

enum class llvm::jitlink::Linkage : uint8_t
strong

Describes symbol linkage. This can be used to resolve definition clashes.

Enumerator
Strong 
Weak 

Definition at line 396 of file JITLink.h.

◆ Scope

enum class llvm::jitlink::Scope : uint8_t
strong

Defines the scope in which this symbol should be visible: Default – Visible in the public interface of the linkage unit.

Hidden – Visible within the linkage unit, but not exported from it. SideEffectsOnly – Like hidden, but symbol can only be looked up once to trigger materialization of the containing graph. Local – Visible only within the LinkGraph.

Enumerator
Default 
Hidden 
SideEffectsOnly 
Local 

Definition at line 413 of file JITLink.h.

◆ SymbolLookupFlags

Flags for symbol lookup.

FIXME: These basically duplicate orc::SymbolLookupFlags – We should merge the two types once we have an OrcSupport library.

Enumerator
RequiredSymbol 
WeaklyReferencedSymbol 

Definition at line 1896 of file JITLink.h.

Function Documentation

◆ absoluteSymbolsLinkGraph()

std::unique_ptr< LinkGraph > llvm::jitlink::absoluteSymbolsLinkGraph ( Triple TT,
std::shared_ptr< orc::SymbolStringPool > SSP,
orc::SymbolMap Symbols )

Create a LinkGraph defining the given absolute symbols.

Definition at line 519 of file JITLink.cpp.

References absoluteSymbolsLinkGraph(), Default, G, getGenericEdgeKindName(), and Strong.

Referenced by absoluteSymbolsLinkGraph().

◆ alignToBlock() [1/2]

orc::ExecutorAddr llvm::jitlink::alignToBlock ( orc::ExecutorAddr Addr,
const Block & B )
inline

Definition at line 386 of file JITLink.h.

References alignToBlock(), B(), and llvm::orc::ExecutorAddr::getValue().

◆ alignToBlock() [2/2]

uint64_t llvm::jitlink::alignToBlock ( uint64_t Addr,
const Block & B )
inline

Definition at line 380 of file JITLink.h.

References B().

Referenced by alignToBlock(), and llvm::jitlink::BasicLayout::apply().

◆ applyPACSigningToModInitPointers()

◆ buildTables_ELF_aarch32()

template<typename StubsManagerType>
Error llvm::jitlink::buildTables_ELF_aarch32 ( LinkGraph & G)

◆ buildTables_MachO_arm64()

Error llvm::jitlink::buildTables_MachO_arm64 ( LinkGraph & G)

Definition at line 560 of file MachO_arm64.cpp.

References llvm::dbgs(), G, LLVM_DEBUG, llvm::Error::success(), and visitExistingEdges().

Referenced by link_MachO_arm64().

◆ createDefineExternalSectionStartAndEndSymbolsPass()

template<typename SymbolIdentifierFunction>
DefineExternalSectionStartAndEndSymbols< SymbolIdentifierFunction > llvm::jitlink::createDefineExternalSectionStartAndEndSymbolsPass ( SymbolIdentifierFunction && F)

Returns a JITLink pass (as a function class) that uses the given symbol identification function to identify external section start and end symbols (and their associated Section*s) and transform the identified externals into defined symbols pointing to the start of the first block in the section and the end of the last (start and end symbols for empty sections will be transformed into absolute symbols at address 0).

The identification function should be callable as

SectionRangeSymbolDesc (LinkGraph &G, Symbol &Sym)

If Sym is not a section range start or end symbol then a default constructed SectionRangeSymbolDesc should be returned. If Sym is a start symbol then SectionRangeSymbolDesc(Sec, true), where Sec is a reference to the target Section. If Sym is an end symbol then SectionRangeSymbolDesc(Sec, false) should be returned.

This pass should be run in the PostAllocationPass pipeline, at which point all blocks should have been assigned their final addresses.

Definition at line 102 of file DefineExternalSectionStartAndEndSymbols.h.

References F.

Referenced by link_ELF_aarch64(), link_ELF_x86_64(), link_MachO_arm64(), and link_MachO_x86_64().

◆ createEHFrameEdgeFixerPass_MachO_arm64()

LinkGraphPassFunction llvm::jitlink::createEHFrameEdgeFixerPass_MachO_arm64 ( )

Returns a pass suitable for fixing missing edges in an __eh_frame section in a MachO/x86-64 object.

Definition at line 718 of file MachO_arm64.cpp.

Referenced by link_MachO_arm64().

◆ createEHFrameEdgeFixerPass_MachO_x86_64()

LinkGraphPassFunction llvm::jitlink::createEHFrameEdgeFixerPass_MachO_x86_64 ( )

Returns a pass suitable for fixing missing edges in an __eh_frame section in a MachO/x86-64 object.

Definition at line 590 of file MachO_x86_64.cpp.

Referenced by link_MachO_x86_64().

◆ createEHFrameSplitterPass_MachO_arm64()

LinkGraphPassFunction llvm::jitlink::createEHFrameSplitterPass_MachO_arm64 ( )

Returns a pass suitable for splitting __eh_frame sections in MachO/x86-64 objects.

Definition at line 714 of file MachO_arm64.cpp.

References llvm::orc::MachOEHFrameSectionName.

Referenced by link_MachO_arm64().

◆ createEHFrameSplitterPass_MachO_x86_64()

LinkGraphPassFunction llvm::jitlink::createEHFrameSplitterPass_MachO_x86_64 ( )

Returns a pass suitable for splitting __eh_frame sections in MachO/x86-64 objects.

Definition at line 586 of file MachO_x86_64.cpp.

References llvm::orc::MachOEHFrameSectionName.

Referenced by link_MachO_x86_64().

◆ createLinkGraphFromCOFFObject()

◆ createLinkGraphFromCOFFObject_x86_64()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromCOFFObject_x86_64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an COFF/x86-64 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 272 of file COFF_x86_64.cpp.

References llvm::object::ObjectFile::createCOFFObjectFile(), llvm::dbgs(), llvm::MemoryBufferRef::getBufferIdentifier(), and LLVM_DEBUG.

Referenced by createLinkGraphFromCOFFObject().

◆ createLinkGraphFromELFObject()

◆ createLinkGraphFromELFObject_aarch32()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_aarch32 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/arm relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 245 of file ELF_aarch32.cpp.

References llvm::Triple::arm, llvm::Triple::armeb, llvm::jitlink::ELFLinkGraphBuilder< ELFT >::buildGraph(), llvm::cast(), llvm::ObjectFile::createELFObjectFile(), llvm::dbgs(), llvm::ARM::getArchAttr(), llvm::jitlink::aarch32::getArmConfigForCPUArch(), llvm::MemoryBufferRef::getBufferIdentifier(), LLVM_DEBUG, llvm::make_error(), llvm::ARM::parseArch(), llvm::Triple::thumb, and llvm::Triple::thumbeb.

Referenced by createLinkGraphFromELFObject().

◆ createLinkGraphFromELFObject_aarch64()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_aarch64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/aarch64 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 675 of file ELF_aarch64.cpp.

References llvm::Triple::aarch64, assert(), llvm::cast(), llvm::object::ObjectFile::createELFObjectFile(), llvm::dbgs(), llvm::MemoryBufferRef::getBufferIdentifier(), and LLVM_DEBUG.

Referenced by createLinkGraphFromELFObject().

◆ createLinkGraphFromELFObject_loongarch()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_loongarch ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/loongarch relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 436 of file ELF_loongarch.cpp.

References assert(), llvm::cast(), llvm::object::ObjectFile::createELFObjectFile(), llvm::dbgs(), llvm::MemoryBufferRef::getBufferIdentifier(), LLVM_DEBUG, llvm::Triple::loongarch32, and llvm::Triple::loongarch64.

Referenced by createLinkGraphFromELFObject().

◆ createLinkGraphFromELFObject_ppc64() [1/2]

template<llvm::endianness Endianness>
Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_ppc64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

◆ createLinkGraphFromELFObject_ppc64() [2/2]

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_ppc64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/ppc64 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

WARNING: The big-endian backend has not been tested yet.

Definition at line 524 of file ELF_ppc64.cpp.

References createLinkGraphFromELFObject_ppc64().

Referenced by createLinkGraphFromELFObject(), createLinkGraphFromELFObject_ppc64(), and createLinkGraphFromELFObject_ppc64le().

◆ createLinkGraphFromELFObject_ppc64le()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_ppc64le ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/ppc64le relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 530 of file ELF_ppc64.cpp.

References createLinkGraphFromELFObject_ppc64().

Referenced by createLinkGraphFromELFObject().

◆ createLinkGraphFromELFObject_riscv()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_riscv ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/riscv relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 976 of file ELF_riscv.cpp.

References assert(), llvm::jitlink::ELFLinkGraphBuilder< ELFT >::buildGraph(), llvm::cast(), llvm::object::ObjectFile::createELFObjectFile(), llvm::dbgs(), llvm::MemoryBufferRef::getBufferIdentifier(), LLVM_DEBUG, llvm::Triple::riscv32, and llvm::Triple::riscv64.

Referenced by createLinkGraphFromELFObject().

◆ createLinkGraphFromELFObject_x86()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_x86 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/x86 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 242 of file ELF_x86.cpp.

References assert(), llvm::jitlink::ELFLinkGraphBuilder< ELFT >::buildGraph(), llvm::cast(), llvm::object::ObjectFile::createELFObjectFile(), llvm::dbgs(), llvm::MemoryBufferRef::getBufferIdentifier(), LLVM_DEBUG, and llvm::Triple::x86.

Referenced by createLinkGraphFromELFObject().

◆ createLinkGraphFromELFObject_x86_64()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromELFObject_x86_64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an ELF/x86-64 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 337 of file ELF_x86_64.cpp.

References llvm::jitlink::ELFLinkGraphBuilder< ELFT >::buildGraph(), llvm::cast(), llvm::object::ObjectFile::createELFObjectFile(), llvm::dbgs(), llvm::MemoryBufferRef::getBufferIdentifier(), and LLVM_DEBUG.

Referenced by createLinkGraphFromELFObject().

◆ createLinkGraphFromMachOObject()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromMachOObject ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from a MachO relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 28 of file MachO.cpp.

References llvm::byteswap(), llvm::MachO::CPU_TYPE_ARM64, llvm::MachO::CPU_TYPE_X86_64, createLinkGraphFromMachOObject_arm64(), createLinkGraphFromMachOObject_x86_64(), llvm::Data, llvm::dbgs(), llvm::format(), llvm::MemoryBufferRef::getBuffer(), llvm::MemoryBufferRef::getBufferIdentifier(), LLVM_DEBUG, llvm::make_error(), llvm::MachO::MH_CIGAM, llvm::MachO::MH_CIGAM_64, llvm::MachO::MH_MAGIC, and llvm::MachO::MH_MAGIC_64.

Referenced by createLinkGraphFromObject().

◆ createLinkGraphFromMachOObject_arm64()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromMachOObject_arm64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from a MachO/arm64 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 586 of file MachO_arm64.cpp.

References llvm::object::ObjectFile::createMachOObjectFile().

Referenced by createLinkGraphFromMachOObject().

◆ createLinkGraphFromMachOObject_x86_64()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromMachOObject_x86_64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from a MachO/x86-64 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 490 of file MachO_x86_64.cpp.

References llvm::object::ObjectFile::createMachOObjectFile().

Referenced by createLinkGraphFromMachOObject().

◆ createLinkGraphFromObject()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromObject ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from the given object buffer.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 501 of file JITLink.cpp.

References llvm::file_magic::coff_object, createLinkGraphFromCOFFObject(), createLinkGraphFromELFObject(), createLinkGraphFromMachOObject(), createLinkGraphFromObject(), createLinkGraphFromXCOFFObject(), llvm::file_magic::elf_relocatable, llvm::MemoryBufferRef::getBuffer(), llvm::identify_magic(), llvm::file_magic::macho_object, llvm::make_error(), and llvm::file_magic::xcoff_object_64.

Referenced by createLinkGraphFromObject(), and llvm::orc::ObjectLinkingLayer::emit().

◆ createLinkGraphFromXCOFFObject()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromXCOFFObject ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an XCOFF relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 25 of file XCOFF.cpp.

References createLinkGraphFromXCOFFObject_ppc64(), llvm::MemoryBufferRef::getBuffer(), llvm::identify_magic(), llvm::make_error(), and llvm::file_magic::xcoff_object_64.

Referenced by createLinkGraphFromObject().

◆ createLinkGraphFromXCOFFObject_ppc64()

Expected< std::unique_ptr< LinkGraph > > llvm::jitlink::createLinkGraphFromXCOFFObject_ppc64 ( MemoryBufferRef ObjectBuffer,
std::shared_ptr< orc::SymbolStringPool > SSP )

Create a LinkGraph from an XCOFF/ppc64 relocatable object.

Note: The graph does not take ownership of the underlying buffer, nor copy its contents. The caller is responsible for ensuring that the object buffer outlives the graph.

Definition at line 33 of file XCOFF_ppc64.cpp.

References assert(), llvm::jitlink::XCOFFLinkGraphBuilder::buildGraph(), llvm::cast(), llvm::object::ObjectFile::createObjectFile(), llvm::dbgs(), llvm::MemoryBufferRef::getBufferIdentifier(), llvm::jitlink::ppc64::getEdgeKindName(), and LLVM_DEBUG.

Referenced by createLinkGraphFromXCOFFObject().

◆ createLocalHeaderBlock()

template<typename MachOHeaderType>
Expected< Block & > llvm::jitlink::createLocalHeaderBlock ( LinkGraph & G,
Section & Sec )
static

◆ createLookupContinuation()

template<typename Continuation>
std::unique_ptr< JITLinkAsyncLookupContinuation > llvm::jitlink::createLookupContinuation ( Continuation Cont)

Create a lookup continuation from a function object.

Definition at line 1918 of file JITLink.h.

References C(), and llvm::CallingConv::C.

Referenced by llvm::jitlink::JITLinkerBase::linkPhase2().

◆ createRelaxationPass_ELF_loongarch()

LinkGraphPassFunction llvm::jitlink::createRelaxationPass_ELF_loongarch ( )

Returns a pass that performs linker relaxation.

Should be added to PostAllocationPasses.

Definition at line 499 of file ELF_loongarch.cpp.

References relax().

◆ createRelaxationPass_ELF_riscv()

LinkGraphPassFunction llvm::jitlink::createRelaxationPass_ELF_riscv ( )

Returns a pass that performs linker relaxation.

Should be added to PostAllocationPasses.

Definition at line 1034 of file ELF_riscv.cpp.

◆ createTripleWithCOFFFormat()

Triple llvm::jitlink::createTripleWithCOFFFormat ( Triple T)
static

◆ extractBits()

uint32_t llvm::jitlink::extractBits ( uint32_t Num,
unsigned Low,
unsigned Size )
static

Definition at line 136 of file ELF_riscv.cpp.

References llvm::Low, and Size.

Referenced by relaxCall().

◆ finalizeBlockRelax()

◆ finalizeRelax()

void llvm::jitlink::finalizeRelax ( LinkGraph & G,
RelaxAux & Aux )
static

Definition at line 799 of file ELF_riscv.cpp.

References B(), finalizeBlockRelax(), and G.

Referenced by relax().

◆ getAnonymousPointerCreator()

◆ getCOFFX86RelocationKindName()

const char * llvm::jitlink::getCOFFX86RelocationKindName ( Edge::Kind R)

Return the string name of the given COFF x86-64 edge kind.

Return the string name of the given COFF x86_64 edge kind.

Definition at line 255 of file COFF_x86_64.cpp.

References llvm::jitlink::x86_64::getEdgeKindName().

◆ getEHFrameSection()

Section * llvm::jitlink::getEHFrameSection ( LinkGraph & G)

Returns a pointer to the DWARF eh-frame section if the graph contains a non-empty one, otherwise returns null.

Definition at line 664 of file EHFrameSupport.cpp.

References llvm::Triple::ELF, G, and llvm::Triple::MachO.

Referenced by llvm::orc::EHFrameRegistrationPlugin::modifyPassConfig().

◆ getELFAArch32EdgeKindName()

const char * llvm::jitlink::getELFAArch32EdgeKindName ( Edge::Kind R)

Get a human-readable name for the given ELF AArch32 edge kind.

Definition at line 118 of file ELF_aarch32.cpp.

References llvm::jitlink::aarch32::getEdgeKindName().

Referenced by llvm::jitlink::ELFLinkGraphBuilder_aarch32< DataEndianness >::ELFLinkGraphBuilder_aarch32().

◆ getELFRelocationType()

◆ getGenericEdgeKindName()

◆ getJITLinkEdgeKind()

◆ getLinkageName()

const char * llvm::jitlink::getLinkageName ( Linkage L)

For errors and debugging output.

Definition at line 73 of file JITLink.cpp.

References llvm_unreachable, Strong, and Weak.

Referenced by operator<<().

◆ getMachineName()

◆ getMachODefaultRWDataSection()

Section & llvm::jitlink::getMachODefaultRWDataSection ( LinkGraph & G)
inline

Get a pointer to the standard MachO data section (creates an empty section with RW- permissions and standard lifetime if one does not already exist).

Definition at line 42 of file MachO.h.

References G, llvm::orc::MachODataDataSectionName, llvm::orc::Read, and llvm::orc::Write.

◆ getMachODefaultTextSection()

Section & llvm::jitlink::getMachODefaultTextSection ( LinkGraph & G)
inline

Get a pointer to the standard MachO text section (creates an empty section with R-X permissions and standard lifetime if one does not already exist).

Definition at line 52 of file MachO.h.

References llvm::orc::Exec, G, llvm::orc::MachOTextTextSectionName, and llvm::orc::Read.

◆ getOrCreateLocalMachOHeader()

◆ getPointerJumpStubCreator()

◆ getScopeName()

const char * llvm::jitlink::getScopeName ( Scope S)

For debugging output.

Definition at line 83 of file JITLink.cpp.

References Default, Hidden, llvm_unreachable, Local, and SideEffectsOnly.

Referenced by operator<<().

◆ getStorageClassString()

◆ getXCOFFSymbolContainingSymbolRef()

◆ identifyELFSectionStartAndEndSymbols()

SectionRangeSymbolDesc llvm::jitlink::identifyELFSectionStartAndEndSymbols ( LinkGraph & G,
Symbol & Sym )
inline

ELF section start/end symbol detection.

Definition at line 110 of file DefineExternalSectionStartAndEndSymbols.h.

References G, llvm::jitlink::Symbol::getName(), and llvm::StringRef::size().

Referenced by link_ELF_aarch64(), and link_ELF_x86_64().

◆ identifyMachOSectionStartAndEndSymbols()

SectionRangeSymbolDesc llvm::jitlink::identifyMachOSectionStartAndEndSymbols ( LinkGraph & G,
Symbol & Sym )
inline

MachO section start/end symbol detection.

Definition at line 129 of file DefineExternalSectionStartAndEndSymbols.h.

References G, llvm::jitlink::Symbol::getName(), and llvm::StringRef::size().

Referenced by link_MachO_arm64(), and link_MachO_x86_64().

◆ initRelaxAux()

◆ isAlignmentCorrect()

bool llvm::jitlink::isAlignmentCorrect ( uint64_t Value,
int N )
inlinestatic

Definition at line 140 of file ELF_riscv.cpp.

References N.

◆ isCStringBlock()

bool llvm::jitlink::isCStringBlock ( Block & B)

Definition at line 97 of file JITLink.cpp.

References B(), and I.

◆ isInRangeForImm()

bool llvm::jitlink::isInRangeForImm ( int64_t Value,
int N )
inlinestatic

Definition at line 145 of file ELF_riscv.cpp.

References N, and llvm::SignExtend64().

◆ isRelaxable()

bool llvm::jitlink::isRelaxable ( const Edge & E)
static

◆ link()

void llvm::jitlink::link ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

◆ link_COFF()

void llvm::jitlink::link_COFF ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

Link the given graph.

Uses conservative defaults for GOT and stub handling based on the target platform.

Definition at line 120 of file COFF.cpp.

References G, link_COFF_x86_64(), llvm::make_error(), and llvm::Triple::x86_64.

Referenced by link().

◆ link_COFF_x86_64()

void llvm::jitlink::link_COFF_x86_64 ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given object buffer, which must be a COFF x86-64 object file.

Definition at line 293 of file COFF_x86_64.cpp.

References G, markAllSymbolsLive(), llvm::jitlink::PassConfiguration::PreFixupPasses, and llvm::jitlink::PassConfiguration::PrePrunePasses.

Referenced by link_COFF().

◆ link_ELF()

◆ link_ELF_aarch32()

void llvm::jitlink::link_ELF_aarch32 ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given object buffer, which must be an ELF arm/thumb object file.

Definition at line 298 of file ELF_aarch32.cpp.

Referenced by link_ELF().

◆ link_ELF_aarch64()

◆ link_ELF_loongarch()

◆ link_ELF_ppc64() [1/2]

◆ link_ELF_ppc64() [2/2]

void llvm::jitlink::link_ELF_ppc64 ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given object buffer, which must be a ELF ppc64le object file.

jit-link the given object buffer, which must be a ELF ppc64 object file.

WARNING: The big-endian backend has not been tested yet.

Definition at line 537 of file ELF_ppc64.cpp.

References G, and link_ELF_ppc64().

Referenced by link_ELF(), link_ELF_ppc64(), and link_ELF_ppc64le().

◆ link_ELF_ppc64le()

void llvm::jitlink::link_ELF_ppc64le ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given object buffer, which must be a ELF ppc64le object file.

Definition at line 543 of file ELF_ppc64.cpp.

References G, and link_ELF_ppc64().

Referenced by link_ELF().

◆ link_ELF_riscv()

void llvm::jitlink::link_ELF_riscv ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

◆ link_ELF_x86()

void llvm::jitlink::link_ELF_x86 ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given object buffer, which must be a ELF x86 relocatable object file.

Definition at line 268 of file ELF_x86.cpp.

Referenced by link_ELF().

◆ link_ELF_x86_64()

◆ link_MachO()

void llvm::jitlink::link_MachO ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given ObjBuffer, which must be a MachO object file.

Uses conservative defaults for GOT and stub handling based on the target platform.

Definition at line 75 of file MachO.cpp.

References llvm::Triple::aarch64, G, link_MachO_arm64(), link_MachO_x86_64(), llvm::make_error(), and llvm::Triple::x86_64.

Referenced by link().

◆ link_MachO_arm64()

void llvm::jitlink::link_MachO_arm64 ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given object buffer, which must be a MachO arm64 object file.

If PrePrunePasses is empty then a default mark-live pass will be inserted that will mark all exported atoms live. If PrePrunePasses is not empty, the caller is responsible for including a pass to mark atoms as live.

If PostPrunePasses is empty then a default GOT-and-stubs insertion pass will be inserted. If PostPrunePasses is not empty then the caller is responsible for including a pass to insert GOT and stub edges.

Definition at line 652 of file MachO_arm64.cpp.

References applyPACSigningToModInitPointers(), buildTables_MachO_arm64(), createDefineExternalSectionStartAndEndSymbolsPass(), createEHFrameEdgeFixerPass_MachO_arm64(), createEHFrameSplitterPass_MachO_arm64(), llvm::jitlink::aarch64::createEmptyPointerSigningFunction(), G, identifyMachOSectionStartAndEndSymbols(), llvm::jitlink::JITLinker< MachOJITLinker_arm64 >::link(), llvm::jitlink::aarch64::lowerPointer64AuthEdgesToSigningFunction(), llvm::orc::MachOCompactUnwindSectionName, llvm::orc::MachOEHFrameSectionName, llvm::orc::MachOUnwindInfoSectionName, markAllSymbolsLive(), llvm::jitlink::PassConfiguration::PostAllocationPasses, llvm::jitlink::PassConfiguration::PostPrunePasses, llvm::jitlink::PassConfiguration::PreFixupPasses, and llvm::jitlink::PassConfiguration::PrePrunePasses.

Referenced by link_MachO().

◆ link_MachO_x86_64()

void llvm::jitlink::link_MachO_x86_64 ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given LinkGraph.

If PrePrunePasses is empty then a default mark-live pass will be inserted that will mark all exported atoms live. If PrePrunePasses is not empty, the caller is responsible for including a pass to mark atoms as live.

If PostPrunePasses is empty then a default GOT-and-stubs insertion pass will be inserted. If PostPrunePasses is not empty then the caller is responsible for including a pass to insert GOT and stub edges.

Definition at line 530 of file MachO_x86_64.cpp.

References createDefineExternalSectionStartAndEndSymbolsPass(), createEHFrameEdgeFixerPass_MachO_x86_64(), createEHFrameSplitterPass_MachO_x86_64(), G, identifyMachOSectionStartAndEndSymbols(), llvm::jitlink::JITLinker< MachOJITLinker_x86_64 >::link(), llvm::orc::MachOCompactUnwindSectionName, llvm::orc::MachOEHFrameSectionName, llvm::orc::MachOUnwindInfoSectionName, markAllSymbolsLive(), llvm::jitlink::x86_64::optimizeGOTAndStubAccesses(), llvm::jitlink::PassConfiguration::PostAllocationPasses, llvm::jitlink::PassConfiguration::PostPrunePasses, llvm::jitlink::PassConfiguration::PreFixupPasses, and llvm::jitlink::PassConfiguration::PrePrunePasses.

Referenced by link_MachO().

◆ link_XCOFF()

void llvm::jitlink::link_XCOFF ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

Link the given graph.

Definition at line 37 of file XCOFF.cpp.

References G, and link_XCOFF_ppc64().

Referenced by link().

◆ link_XCOFF_ppc64()

void llvm::jitlink::link_XCOFF_ppc64 ( std::unique_ptr< LinkGraph > G,
std::unique_ptr< JITLinkContext > Ctx )

jit-link the given object buffer, which must be a XCOFF ppc64 object file.

Definition at line 105 of file XCOFF_ppc64.cpp.

References G, and llvm::jitlink::JITLinker< XCOFFJITLinker_ppc64 >::link().

Referenced by link_XCOFF().

◆ makeAlignmentError()

Error llvm::jitlink::makeAlignmentError ( llvm::orc::ExecutorAddr Loc,
uint64_t Value,
int N,
const Edge & E )

◆ makeTargetOutOfRangeError()

◆ markAllSymbolsLive()

◆ operator<<() [1/3]

raw_ostream & llvm::jitlink::operator<< ( raw_ostream & OS,
const Block & B )

Definition at line 112 of file JITLink.cpp.

References B(), and llvm::formatv().

◆ operator<<() [2/3]

◆ operator<<() [3/3]

raw_ostream & llvm::jitlink::operator<< ( raw_ostream & OS,
const SymbolLookupFlags & LF )

Definition at line 384 of file JITLink.cpp.

References llvm_unreachable, RequiredSymbol, and WeaklyReferencedSymbol.

◆ printEdge()

void llvm::jitlink::printEdge ( raw_ostream & OS,
const Block & B,
const Edge & E,
StringRef EdgeKindName )

◆ printSymbolEntry()

◆ prune()

void llvm::jitlink::prune ( LinkGraph & G)

Removes dead symbols/blocks/addressables.

Finds the set of symbols and addressables reachable from any symbol initially marked live. All symbols/addressables not marked live at the end of this process are removed.

Definition at line 278 of file JITLinkGeneric.cpp.

References B(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::count(), llvm::dbgs(), E(), G, llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), and LLVM_DEBUG.

Referenced by llvm::jitlink::JITLinkerBase::linkPhase1().

◆ readCFIRecordLength()

Expected< size_t > llvm::jitlink::readCFIRecordLength ( const Block & B,
BinaryStreamReader & R )
static

Definition at line 86 of file EHFrameSupport.cpp.

References B(), llvm::formatv(), llvm::Length, and llvm::make_error().

◆ readTargetMachineArch()

◆ relax()

◆ relaxAlign()

void llvm::jitlink::relaxAlign ( orc::ExecutorAddr Loc,
const Edge & E,
uint32_t & Remove,
Edge::Kind & NewEdgeKind )
static

◆ relaxBlock()

◆ relaxCall()

void llvm::jitlink::relaxCall ( const Block & B,
BlockRelaxAux & Aux,
const RelaxConfig & Config,
orc::ExecutorAddr Loc,
const Edge & E,
uint32_t & Remove,
Edge::Kind & NewEdgeKind )
static

◆ relaxOnce()

bool llvm::jitlink::relaxOnce ( LinkGraph & G,
RelaxAux & Aux )
static

Definition at line 707 of file ELF_riscv.cpp.

References B(), Changed, G, and relaxBlock().

Referenced by relax().

◆ shouldRelax()

bool llvm::jitlink::shouldRelax ( const Section & S)
static

Definition at line 545 of file ELF_riscv.cpp.

References llvm::orc::Exec, llvm::jitlink::Section::getMemProt(), and llvm::orc::None.

Referenced by initRelaxAux().

◆ splitCompactUnwindBlocks()

Error llvm::jitlink::splitCompactUnwindBlocks ( LinkGraph & G,
Section & CompactUnwindSection,
size_t RecordSize )

Split blocks in an __LD,__compact_unwind section on record boundaries.

When this function returns edges within each record are guaranteed to be sorted by offset.

Definition at line 22 of file CompactUnwindSupport.cpp.

References B(), llvm::iterator_range< IteratorT >::begin(), llvm::jitlink::Section::blocks(), llvm::dbgs(), E(), llvm::iterator_range< IteratorT >::end(), llvm::formatv(), G, llvm::jitlink::Section::getName(), LLVM_DEBUG, llvm::make_error(), llvm::map_range(), llvm::seq(), and llvm::Error::success().

Referenced by llvm::jitlink::CompactUnwindManager< CURecTraits >::prepareForPrune().

◆ visitEdge() [1/2]

void llvm::jitlink::visitEdge ( LinkGraph & G,
Block * B,
Edge & E )
inline

Base case for edge-visitors where the visitor-list is empty.

Definition at line 2033 of file JITLink.h.

References B(), E(), and G.

Referenced by visitEdge(), and visitExistingEdges().

◆ visitEdge() [2/2]

template<typename VisitorT, typename... VisitorTs>
void llvm::jitlink::visitEdge ( LinkGraph & G,
Block * B,
Edge & E,
VisitorT && V,
VisitorTs &&... Vs )

Applies the first visitor in the list to the given edge.

If the visitor's visitEdge method returns true then we return immediately, otherwise we apply the next visitor.

Definition at line 2039 of file JITLink.h.

References B(), E(), G, and visitEdge().

◆ visitExistingEdges()

template<typename... VisitorTs>
void llvm::jitlink::visitExistingEdges ( LinkGraph & G,
VisitorTs &&... Vs )

For each edge in the given graph, apply a list of visitors to the edge, stopping when the first visitor's visitEdge method returns true.

Only visits edges that were in the graph at call time: if any visitor adds new edges those will not be visited. Visitors are not allowed to remove edges (though they can change their kind, target, and addend).

Definition at line 2052 of file JITLink.h.

References B(), E(), G, and visitEdge().

Referenced by buildTables_ELF_aarch32(), and buildTables_MachO_arm64().