如何检查LLVM Instrumentation pass的ModulePass中的系统头文件中是否定义了功能?

时间:2018-10-09 23:36:05

标签: c++ clang llvm instrumentation

我正在实现一个自定义的LLVM modulePass(转换/仪器),该函数对功能执行一些操作。我正在使用Module :: iterator来遍历Module中的函数。我如何检查这些功能中的任何一个是否来自系统头文件。任何想法如何做到这一点。

1 个答案:

答案 0 :(得分:0)

Clang具有所有声明的SourceLocations,但是该信息不会转换为运行ModulePass的LLVM IR-如果启用了调试信息或覆盖,则debug information除外。调试信息是尽力而为的,但是如果自从clang发出IR以来您没有运行任何其他转换,则通常可以使用。

这是一个故意的设计决策,LLVM通常不应以不同的方式对待系统和非系统功能。 lib/Transforms/Utils/SimplifyLibCalls.cpp内部存在一个异常,该异常根据众所周知的库函数的名称进行优化。确保安全的原因是LLVM的用户将知道这些功能是否符合语言标准所定义的功能,并选择是否应用此优化。