从gcc的中间文件编译目标文件

从gcc的中间文件编译目标文件,第1张

概述通过使用-fdump-tree- *标志,可以在编译源代码文件期间转储一些中间格式文件.我的问题是,如果可以使用该中间文件作为gcc的输入来获取最终的目标文件.我问这个是因为我想在gimple的中间文件中添加一些代码(通过使用flag -fdump-tree-gimple获得)格式.当然我可以使用钩子并添加我自己的传球,但我不想达到那种复杂程度.我只想给gc

通过使用-fdump-tree- *标志,可以在编译源代码文件期间转储一些中间格式文件.我的问题是,如果可以使用该中间文件作为gcc的输入来获取最终的目标文件.

我问这个是因为我想在gimple的中间文件中添加一些代码(通过使用flag -fdump-tree-gimple获得)格式.当然我可以使用钩子并添加我自己的传球,但我不想达到那种复杂程度.我只想给gcc我修改过的中间文件,所以它可以从那里开始编译并给我最终的目标文件.任何想法如何实现这一目标?

最佳答案GIMPLE是一种二进制内部格式,很难完全转储并正确重新加载.与LLVM相比,LLVM IR被设计为可转储并可重新加载到通常文件中(此类文件的文本和二进制格式可从每个文件完全转换为其他文件).您可以运行Clang前端发出LLVMIR,然后使用一些优化启动opt程序,然后启动其他程序,并且在各阶段之间将存在LLVM IR bitcode文件.然后你可以从IR bitcode开始代码生成到本机代码(理论上,甚至在不同的平台上,参见PNaCl项目).

有一些倾销/重新加载GCC内部代表的项目.我知道这样的项目是为了将gcc与商业编译工具集成而创建的.作者不能仅仅将商业代码与gcc联系起来,因为gcc是VIRAL(它会用反商业GPL感染任何链接代码).因此,作者将GIMPLE的GPL转储器/加载器编写为一些外部(xml)格式;专有工具能够读取该XML并将其转换为相同格式的其他XML,然后使用GPL工具重新加载.

在较新的gcc中,您可以选择编写插件,按GPL计算为is VIRAL (23.2.1).插件将在程序的内存表示中运行,并且不存在通过外部文件转储/重新加载GIMPLE的问题.
有一些插件可以配置/可以使用用户提供的程序,例如MELT(lisp)和GCC Python(Python).一些gcc插件列表is there 总结

以上是内存溢出为你收集整理的从gcc的中间文件编译目标文件全部内容,希望文章能够帮你解决从gcc的中间文件编译目标文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1046465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存