如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?

How to check if function is defined in system header files within ModulePass in LLVM Instrumentation pass?

本文关键字:系统 ModulePass pass 文件 定义 Instrumentation LLVM 何检查 检查 是否 函数      更新时间:2023-10-16

我正在实现一个自定义的LLVM modulePass in(转换/检测(,它对函数执行一些操作。我正在使用模块::迭代器来遍历模块中的函数。如何检查这些函数中的任何一个是否来自系统头文件。任何想法如何做到这一点。

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

这是一个有意的设计决策,LLVM 通常不应该以不同的方式处理系统和非系统功能。lib/Transforms/Utils/SimplifyLibCalls 中有一个本地化的异常.cpp它根据已知库函数的名称进行优化。使这安全的是,LLVM的用户将知道这些功能是否是语言标准定义的函数,并选择是否应用此优化。