LLVM编译器实战教程

0
(0)

LLVM编译器实战教程

作者:[巴西]布鲁诺·卡多索·洛佩斯(BrunoCardosoLopes)/[巴西]拉斐尔·奥勒(RafaelAuler)

出版社:机械工业出版社

原作名:GettingStartedwithLLVMCoreLibraries

译者:过敏意/冷静文

出版年:2019-8

页数:226

定价:79.00元

装帧:平装

丛书:计算机科学丛书

ISBN:9787111631972

内容简介
······

LLVM是一个世界领先水平的编译器框架。它包含有丰富软件库,可以为编译器的初学者提供良好的学习体验,并大大降低编译器开发的学习门槛。

本书的前半部分将向您介绍怎么样去配置、构建、和安装LLVM的不同软件库、工具和外部项目。接下来,本书的后半部分将向您介绍LLVM的各种设计细节,并逐步地讲解LLVM的各个编译步骤:前段、中间表示(IR)、后端、即时编译(JIT)引擎、跨平台编译和插件接口。本书包含有大量翔实的示例和代码片段,以帮助读者平稳顺利的掌握LLVM的编译器开发环境。

作者简介
······

布鲁诺·卡多索·洛佩斯(Bruno Cardoso Lopes)在巴西坎皮纳斯大学获得计算机科学博士学位。自2007年以来,他一直是LLVM的贡献者,从头开始实现MIPS后端,并且已经维护了几年。另外,他还编写了x86 AVX支持方案,并改进了ARM汇编器。他的研究兴趣包括代码压缩技术和对ISA进行位宽压缩。之前他还开发了Linux和FreeBSD操作系统的驱动程序。

拉斐尔·奥勒(Rafael Auler)是巴西坎皮纳斯大学的博士生,并拥有该大学计算机科学硕士学位和计算机工程学士学位。在作为硕士生期间,他编写了一个可以根据体系结构描述文件自动生成LLVM后端的概念验证工具。目前,他的博士研究课题包括动态二进制翻译、即时编译器和计算机体系结构。 Rafael还是微软研究院2013年研究生研究奖学金获得者。

目录
······

出版者的话

译者序

前言

关于作者

关于审稿人

第1章 构建和安装LLVM 1

1.1 了解LLVM版本 1

1.2 获取预构建包 2

1.2.1 获取官方预构建二进制文件 2

1.2.2 使用软件包管理器 3

1.3 从源代码构建 4

1.3.1 系统要求 4

1.3.2 获取源代码 4

1.3.3 构建和安装LLVM 5

1.3.4 Windows和Microsoft Visual Studio 10

1.3.5 Mac OS X和Xcode 12

1.4 总结 14

第2章 外部项目 15

2.1 Clang外部项目介绍 15

2.1.1 构建和安装Clang外部工具 16

2.1.2 理解Compiler-RT 17

2.1.3 实验Compiler-RT 17

2.2 使用DragonEgg插件 18

2.2.1 构建DragonEgg 19

2.2.2 使用DragonEgg和LLVM工具了解编译流程 19

2.2.3 理解LLVM测试套件 20

2.2.4 使用LLDB 21

2.2.5 libc++标准库介绍 23

2.3 总结 25

第3章 工具和设计 26

3.1 LLVM的基本设计原理及其历史 26

3.2 理解目前的LLVM 27

3.3 与编译器驱动程序交互 29

3.4 使用独立工具 30

3.5 深入LLVM内部设计 33

3.5.1 了解LLVM的基本库 33

3.5.2 介绍LLVM的C++惯例 34

3.5.3 演示可插拔的流程接口 37

3.6 编写你的第一个LLVM项目 38

3.6.1 编写Makefile 38

3.6.2 编写代码 40

3.7 关于LLVM源代码的一般建议 41

3.7.1 将代码理解为文档 42

3.7.2 请求社区的帮助 42

3.7.3 应对更新:使用SVN日志作为文档 42

3.7.4 结束语 44

3.8 总结 44

第4章 前端 45

4.1 Clang简介 45

4.1.1 前端操作 46

4.1.2 库 47

4.1.3 理解Clang诊断 49

4.2 Clang前端阶段介绍 52

4.2.1 词法分析 52

4.2.2 语法分析 58

4.2.3 语义分析 63

4.2.4 生成LLVM IR代码 65

4.3 完整的例子 65

4.4 总结 68

第5章 LLVM中间表示 69

5.1 概述 69

5.2 操作IR格式的基本工具示例 71

5.3 LLVM IR语法介绍 71

5.4 编写自定义的LLVM IR生成器 76

5.4.1 构建和运行IR生成器 79

5.4.2 使用C++后端编写代码来生成IR构造 80

5.5 在IR层执行优化 80

5.5.1 编译时优化和链接时优化 80

5.5.2 发现最佳编译器流程 82

5.5.3 流程间的依赖关系 83

5.5.4 了解流程API 85

5.5.5 自定义流程 85

5.6 总结 89

第6章 后端 90

6.1 概述 90

6.2 后端代码结构介绍 92

6.3 后端库介绍 93

6.4 如何使用TableGen实现LLVM后端 94

6.4.1 TableGen语言 95

6.4.2 代码生成器.td文件介绍 96

6.5 指令选择阶段介绍 100

6.5.1 SelectionDAG类 100

6.5.2 降级 102

6.5.3 DAG合并以及合法化 103

6.5.4 DAG到DAG指令选择 104

6.5.5 指令选择过程可视化 107

6.5.6 快速指令选择 107

6.6 调度器 107

6.6.1 指令执行进程表 108

6.6.2 竞争检测 109

6.6.3 调度单元 109

6.7 机器指令 109

6.8 寄存器分配 110

6.8.1 寄存器合并器 111

6.8.2 虚拟寄存器重写 114

6.8.3 编译目标的信息 115

6.9 前序代码和结束代码 116

6.10  机器代码框架介绍 116

6.10.1  MC指令 116

6.10.2  代码输出 117

6.11  自定义机器流程 119

6.12 总结 121

第7章 即时编译器 122

7.1 LLVM JIT引擎的基础知识介绍 122

7.1.1 介绍执行引擎 123

7.1.2 内存管理 124

7.2 llvm::JIT框架介绍 124

7.2.1 将二进制大对象写入内存 125

7.2.2 使用JITMemoryManager 125

7.2.3 目标代码输出器 125

7.2.4 目标信息 127

7.2.5 学习如何使用JIT类 127

7.3 llvm::MCJIT框架介绍 131

7.3.1 MCJIT引擎 131

7.3.2 MCJIT中模块编译过程 132

7.3.3 使用MCJIT引擎 135

7.4 使用LLVM JIT编译工具 137

7.4.1 使用lli工具 137

7.4.2 使用llvm-rtdyld工具 138

7.5 其他资源 139

7.6 总结 139

第8章 跨平台编译 140

8.1 GCC和LLVM对比 140

8.2 目标三元组介绍 141

8.3 准备自己的工具链 142

8.3.1 标准C/C++库 143

8.3.2 运行时库 143

8.3.3 汇编器和链接器 144

8.3.4 Clang前端 144

8.4 用Clang命令行参数进行交叉编译 145

8.4.1 针对目标的驱动程序选项 145

8.4.2 依赖包 145

8.4.3 交叉编译 146

8.4.4 更改系统根目录 148

8.5 生成Clang交叉编译器 149

8.5.1 配置选项 149

8.5.2 构建和安装基于Clang的交叉编译器 149

8.5.3 其他构建方法 150

8.6 测试 151

8.6.1 开发板 151

8.6.2 模拟器 151

8.7 其他资源 152

8.8 总结 152

第9章 Clang静态分析器 153

9.1 静态分析器的作用 153

9.1.1 传统警告信息和Clang静态分析器比较 153

9.1.2 符号执行引擎的高效性 156

9.2 测试静态分析器 158

9.2.1 使用驱动程序与使用编译器 158

9.2.2 了解可用的检查器 158

9.2.3 在Xcode IDE中使用静态分析器 160

9.2.4 生成HTML格式的图形

9.2.5 处理大型项目 161

9.3 使用自定义的检查器扩展静态分析器 164

9.3.1 熟悉项目架构 164

9.3.2 自定义检查器 165

9.4 其他资源 173

9.5 总结 174

第10章 基于LibTooling的Clang工具 175

10.1 生成编译命令数据库 175

10.2 clang-tidy工具 176

10.3 代码重构工具 178

10.3.1 Clang Modernizer(代码转换器) 178

10.3.2 Clang Apply Replacements(替换执行器) 178

10.3.3 ClangFormat (格式化工具) 180

10.3.4 Modularize(模块化工具) 181

10.3.5 Module Map Checker(模块映射检查器) 187

10.3.6 PPTrace(追踪工具) 187

10.3.7 Clang Query(查询工具) 189

10.3.8 Clang Check(检查工具) 190

10.3.9 remove-cstr-calls(调用移除工具) 190

10.4 编写自己的工具 190

10.4.1 问题定义:编写一个C++代码重构工具 191

10.4.2 配置源代码位置 191

10.4.3 剖析工具的模板代码 192

10.4.4 使用AST匹配器 195

10.4.5 编写回调函数 199

10.4.6 测试编写的重构工具 200

10.5 其他资源 201

10.6 总结 201

索引 202

评论 ······

个人体验,这本书的价值偏低。真心对llvm感兴趣的话,还是建议龙、虎、鲸书配合源码。

行文比较流水账,讲得也不深,浮于表面。简单入个门的话,看这个还可以。

这本书非常棒,能让你从全局去了解最近的编译器相关的工具对我很有帮助

比较偏工具书

点击星号评分!

平均分 0 / 5. 投票数: 0

还没有投票!请为他投一票。

推荐阅读

评论 抢沙发

评论前必须登录!

 

登录

找回密码

注册