LLVM: передача указателя на структуру, которая содержит указатель на функцию, в функцию JIT - PullRequest
2 голосов
/ 05 июня 2010

У меня есть модуль 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);

1 Ответ

1 голос
/ 05 июня 2010

На самом деле, неважно.Я бы не использовал API LLVM, просто передал бы ему структуру C ++, которая соответствует макету типа структуры LLVM.Проигнорируйте первый бит этого кода и установите args [0] .PointerVal в указатель на эту структуру.

...