当前位置: 首页 > article >正文

LLVM学习-DragonEgg工具

2.2.2 使用DragonEggLLVM工具了解编译流程

如果希望看到前端运行情况使用-S -fplugin-arg-dragonegg-emit-ir标志标志产生LLVM IR代码表示人工可读文件

一旦编译器程序转换为IR停止编译内存中的表示内容写入磁盘能力LLVM一个独有特征大多数其他编译器无法做到这一点欣赏LLVM IR如何表示源程序之后可以手动使用多个LLVM工具继续完成编译过程以下命令调用一个特殊汇编程序LLVM文本形式转换二进制形式保存磁盘上

llvm-as hello.11 -o hello.bc

如果愿意可以一个特殊IR反汇编(llvm-dis) 把它翻译回可读的形式以下工具显示成功完成代码转换相关统计信息同时进行独立编译目标

opt -stats hello.bc -o hello.bc

强调下,-stats标志可选由于hello.s是一个汇编文件因此可以使用GNU binutiles汇编器也可以使用LLVM汇编器下面命令我们使用LLVM汇编器

llvm-mc -filetype=obj hello.S -o hello.o

因为LLVM链接器项目lld目前正在开发中还没有集成到核心LLVM项目中所以LLVM默认使用你的系统链接器因此如果没有lld可以使用常规编译器驱动程序完成编译这会激活你的系统链接器

gcc hello.o -c hello

出于性能方面原因除了目标文件之外真正LLVM编译器驱动程序任何阶段都不会程序表示内容写入磁盘因为仍然缺少集成链接器会使用内存中表示内容协调几个LLVM组件进行编译

2.2.3 理解LLVM测试套件

LLVM测试套件包括一套用于测试LLVM 编译器官方基准程序测试套件对于LLVM开发人员非常有用通过编译运行这些程序验证优化编译器改进如果正在使用LLVM非稳定版本或者更改LLVM源代码怀疑某些功能不能正常工作那么可以自行运行测试套件LLVM源代码存在简单的LLVM回归测试单元测试可以使用make check-all 轻松运行他们测试条件不同传统回归测试单元测试因为包含了整个基准程序

必须LLVM测试套件放到LLVM源代码允许LLVM构建系统识别可以http://llvm.org/release/3.4/test-suite-3.4.src.tar.gz 找到版本3.4资源

要获取源代码使用以下命令

wget http://llvm.org/release/3.4/test-suite-3.4.src.tar.gz

如果你喜欢使用GIT请使用以下命令

cd llvm/projects

git clone http://llvm.org/git/llvm-project/test-suite.git

需要重新生成LLVM构建文件才能使用测试套件在此特例不能使用CMake必须使用经典配置脚本构建测试套件读者可以参考1介绍配置步骤

测试套件有一套Makefile文件用于测试检查基准也可以提供一个自定义Makefile 评估自定义程序请将自定义Makefile 文件放在测试套件源代码目录并使用命名模版llvm/projects/test-suite/TEST.<custom> Makefile命名文件其中

必须<custom>记号替换所需任何名称比如llvm/projects/test-suite/TEST.example.Makefile

配置期间将在基准测试程序将要运行LLVM对象目录创建测试套件目录运行测试示例Makefile文件

cd your-llvm-build-folder/projects/test-suite

2.2.4 使用LLDB

LLDB项目一个LLVM基础架构构建调试器作为Mac OS XXcode 5调试积极开发出来2011开始开发本书为止LLDB还没有Xcode范围之外发布一个稳定版本可以从http://llvm.org/release/3.4/lldb-3.4.src.tar.gz获取LLDB资源许多依赖LLVM项目一样可以通过将其集成到LLVM构建系统轻松构建要做到这一点只需将其源代码放在LLVM toos文件中如下所示

wget http://llvm.org/release/3.4/lldb-3.4.src.tar.gz

tar xvf lldb-3.4.src.tar.gz

也可以使用SVN存储获得最新版本

cd llvm/tools

svn checkout http://llvm.org/svn/llvm-project/lldb/trunk lldb

如果你愿意还可以使用GIT镜像获取


http://www.kler.cn/a/610232.html

相关文章:

  • 3D编辑器:开启虚拟世界的创意大门
  • 基于python+django的商城网站-电子商城管理系统源码+运行
  • 什么是数据密集型,什么是计算密集型,以及这两者有什么关联和区别
  • CPP从入门到入土之类和对象Ⅲ
  • 英伟达与通用汽车深化合作,澳特证券am broker助力科技投资
  • STM32 - 在机器人、自动化领域,LL库相比HAL优势明显
  • C# 责任链模式全面讲解:设计思想与实际应用
  • 告别AI幻觉:Cursor“知识库”技术实现85%的错误减少
  • 支付宝关键词排名优化策略:提升小程序曝光的关键
  • Leetcode 最小基因变化
  • 程序化广告行业(36/89):广告投放全流程及活动设置详解
  • react-create-app整合windicss
  • 六十天Linux从0到项目搭建(第八天)(缓冲区、gitee提交)
  • Mysql 回表查询,什么是回表查询,如何拒绝sql查询时的回表问题
  • Ubuntu软件包离线下载安装
  • AI时代,如何从海量数据中挖掘金矿
  • 基于Babylon.js的Shader入门之六:让Shader反射环境贴图
  • Day24:队列的最大值
  • 深入理解指针(3)(C语言版)
  • 如何自定义5x5键盘