1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[ORC] Add operations to create and lookup JITDylibs to OrcV2 C bindings.

This commit is contained in:
Lang Hames 2020-09-16 13:46:55 -07:00
parent dcfdc54cf8
commit a2132fa761
2 changed files with 59 additions and 0 deletions

View File

@ -112,6 +112,42 @@ LLVMOrcExecutionSessionIntern(LLVMOrcExecutionSessionRef ES, const char *Name);
*/
void LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S);
/**
* Create a "bare" JITDylib.
*
* The client is responsible for ensuring that the JITDylib's name is unique,
* e.g. by calling LLVMOrcExecutionSessionGetJTIDylibByName first.
*
* This call does not install any library code or symbols into the newly
* created JITDylib. The client is responsible for all configuration.
*/
LLVMOrcJITDylibRef
LLVMOrcExecutionSessionCreateBareJITDylib(LLVMOrcExecutionSessionRef ES,
const char *Name);
/**
* Create a JITDylib.
*
* The client is responsible for ensuring that the JITDylib's name is unique,
* e.g. by calling LLVMOrcExecutionSessionGetJTIDylibByName first.
*
* If a Platform is attached to the ExecutionSession then
* Platform::setupJITDylib will be called to install standard platform symbols
* (e.g. standard library interposes). If no Platform is installed then this
* call is equivalent to LLVMExecutionSessionRefCreateBareJITDylib and will
* always return success.
*/
LLVMErrorRef
LLVMOrcExecutionSessionCreateJITDylib(LLVMOrcExecutionSessionRef ES,
LLVMOrcJITDylibRef *Result,
const char *Name);
/**
* Returns the JITDylib with the given name, or NULL if no such JITDylib
* exists.
*/
LLVMOrcJITDylibRef LLVMOrcExecutionSessionGetJITDylibByName(const char *Name);
/**
* Dispose of a JITDylib::DefinitionGenerator. This should only be called if
* ownership has not been passed to a JITDylib (e.g. because some error

View File

@ -68,6 +68,29 @@ void LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S) {
OrcV2CAPIHelper::releasePoolEntry(unwrap(S));
}
LLVMOrcJITDylibRef
LLVMOrcExecutionSessionCreateBareJITDylib(LLVMOrcExecutionSessionRef ES,
const char *Name) {
return wrap(&unwrap(ES)->createBareJITDylib(Name));
}
LLVMErrorRef
LLVMOrcExecutionSessionCreateJITDylib(LLVMOrcExecutionSessionRef ES,
LLVMOrcJITDylibRef *Result,
const char *Name) {
auto JD = unwrap(ES)->createJITDylib(Name);
if (!JD)
return wrap(JD.takeError());
*Result = wrap(&*JD);
return LLVMErrorSuccess;
}
LLVMOrcJITDylibRef
LLVMOrcExecutionSessionGetJITDylibByName(LLVMOrcExecutionSessionRef ES,
const char *Name) {
return wrap(unwrap(ES)->getJITDylibByName(Name));
}
void LLVMOrcDisposeJITDylibDefinitionGenerator(
LLVMOrcJITDylibDefinitionGeneratorRef DG) {
delete unwrap(DG);