From 2373d70fe72f1569e1bf17ec1b5cf9198cf0558d Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Thu, 24 May 2018 21:32:52 +0000 Subject: [PATCH] [ORC][C-API] Expose LLVMOrc{Unr,R}egisterJITEventListener(). Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D44890 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333229 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm-c/OrcBindings.h | 14 ++++++++++++++ include/llvm-c/Types.h | 5 +++++ include/llvm/ExecutionEngine/JITEventListener.h | 4 ++++ lib/ExecutionEngine/Orc/OrcCBindings.cpp | 11 +++++++++++ 4 files changed, 34 insertions(+) diff --git a/include/llvm-c/OrcBindings.h b/include/llvm-c/OrcBindings.h index ddba6430834..9497f0d4077 100644 --- a/include/llvm-c/OrcBindings.h +++ b/include/llvm-c/OrcBindings.h @@ -154,6 +154,20 @@ LLVMOrcErrorCode LLVMOrcGetSymbolAddressIn(LLVMOrcJITStackRef JITStack, */ LLVMOrcErrorCode LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack); +/** + * Register a JIT Event Listener. + * + * A NULL listener is ignored. + */ +void LLVMOrcRegisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L); + +/** + * Unegister a JIT Event Listener. + * + * A NULL listener is ignored. + */ +void LLVMOrcUnregisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L); + #ifdef __cplusplus } #endif /* extern "C" */ diff --git a/include/llvm-c/Types.h b/include/llvm-c/Types.h index f812c4145c6..4a33542e86c 100644 --- a/include/llvm-c/Types.h +++ b/include/llvm-c/Types.h @@ -145,6 +145,11 @@ typedef struct LLVMComdat *LLVMComdatRef; typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry; /** + * @see llvm::JITEventListener + */ +typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef; + +/** * @} */ diff --git a/include/llvm/ExecutionEngine/JITEventListener.h b/include/llvm/ExecutionEngine/JITEventListener.h index ff7840f00a4..bdebf966c9c 100644 --- a/include/llvm/ExecutionEngine/JITEventListener.h +++ b/include/llvm/ExecutionEngine/JITEventListener.h @@ -15,9 +15,11 @@ #ifndef LLVM_EXECUTIONENGINE_JITEVENTLISTENER_H #define LLVM_EXECUTIONENGINE_JITEVENTLISTENER_H +#include "llvm-c/ExecutionEngine.h" #include "llvm/Config/llvm-config.h" #include "llvm/ExecutionEngine/RuntimeDyld.h" #include "llvm/IR/DebugLoc.h" +#include "llvm/Support/CBindingWrapping.h" #include #include @@ -119,6 +121,8 @@ private: virtual void anchor(); }; +DEFINE_SIMPLE_CONVERSION_FUNCTIONS(JITEventListener, LLVMJITEventListenerRef) + } // end namespace llvm #endif // LLVM_EXECUTIONENGINE_JITEVENTLISTENER_H diff --git a/lib/ExecutionEngine/Orc/OrcCBindings.cpp b/lib/ExecutionEngine/Orc/OrcCBindings.cpp index 1cf8a3a745a..09ad3e6b11c 100644 --- a/lib/ExecutionEngine/Orc/OrcCBindings.cpp +++ b/lib/ExecutionEngine/Orc/OrcCBindings.cpp @@ -9,6 +9,7 @@ #include "OrcCBindingsStack.h" #include "llvm-c/OrcBindings.h" +#include "llvm/ExecutionEngine/JITEventListener.h" using namespace llvm; @@ -126,3 +127,13 @@ LLVMOrcErrorCode LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack) { delete J; return Err; } + +void LLVMOrcRegisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L) +{ + unwrap(JITStack)->RegisterJITEventListener(unwrap(L)); +} + +void LLVMOrcUnregisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L) +{ + unwrap(JITStack)->UnregisterJITEventListener(unwrap(L)); +} -- 2.11.0