LLVM 20.0.0git
OrcEE.h
Go to the documentation of this file.
1/*===-- llvm-c/OrcEE.h - OrcV2 C bindings ExecutionEngine utils -*- C++ -*-===*\
2|* *|
3|* Part of the LLVM Project, under the Apache License v2.0 with LLVM *|
4|* Exceptions. *|
5|* See https://llvm.org/LICENSE.txt for license information. *|
6|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *|
7|* *|
8|*===----------------------------------------------------------------------===*|
9|* *|
10|* This header declares the C interface to ExecutionEngine based utils, e.g. *|
11|* RTDyldObjectLinkingLayer (based on RuntimeDyld) in Orc. *|
12|* *|
13|* Many exotic languages can interoperate with C code but have a harder time *|
14|* with C++ due to name mangling. So in addition to C, this interface enables *|
15|* tools written in such languages. *|
16|* *|
17|* Note: This interface is experimental. It is *NOT* stable, and may be *|
18|* changed without warning. Only C API usage documentation is *|
19|* provided. See the C++ documentation for all higher level ORC API *|
20|* details. *|
21|* *|
22\*===----------------------------------------------------------------------===*/
23
24#ifndef LLVM_C_ORCEE_H
25#define LLVM_C_ORCEE_H
26
27#include "llvm-c/Error.h"
29#include "llvm-c/Orc.h"
31#include "llvm-c/Types.h"
32
34
35typedef void *(*LLVMMemoryManagerCreateContextCallback)(void *CtxCtx);
36typedef void (*LLVMMemoryManagerNotifyTerminatingCallback)(void *CtxCtx);
37
38/**
39 * @defgroup LLVMCExecutionEngineORCEE ExecutionEngine-based ORC Utils
40 * @ingroup LLVMCExecutionEngine
41 *
42 * @{
43 */
44
45/**
46 * Create a RTDyldObjectLinkingLayer instance using the standard
47 * SectionMemoryManager for memory management.
48 */
52
53/**
54 * Create a RTDyldObjectLinkingLayer instance using MCJIT-memory-manager-like
55 * callbacks.
56 *
57 * This is intended to simplify transitions for existing MCJIT clients. The
58 * callbacks used are similar (but not identical) to the callbacks for
59 * LLVMCreateSimpleMCJITMemoryManager: Unlike MCJIT, RTDyldObjectLinkingLayer
60 * will create a new memory manager for each object linked by calling the given
61 * CreateContext callback. This allows for code removal by destroying each
62 * allocator individually. Every allocator will be destroyed (if it has not been
63 * already) at RTDyldObjectLinkingLayer destruction time, and the
64 * NotifyTerminating callback will be called to indicate that no further
65 * allocation contexts will be created.
66 *
67 * To implement MCJIT-like behavior clients can implement CreateContext,
68 * NotifyTerminating, and Destroy as:
69 *
70 * void *CreateContext(void *CtxCtx) { return CtxCtx; }
71 * void NotifyTerminating(void *CtxCtx) { MyOriginalDestroy(CtxCtx); }
72 * void Destroy(void *Ctx) { }
73 *
74 * This scheme simply reuses the CreateContextCtx pointer as the one-and-only
75 * allocation context.
76 */
79 LLVMOrcExecutionSessionRef ES, void *CreateContextCtx,
86
87/**
88 * Add the given listener to the given RTDyldObjectLinkingLayer.
89 *
90 * Note: Layer must be an RTDyldObjectLinkingLayer instance or
91 * behavior is undefined.
92 */
94 LLVMOrcObjectLayerRef RTDyldObjLinkingLayer,
96
97/**
98 * @}
99 */
100
102
103#endif /* LLVM_C_ORCEE_H */
#define LLVM_C_EXTERN_C_BEGIN
Definition: ExternC.h:35
#define LLVM_C_EXTERN_C_END
Definition: ExternC.h:36
LLVM_C_EXTERN_C_BEGIN typedef void *(* LLVMMemoryManagerCreateContextCallback)(void *CtxCtx)
Definition: OrcEE.h:35
void(* LLVMMemoryManagerNotifyTerminatingCallback)(void *CtxCtx)
Definition: OrcEE.h:36
LLVMOrcObjectLayerRef LLVMOrcCreateRTDyldObjectLinkingLayerWithMCJITMemoryManagerLikeCallbacks(LLVMOrcExecutionSessionRef ES, void *CreateContextCtx, LLVMMemoryManagerCreateContextCallback CreateContext, LLVMMemoryManagerNotifyTerminatingCallback NotifyTerminating, LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection, LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection, LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory, LLVMMemoryManagerDestroyCallback Destroy)
Create a RTDyldObjectLinkingLayer instance using MCJIT-memory-manager-like callbacks.
LLVMOrcObjectLayerRef LLVMOrcCreateRTDyldObjectLinkingLayerWithSectionMemoryManager(LLVMOrcExecutionSessionRef ES)
Create a RTDyldObjectLinkingLayer instance using the standard SectionMemoryManager for memory managem...
void LLVMOrcRTDyldObjectLinkingLayerRegisterJITEventListener(LLVMOrcObjectLayerRef RTDyldObjLinkingLayer, LLVMJITEventListenerRef Listener)
Add the given listener to the given RTDyldObjectLinkingLayer.
struct LLVMOrcOpaqueExecutionSession * LLVMOrcExecutionSessionRef
A reference to an orc::ExecutionSession instance.
Definition: Orc.h:88
struct LLVMOrcOpaqueObjectLayer * LLVMOrcObjectLayerRef
A reference to an orc::ObjectLayer instance.
Definition: Orc.h:409
void(* LLVMMemoryManagerDestroyCallback)(void *Opaque)
LLVMBool(* LLVMMemoryManagerFinalizeMemoryCallback)(void *Opaque, char **ErrMsg)
uint8_t *(* LLVMMemoryManagerAllocateDataSectionCallback)(void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID, const char *SectionName, LLVMBool IsReadOnly)
uint8_t *(* LLVMMemoryManagerAllocateCodeSectionCallback)(void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID, const char *SectionName)
struct LLVMOpaqueJITEventListener * LLVMJITEventListenerRef
Definition: Types.h:165