Jit: better error handling and handle correctly __chkstk function (#3051)

This commit is contained in:
Ivan Butygin 2019-04-06 10:34:02 +03:00 committed by GitHub
parent e60df4710c
commit eaa65fca18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 14 deletions

View file

@ -110,8 +110,8 @@ JITContext::JITContext()
JITContext::~JITContext() {}
bool JITContext::addModule(std::unique_ptr<llvm::Module> module,
llvm::raw_ostream *asmListener) {
llvm::Error JITContext::addModule(std::unique_ptr<llvm::Module> module,
llvm::raw_ostream *asmListener) {
assert(nullptr != module);
reset();
@ -122,18 +122,23 @@ bool JITContext::addModule(std::unique_ptr<llvm::Module> module,
auto result = compileLayer.addModule(handle, std::move(module));
if (result) {
execSession.releaseVModule(handle);
return true;
return result;
}
if (auto err = compileLayer.emitAndFinalize(handle)) {
execSession.releaseVModule(handle);
return err;
}
moduleHandle = handle;
#else
auto result = compileLayer.addModule(std::move(module), createResolver());
if (!result) {
return true;
return llvm::make_error<llvm::StringError>("addModule failed",
llvm::inconvertibleErrorCode());
}
moduleHandle = result.get();
#endif
compiled = true;
return false;
return llvm::Error::success();
}
llvm::JITSymbol JITContext::findSymbol(const std::string &name) {