给出这样的程序:
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);
答案 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";
}