在LLVM 2.8中调用LLVM bitcode函数

时间:2011-01-21 03:45:50

标签: c++ llvm llvm-gcc

我正在尝试读取并调用从LLVM 2.8中的LLVM bitcode解析的函数。我把所有东西都与实际的呼叫分开了,这会使程序崩溃。

首先我有这个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。它解析了bitcode,我检查了它发现的功能,以确认它是否符合预期。

我也尝试过构建一个模块并自行运行,它按预期工作,所以问题肯定是因为函数是由bitcode产生的。

1 个答案:

答案 0 :(得分:0)

我已设法按预期运行。如果问题出在上述过程中,我很好奇,但事实显然并非如此。我作为其中一部分运行的系统导致了崩溃,上面的代码确实可以自行运行。