【问题标题】:How do I generate a combined .ll file from makefile or configure file?如何从 makefile 或配置文件生成组合的 .ll 文件?
【发布时间】:2017-08-11 10:30:56
【问题描述】:

我编写了一个模块传递来生成调用图。我想生成调用图,它包含所有函数,如用户代码中的函数以及库中的函数。

更具体地说,我正在使用 binutils 2.26 https://ftp.gnu.org/gnu/binutils/binutils-2.26.tar.gz

我想为“objdump”生成调用图。 objdump的代码会调用库'libiberty'中的一些函数,这些库中被调用的函数可以调用库中更多的内部函数。

我想要一个包含所有此类函数的调用图。

一种方法是我可以为库中的所有文件以及单独的 .ll 文件中的用户代码发出 llvm 代码。最后使用 llvm-link 将它们组合起来。 但是,如果这里和那里存在依赖关系,这可能会失败。那么我可以通过在 configure filema​​kefile 中进行一些更改来系统地做到这一点,而不会影响任何依赖关系。

非常感谢任何帮助。

【问题讨论】:

    标签: makefile clang llvm configure llvm-ir


    【解决方案1】:

    在这里可以使用的一个技巧是LLVM LTO

    尝试使用以下导出:

    export CFLAGS=-flto
    export CXXLAGS=-flto
    export CPPLAGS=-flto
    

    然后像往常一样运行您的构建。 您应该有正常的二进制文件作为输出,以及一堆 *.o 文件,它们不是目标文件,而是 LLVM 位码文件。

    请注意,这种方法取决于所使用的特定构建系统。

    【讨论】:

    • 它没有编译,给出未定义的引用错误。它还说插件需要处理 lto 对象。
    • 嗯,这很奇怪,应该“正常工作”。无论如何,这是我所知道的唯一“灵活”的方法。另外,请检查您的人工制品,编译后会发生链接,因此您可能拥有所有位码文件。
    猜你喜欢
    • 2012-08-18
    • 2022-01-13
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多