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

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镜像获取

相关文章:

  • 强化学习和智能决策:Q-Learning和Deep Q-Learning算法
  • 漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)
  • 【0基础跟AI学软考高项】质量管理
  • PVE 安装黑苹果 MacOS
  • mac m3 pro 部署 stable diffusion webui
  • cJSON- API 深度解析:设计理念与实现原理(二)
  • 本地靶场的“作弊模式”?从单用户模式解锁网络与权限的秘密
  • 用Deepseek写扫雷uniapp小游戏
  • 【GPUStack】【dify】【RAGflow】:本地部署GPUStack并集成到dify和RAGflow
  • (基本常识)左值引用、右值引用、万能引用、移动语义和完美转发——原理和代码示例
  • Linux学习:进程通信(管道)
  • HarmonyOS:GridObjectSortComponent(两个Grid之间网格元素交换)
  • 微软下一个大更新:Windows 11 25H2或已在路上!
  • CSS(八)
  • Linux笔记---动静态库(使用篇)
  • 全书测试:《C++性能优化指南》
  • 如何在 Postman 中配置并发送 JSON 格式的 POST 请求?
  • ‌国产芯片解析:龙迅HDMI发射机系列产品详解
  • 【C++】内存模型分析
  • Cherry Studio开源程序 是一个支持多个LLM提供商的桌面客户端。支持 deepseek-r1,可在 Windows、Mac 和 Linux 上使用
  • 以军证实空袭也门多个港口
  • 中国物流集团等10家央企11名领导人员职务任免
  • 自强!助残!全国200个集体和260名个人受到表彰
  • 央视起底“字画竞拍”网络传销案:涉案44亿元,受害者众多
  • 今年有望投产里程已近3000公里,高铁冲刺谁在“狂飙”?
  • 苏轼“胡为适南海”?