在LLVM中打印动态函数名称

时间:2016-11-04 23:28:38

标签: llvm

给出这样的程序:

int gcd(para) {...}
int main() {
   ...
   int a = gcd(para1);
   int b = gcd(para2); 
   return 1; 
} 

我想检测代码并打印将按顺序执行的函数名称:即main(),gcd(),gcd()。

问题是我不知道如何将函数名作为参数传递给辅助函数。

我写了以下内容: 对于辅助函数:    我使用:void printDynamicFuncName(char* FName) {}

传球:    我用:

Type* Int8 = Type::getInt8PtrTy(context);
Function *CalleeF = cast<Function>(F.getParent()->getOrInsertFunction("_Z20printDynamicFuncNamePc", Void, Int8, NULL));
Constant* arg = ConstantDataArray::getString(context, F.getName());
Builder.CreateCall(CalleeF, arg);

1 个答案:

答案 0 :(得分:0)

我自己拿到了!

我可以使用:

Type* Int8 = Type::getInt8PtrTy(context);
static IRBuilder<> Builder(context);
Instruction *I = &*inst_begin(F);
Function *CalleeF = cast<Function>(F.getParent() ->getOrInsertFunction("_Z20printDynamicFuncNamePc", Void, Int8, NULL));
 Builder.SetInsertPoint(I);
 Builder.CreateCall(CalleeF, Builder.CreateGlobalStringPtr(F.getName()), "");

在辅助函数中:

 void printDynamicFuncName(char* FName) {
        errs() << "Function Name is " << FName << "\n";
    }