2010-06-05 179 views
1

我有一個帶有函數的LLVM(版本爲2.7)模塊,該指針指向一個結構體。該結構包含一個指向C++函數的函數指針。模塊函數將被JIT編譯,我需要使用LLVM API在C++中構建該結構。我似乎無法將指向該函數的指針視爲LLVM值,更不用說傳遞指向我無法構建的ConstantStruct的指針了。LLVM:將指向包含指向函數的指針的結構的指針傳遞給JIT函數

我不知道如果我甚至在軌道上,但是這是我到目前爲止有:

void print(char*); 

vector<Constant*> functions; 
functions.push_back(ConstantExpr::getIntToPtr(
    ConstantInt::get(Type::getInt32Ty(context), (int)print), 
    /* function pointer type here, FunctionType::get(...) doesn't seem to work */ 
)); 
ConstantStruct* struct = cast<ConstantStruct>(ConstantStruct::get(
    cast<StructType>(m->getTypeByName("printer")), 
    functions 
)); 

Function* main = m->getFunction("main"); 
vector<GenericValue> args; 
args[0].PointerVal = /* not sure what goes here */ 
ee->runFunction(main, args); 

回答

1

其實,請不要介意。我不會使用LLVM API,只是傳遞一個與LLVM結構類型的佈局相匹配的C++結構。忽略該代碼的第一位並將args [0] .PointerVal設置爲指向該結構的指針。

相關問題