Вызов функции битового кода LLVM в LLVM 2.8 - PullRequest
1 голос
/ 21 января 2011

Я пытаюсь прочитать и вызвать функцию, проанализированную из битового кода 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.Он анализирует битовый код, и я проверил найденную функцию, чтобы подтвердить, что она была ожидаемой.

Я также попытался создать модуль и функцию самостоятельно, которая работает, как и ожидалось, поэтому проблема определенно возникает из-затот факт, что функция создается битовым кодом.

1 Ответ

0 голосов
/ 25 января 2011

Мне удалось запустить это, как ожидалось.Мне было любопытно, если проблема заключалась в вышеуказанном процессе, но это, очевидно, не так.Система, частью которой я работал, вызывала сбой, и приведенный выше код работает сам по себе.

...