如何在LLVM中间接调用时从CallInst获取FunctionType

时间:2013-02-11 12:11:36

标签: c++ llvm

如果函数调用是直接函数,则可以通过以下代码获取函数类型。

Function  * fun  = callInst->getCalledFunction();
Function  * funType = fun->getFunctionType();

但是,如果调用是间接的,即通过函数指针调用getCalledFunction 返回NULL。所以我的问题是当通过函数指针调用函数时如何获取Function类型。

1 个答案:

答案 0 :(得分:9)

要从间接通话中获取类型,请使用getCalledValue代替getCalledFunction,如下所示:

Type* t = callInst->getCalledValue()->getType();

那会得到传递给调用指令的指针类型;要获得实际的函数类型,请继续:

FunctionType* ft = cast<FunctionType>(cast<PointerType>(t)->getElementType());