mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-11 13:26:08 +03:00
bindInstaces
This commit is contained in:
parent
e453edcc6a
commit
bdc5f65070
3 changed files with 35 additions and 1 deletions
|
@ -299,12 +299,16 @@ EXTERNAL void JIT_API_ENTRYPOINT(const void *modlist_head,
|
|||
}
|
||||
|
||||
EXTERNAL void JIT_REG_BIND_PAYLOAD(void *handle, void *originalFunc,
|
||||
const Slice *desc, size_t descSize) {
|
||||
const Slice *params, size_t paramsSize) {
|
||||
assert(handle != nullptr);
|
||||
assert(originalFunc != nullptr);
|
||||
JITContext &myJit = getJit();
|
||||
myJit.registerBind(handle, originalFunc, toArray(params, paramsSize));
|
||||
}
|
||||
|
||||
EXTERNAL void JIT_UNREG_BIND_PAYLOAD(void *handle) {
|
||||
assert(handle != nullptr);
|
||||
JITContext &myJit = getJit();
|
||||
myJit.unregisterBind(handle);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -154,6 +154,18 @@ void JITContext::reset() {
|
|||
}
|
||||
}
|
||||
|
||||
void JITContext::registerBind(void *handle, void *originalFunc,
|
||||
const llvm::ArrayRef<Slice> ¶ms) {
|
||||
assert(bindInstances.count(handle) == 0);
|
||||
BindDesc::ParamsVec vec(params.begin(), params.end());
|
||||
bindInstances.insert({handle, {originalFunc, std::move(vec)}});
|
||||
}
|
||||
|
||||
void JITContext::unregisterBind(void *handle) {
|
||||
assert(bindInstances.count(handle) == 1);
|
||||
bindInstances.erase(handle);
|
||||
}
|
||||
|
||||
void JITContext::removeModule(const ModuleHandleT &handle) {
|
||||
cantFail(compileLayer.removeModule(handle));
|
||||
#if LDC_LLVM_VER >= 700
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "llvm/ADT/MapVector.h"
|
||||
#include "llvm/ExecutionEngine/JITSymbol.h"
|
||||
#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
|
||||
#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
|
||||
|
@ -32,6 +33,7 @@
|
|||
#include "llvm/ExecutionEngine/Orc/Legacy.h"
|
||||
#endif
|
||||
|
||||
#include "context.h"
|
||||
#include "disassembler.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -87,6 +89,13 @@ private:
|
|||
ModuleHandleT moduleHandle;
|
||||
SymMap symMap;
|
||||
|
||||
struct BindDesc final {
|
||||
void *originalFunc;
|
||||
using ParamsVec = llvm::SmallVector<Slice, 5>;
|
||||
ParamsVec params;
|
||||
};
|
||||
llvm::MapVector<void*, BindDesc> bindInstances;
|
||||
|
||||
struct ListenerCleaner final {
|
||||
JITContext &owner;
|
||||
ListenerCleaner(JITContext &o, llvm::raw_ostream *stream);
|
||||
|
@ -113,6 +122,15 @@ public:
|
|||
|
||||
void reset();
|
||||
|
||||
void registerBind(void *handle, void *originalFunc,
|
||||
const llvm::ArrayRef<Slice>& params);
|
||||
|
||||
void unregisterBind(void *handle);
|
||||
|
||||
const llvm::MapVector<void*, BindDesc> &getBindInstances() const {
|
||||
return bindInstances;
|
||||
}
|
||||
|
||||
private:
|
||||
void removeModule(const ModuleHandleT &handle);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue