LLVM 22.0.0git
JITLinkReentryTrampolines.h
Go to the documentation of this file.
1//===- JITLinkReentryTrampolines.h -- JITLink-based trampolines -*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Emit reentry trampolines via JITLink.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_EXECUTIONENGINE_ORC_JITLINKREENTRYTRAMPOLINES_H
14#define LLVM_EXECUTIONENGINE_ORC_JITLINKREENTRYTRAMPOLINES_H
15
21#include "llvm/Support/Error.h"
22
23namespace llvm::jitlink {
24class Block;
25class LinkGraph;
26class Section;
27class Symbol;
28} // namespace llvm::jitlink
29
30namespace llvm::orc {
31
34
35/// Produces trampolines on request using JITLink.
37public:
40 jitlink::Symbol &ReentrySym)>;
42 Expected<std::vector<ExecutorSymbolDef>> EntryAddrs)>;
43
44 /// Create trampolines using the default reentry trampoline function for
45 /// the session triple.
47 Create(ObjectLinkingLayer &ObjLinkingLayer);
48
50 EmitTrampolineFn EmitTrampoline);
53
54 LLVM_ABI void emit(ResourceTrackerSP RT, size_t NumTrampolines,
55 OnTrampolinesReadyFn OnTrampolinesReady);
56
57private:
59
60 ObjectLinkingLayer &ObjLinkingLayer;
61 TrampolineAddrScraperPlugin *TrampolineAddrScraper = nullptr;
62 EmitTrampolineFn EmitTrampoline;
63 std::atomic<size_t> ReentryGraphIdx{0};
64};
65
67createJITLinkLazyReexportsManager(ObjectLinkingLayer &ObjLinkingLayer,
68 RedirectableSymbolManager &RSMgr,
69 JITDylib &PlatformJD,
70 LazyReexportsManager::Listener *L = nullptr);
71
72} // namespace llvm::orc
73
74#endif // LLVM_EXECUTIONENGINE_ORC_JITLINKREENTRYTRAMPOLINES_H
#define LLVM_ABI
Definition Compiler.h:213
This file provides a collection of function (or more generally, callable) type erasure utilities supp...
#define G(x, y, z)
Definition MD5.cpp:56
Tagged union holding either a T or a Error.
Definition Error.h:485
unique_function< void( Expected< std::vector< ExecutorSymbolDef > > EntryAddrs)> OnTrampolinesReadyFn
LLVM_ABI JITLinkReentryTrampolines(ObjectLinkingLayer &ObjLinkingLayer, EmitTrampolineFn EmitTrampoline)
LLVM_ABI void emit(ResourceTrackerSP RT, size_t NumTrampolines, OnTrampolinesReadyFn OnTrampolinesReady)
static LLVM_ABI Expected< std::unique_ptr< JITLinkReentryTrampolines > > Create(ObjectLinkingLayer &ObjLinkingLayer)
Create trampolines using the default reentry trampoline function for the session triple.
JITLinkReentryTrampolines(JITLinkReentryTrampolines &&)=delete
JITLinkReentryTrampolines & operator=(JITLinkReentryTrampolines &&)=delete
unique_function< jitlink::Symbol &( jitlink::LinkGraph &G, jitlink::Section &Sec, jitlink::Symbol &ReentrySym)> EmitTrampolineFn
An ObjectLayer implementation built on JITLink.
Base class for managing redirectable symbols in which a call gets redirected to another symbol in run...
unique_function is a type-erasing functor similar to std::function.
IntrusiveRefCntPtr< ResourceTracker > ResourceTrackerSP
Definition Core.h:52
LLVM_ABI Expected< std::unique_ptr< LazyReexportsManager > > createJITLinkLazyReexportsManager(ObjectLinkingLayer &ObjLinkingLayer, RedirectableSymbolManager &RSMgr, JITDylib &PlatformJD, LazyReexportsManager::Listener *L=nullptr)