From effa9c6dc7559b4625bba4420b4599b294604840 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Thu, 1 Oct 2020 11:24:34 -0700 Subject: [PATCH] [ORC] Add a C API function to set the ExecutionSession error reporter. --- include/llvm-c/Orc.h | 20 +++++++++++++++++++- lib/ExecutionEngine/Orc/OrcV2CBindings.cpp | 7 +++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/include/llvm-c/Orc.h b/include/llvm-c/Orc.h index 8c620fac967..50caae18e2d 100644 --- a/include/llvm-c/Orc.h +++ b/include/llvm-c/Orc.h @@ -46,9 +46,14 @@ typedef struct LLVMOrcOpaqueExecutionSession *LLVMOrcExecutionSessionRef; /** * A reference to an orc::SymbolStringPool table entry. */ -typedef struct LLVMOrcQuaqueSymbolStringPoolEntryPtr +typedef struct LLVMOrcOpaqueSymbolStringPoolEntry *LLVMOrcSymbolStringPoolEntryRef; +/** + * Error reporter function. + */ +typedef void (*LLVMOrcErrorReporterFunction)(void *Ctx, LLVMErrorRef Err); + /** * A reference to an orc::JITDylib instance. */ @@ -92,6 +97,19 @@ typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef; */ typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef; +/** + * Attach a custom error reporter function to the ExecutionSession. + * + * The error reporter will be called to deliver failure notices that can not be + * directly reported to a caller. For example, failure to resolve symbols in + * the JIT linker is typically reported via the error reporter (callers + * requesting definitions from the JIT will typically be delivered a + * FailureToMaterialize error instead). + */ +void LLVMOrcExecutionSessionSetErrorReporter( + LLVMOrcExecutionSessionRef ES, LLVMOrcErrorReporterFunction ReportError, + void *Ctx); + /** * Intern a string in the ExecutionSession's SymbolStringPool and return a * reference to it. This increments the ref-count of the pool entry, and the diff --git a/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp b/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp index b0aa1cf5ca6..1179f677389 100644 --- a/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp +++ b/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp @@ -58,6 +58,13 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLJIT, LLVMOrcLLJITRef) DEFINE_SIMPLE_CONVERSION_FUNCTIONS(TargetMachine, LLVMTargetMachineRef) +void LLVMOrcExecutionSessionSetErrorReporter( + LLVMOrcExecutionSessionRef ES, LLVMOrcErrorReporterFunction ReportError, + void *Ctx) { + unwrap(ES)->setErrorReporter( + [=](Error Err) { ReportError(Ctx, wrap(std::move(Err))); }); +} + LLVMOrcSymbolStringPoolEntryRef LLVMOrcExecutionSessionIntern(LLVMOrcExecutionSessionRef ES, const char *Name) { return wrap(