D dynamic compilation support

This commit is contained in:
Ivan 2016-12-03 21:14:42 +03:00
parent 1c2271d00d
commit 42f283c221
41 changed files with 2058 additions and 9 deletions

View file

@ -0,0 +1,44 @@
#include "utils.h"
#include <cstdio>
#include <cstdlib>
#include <cassert>
#include "llvm/IR/Module.h"
#include "llvm/IR/Verifier.h"
#include "context.h"
void fatal(const Context &context, const std::string &reason)
{
if (nullptr != context.fatalHandler) {
context.fatalHandler(context.fatalHandlerData,
reason.c_str());
}
else {
fprintf(stderr, "Runtime compiler fatal: %s\n", reason.c_str());
abort();
}
}
void interruptPoint(const Context &context, const char *desc, const char *object)
{
assert(nullptr != desc);
if (nullptr != context.interruptPointHandler) {
context.interruptPointHandler(context.interruptPointHandlerData,
desc,
object);
}
}
void verifyModule(const Context &context, llvm::Module &module)
{
std::string err;
llvm::raw_string_ostream errstream(err);
if (llvm::verifyModule(module, &errstream)) {
std::string desc = std::string("module verification failed:") +
errstream.str();
fatal(context, desc);
}
}