Я пытаюсь прочитать и вызвать функцию, проанализированную из битового кода LLVM в LLVM 2.8.У меня все работает, кроме самого вызова, который приводит к сбою программы.
Сначала у меня есть этот код C:
void hello() {}
Я скомпилировал это с:
llvm-gcc -c -emit-llvm hello.c -o hello.bc
Вот урезанная версия кода, которая должна его читать:
using namespace std;
using namespace llvm;
void callFunction(string file, string function) {
InitializeNativeTarget();
LLVMContext context;
string error;
MemoryBuffer* buff = MemoryBuffer::getFile(file);
Module* m = getLazyBitcodeModule(buff, context, &error);
// Check the module parsed here.
// ...
ExecutionEngine* engine = ExecutionEngine::create(m);
// Check the engine started up correctly here.
// ...
Function* func = m->getFunction(function);
// Check the function was found here.
// ..
vector<GenericValue> args(0);
// This is what crashes.
engine->runFunction(func, args);
}
Я включил множество заголовков LLVM, включая ExecutionEngine / JIT.h, и проверки кода на каждом шаге дляубедитесь, что значения не равны NULL.Он анализирует битовый код, и я проверил найденную функцию, чтобы подтвердить, что она была ожидаемой.
Я также попытался создать модуль и функцию самостоятельно, которая работает, как и ожидалось, поэтому проблема определенно возникает из-затот факт, что функция создается битовым кодом.