Вызов функции биткода LLVM в LLVM 2.8
Вопрос
Я пытаюсь прочитать и вызвать функцию, проповедующую из биткода 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, в том числе excutionEngine/jit.h, и код проверяет на каждом шаге, чтобы убедиться, что значения не являются нулевыми. Он анализирует биткод, и я изучил функцию, которую она находит, чтобы подтвердить, что она была так, как и ожидалось.
Я также пытался создать модуль и функционировать сам, что работает как ожидалось, поэтому проблема определенно возникает из -за того, что функция создается биткодом.
Решение
Мне удалось получить это, как и ожидалось. Мне было любопытно, если проблема лежит в вышеуказанном процессе, но это, очевидно, не так. Система, которую я запускал, как часть, вызывала сбой, и приведенный выше код работает самостоятельно.