LLVM中的FunctionPass用于C ++输入

Roh*_*lla 3 compiler-construction llvm llvm-clang

我试图通过LLVM解析代码,在我的C / C ++代码中打印所有函数的名称。我参考了此处给出的示例http://llvm.org/docs/WritingAnLLVMPass.html#basic-code-required 该示例适用于C代码输入,但对于C ++输入,它在一个简单的Hello World程序中显示以下函数名称

__cxx_global_var_init

主要

全球 _I_a

然后,我发现LLVM的iostream存在某些问题,如下所述:http : //llvm.org/docs/FAQ.html#what-is-this-llvm-global-ctors-and-global-ia-stuff-that当我包含iostream时发生

我从代码中删除了iostream,然后仅获得“ main”作为输出。

但是对于可以说包含以下功能的多功能C ++程序:convertperm,findType和main(没有iostream),我得到以下输出

_Z11convertpermSs

_Z8findtypeSs

主要

多功能C程序正常运行

谁能提供解决此问题的方法?

Oak*_*Oak 6

欢迎来到C ++名称修改的美好世界:)

您的前端(我假设是Clang)已重命名了这些功能,此过程称为mangling。如果您想找回原始的函数名称,则需要对损坏的名称进行解密。您可以阅读链接的文章,以了解更多有关为什么以及如何进行拆装的信息。

据我所知,LLVM中没有内置的C ++分解器,但是您可以使用外部的,例如libstdc ++的abi::__cxa_demangle