Вопрос

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top