2010-06-05 3 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을 해당 구조체에 대한 포인터로 설정하십시오.

관련 문제