LLVM 2.8のLLVMビットコードから解析された関数を読み込んで呼び出しようとしています。私はプログラムをクラッシュさせる実際の呼び出しとは別にすべての作業をしています。LLVMでLLVMビットコード関数を呼び出す2.8
まず私は、このCコードを持っている:
void hello() {}
を私はこれをコンパイルした:
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-gcc -c -emit-llvm hello.c -o hello.bc
ここでそれを読むことになっていたコードの下にトリミングされたバージョンです
私は、ExecutionEngine/JIT.hを含むたくさんのLLVMヘッダーを含んでおり、各ステップでコードチェックが確実に行われています値はNULLではありません。それは、ビットコードを解析し、私はそれが期待どおりであることを確認する機能を調べた。
また、私はモジュールを構築して自分自身を機能させてみました。期待どおりに機能しています。そのため、問題は明らかにその機能がビットコードによって生成されるという事実から生じます。
表示されている正確なクラッシュ(バックトレースなど)について詳しく知るには役立つかもしれません。 –