У меня есть модуль LLVM (версия 2.7) с функцией, которая принимает указатель на структуру. Эта структура содержит указатель на функцию C ++. Функция модуля будет скомпилирована JIT, и мне нужно построить эту структуру в C ++ с использованием LLVM API. Кажется, я не могу получить указатель на функцию как значение 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);