LLVM:将指向结构的指针传递给JIT函数,该结构包含指向函数的指针

时间:2010-06-05 01:00:19

标签: jit llvm

我有一个LLVM(版本2.7)模块,其中包含一个指向结构的指针的函数。该结构包含一个指向C ++函数的函数指针。模块函数将进行JIT编译,我需要使用LLVM API在C ++中构建该结构。我似乎无法将指向函数的指针作为LLVM值,更不用说将指针传递给我无法构建的ConstantStruct。

我不确定我是否在赛道上,但这是我到目前为止所做的:

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 个答案:

答案 0 :(得分:1)

实际上,没关系。我不会使用LLVM API,只需传递一个与LLVM结构类型的布局匹配的C ++结构。忽略该代码的第一位并将args [0] .PointerVal设置为指向该结构的指针。