003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
lib
/
ExecutionEngine
/
Orc
/
📁
..
📄
CompileOnDemandLayer.cpp
(12.91 KB)
📄
CompileUtils.cpp
(2.8 KB)
📄
Core.cpp
(71.56 KB)
📄
DebugUtils.cpp
(10.4 KB)
📄
ExecutionUtils.cpp
(13.7 KB)
📄
IRCompileLayer.cpp
(1.55 KB)
📄
IRTransformLayer.cpp
(1.17 KB)
📄
IndirectionUtils.cpp
(12.36 KB)
📄
JITTargetMachineBuilder.cpp
(3.71 KB)
📄
LLJIT.cpp
(41.6 KB)
📄
Layer.cpp
(7.61 KB)
📄
LazyReexports.cpp
(7.9 KB)
📄
Legacy.cpp
(2.08 KB)
📄
MachOPlatform.cpp
(17.2 KB)
📄
Mangling.cpp
(5.03 KB)
📄
NullResolver.cpp
(1.12 KB)
📄
ObjectLinkingLayer.cpp
(20.23 KB)
📄
ObjectTransformLayer.cpp
(1.33 KB)
📄
OrcABISupport.cpp
(41.44 KB)
📄
OrcCBindings.cpp
(5.73 KB)
📄
OrcCBindingsStack.h
(18.01 KB)
📄
OrcMCJITReplacement.cpp
(4.68 KB)
📄
OrcMCJITReplacement.h
(17.73 KB)
📄
OrcV2CBindings.cpp
(7.81 KB)
📄
RTDyldObjectLinkingLayer.cpp
(11 KB)
📄
SpeculateAnalyses.cpp
(9.8 KB)
📄
Speculation.cpp
(5.82 KB)
📄
ThreadSafeModule.cpp
(2.04 KB)
Editing: OrcCBindings.cpp
//===----------- OrcCBindings.cpp - C bindings for the Orc APIs -----------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "OrcCBindingsStack.h" #include "llvm-c/OrcBindings.h" #include "llvm/ExecutionEngine/JITEventListener.h" using namespace llvm; LLVMOrcJITStackRef LLVMOrcCreateInstance(LLVMTargetMachineRef TM) { TargetMachine *TM2(unwrap(TM)); Triple T(TM2->getTargetTriple()); auto IndirectStubsMgrBuilder = orc::createLocalIndirectStubsManagerBuilder(T); OrcCBindingsStack *JITStack = new OrcCBindingsStack(*TM2, std::move(IndirectStubsMgrBuilder)); return wrap(JITStack); } const char *LLVMOrcGetErrorMsg(LLVMOrcJITStackRef JITStack) { OrcCBindingsStack &J = *unwrap(JITStack); return J.getErrorMessage().c_str(); } void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef JITStack, char **MangledName, const char *SymbolName) { OrcCBindingsStack &J = *unwrap(JITStack); std::string Mangled = J.mangle(SymbolName); *MangledName = new char[Mangled.size() + 1]; strcpy(*MangledName, Mangled.c_str()); } void LLVMOrcDisposeMangledSymbol(char *MangledName) { delete[] MangledName; } LLVMErrorRef LLVMOrcCreateLazyCompileCallback( LLVMOrcJITStackRef JITStack, LLVMOrcTargetAddress *RetAddr, LLVMOrcLazyCompileCallbackFn Callback, void *CallbackCtx) { OrcCBindingsStack &J = *unwrap(JITStack); if (auto Addr = J.createLazyCompileCallback(Callback, CallbackCtx)) { *RetAddr = *Addr; return LLVMErrorSuccess; } else return wrap(Addr.takeError()); } LLVMErrorRef LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef JITStack, const char *StubName, LLVMOrcTargetAddress InitAddr) { OrcCBindingsStack &J = *unwrap(JITStack); return wrap(J.createIndirectStub(StubName, InitAddr)); } LLVMErrorRef LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef JITStack, const char *StubName, LLVMOrcTargetAddress NewAddr) { OrcCBindingsStack &J = *unwrap(JITStack); return wrap(J.setIndirectStubPointer(StubName, NewAddr)); } LLVMErrorRef LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle *RetHandle, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void *SymbolResolverCtx) { OrcCBindingsStack &J = *unwrap(JITStack); std::unique_ptr<Module> M(unwrap(Mod)); if (auto Handle = J.addIRModuleEager(std::move(M), SymbolResolver, SymbolResolverCtx)) { *RetHandle = *Handle; return LLVMErrorSuccess; } else return wrap(Handle.takeError()); } LLVMErrorRef LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle *RetHandle, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void *SymbolResolverCtx) { OrcCBindingsStack &J = *unwrap(JITStack); std::unique_ptr<Module> M(unwrap(Mod)); if (auto Handle = J.addIRModuleLazy(std::move(M), SymbolResolver, SymbolResolverCtx)) { *RetHandle = *Handle; return LLVMErrorSuccess; } else return wrap(Handle.takeError()); } LLVMErrorRef LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle *RetHandle, LLVMMemoryBufferRef Obj, LLVMOrcSymbolResolverFn SymbolResolver, void *SymbolResolverCtx) { OrcCBindingsStack &J = *unwrap(JITStack); std::unique_ptr<MemoryBuffer> O(unwrap(Obj)); if (auto Handle = J.addObject(std::move(O), SymbolResolver, SymbolResolverCtx)) { *RetHandle = *Handle; return LLVMErrorSuccess; } else return wrap(Handle.takeError()); } LLVMErrorRef LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle H) { OrcCBindingsStack &J = *unwrap(JITStack); return wrap(J.removeModule(H)); } LLVMErrorRef LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, LLVMOrcTargetAddress *RetAddr, const char *SymbolName) { OrcCBindingsStack &J = *unwrap(JITStack); if (auto Addr = J.findSymbolAddress(SymbolName, true)) { *RetAddr = *Addr; return LLVMErrorSuccess; } else return wrap(Addr.takeError()); } LLVMErrorRef LLVMOrcGetSymbolAddressIn(LLVMOrcJITStackRef JITStack, LLVMOrcTargetAddress *RetAddr, LLVMOrcModuleHandle H, const char *SymbolName) { OrcCBindingsStack &J = *unwrap(JITStack); if (auto Addr = J.findSymbolAddressIn(H, SymbolName, true)) { *RetAddr = *Addr; return LLVMErrorSuccess; } else return wrap(Addr.takeError()); } LLVMErrorRef LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack) { auto *J = unwrap(JITStack); auto Err = J->shutdown(); delete J; return wrap(std::move(Err)); } void LLVMOrcRegisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L) { unwrap(JITStack)->RegisterJITEventListener(unwrap(L)); } void LLVMOrcUnregisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L) { unwrap(JITStack)->UnregisterJITEventListener(unwrap(L)); }
Upload File
Create Folder