LLVM でプログラミングを開始し、ビットコードを実行しようとしています。古い例から改作したこのコードにたどり着きました (私の疑問は、 の作成にありMemoryBuffer
、getFile(string)
もう存在しません)。
string *errorString = new string;
LLVMContext context;
OwningPtr<MemoryBuffer> *mb = new OwningPtr<MemoryBuffer>;
MemoryBuffer::getFileOrSTDIN(argv[1], *mb);
Module *m = ParseBitcodeFile(mb->take(), context, errorString);
ExecutionEngine *ee = EngineBuilder(m).create();
Function *main = m->getFunction("main");
この行から何も機能しません (セグメンテーション違反)
1 - 「標準」アプローチ?
void * f = ee->getPointerToFunction(main);
void (*FP)() = (void (*)()) f;
2 - lli のアプローチ、envp の「0」が不明
vector<string> *argList = new vector<string>;
ee->runFunctionAsMain(main, *argList, 0);
3 - 2 の一般化。
vector<struct GenericValue> *argList = new vector<struct GenericValue>;
ee->runFunction(main, *argList);