我尝试编写一个LLVM传递,它将直接或间接地找到调用外部函数(即未在当前编译单元中定义的函数)的函数
例如,当在C代码上运行时:
void a(string s) {print(s)};
int b(int x) {return 1}
void c(void) {a("hello);b}
它应该标记a和c。
我需要一些方法来判断给定的调用inst是否对应于对外部函数的直接调用。我的第一种方法是从调用inst中提取函数对象,然后使用从GlobalValue类继承的isDeclaration()方法。这最终在每次函数调用时返回true,这显然是不可取的。
处理此问题的正确方法是什么?