forked from xiaoweiChen/Learn-LLVM-12
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Learn-LLVM-12.tex
503 lines (436 loc) · 21.1 KB
/
Learn-LLVM-12.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
\documentclass[11pt,a4paper,UTF8]{ctexart}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{authblk}
\usepackage{ctex} %导入中文包
\usepackage{tocvsec2}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{bbding}
\usepackage{float}
\usepackage{xspace}
\usepackage[none]{hyphenat}
\usepackage{graphicx}
\usepackage{subfigure}
\usepackage{subfiles} %使用多文件方式进行
\usepackage{geometry} %设置页边距的包
\geometry{left=2.5cm,right=2cm,top=2.54cm,bottom=2.54cm} %设置书籍的页边距
\usepackage{url}
\usepackage{hyperref} %制作pdf的目录
\hypersetup{hidelinks, %去红框
colorlinks=true,
allcolors=black,
pdfstartview=Fit,
breaklinks=true
}
% 调整itemlist中的行间距
\usepackage{enumitem}
\setenumerate[1]{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=5pt}
\setitemize[1]{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=5pt}
\setdescription{itemsep=0pt,partopsep=0pt,parsep=\parskip,topsep=5pt}
% 超链接样式设置
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=blue,
urlcolor=blue,
citecolor=cyan,
}
\usepackage{indentfirst}
\usepackage{listings}
\usepackage[usenames,dvipsnames,svgnames, x11names]{xcolor}
\usepackage{tcolorbox}
%展示代码
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\lstset{
backgroundcolor=\color{blue!3!white},
%basicstyle = \footnotesize,
basicstyle=\tt,
breakatwhitespace = false,
breaklines = true,
captionpos = b,
commentstyle = \color{mygreen}\bfseries,
extendedchars = false,
frame =shadowbox,
framerule=0.5pt,
keepspaces=true,
keywordstyle=\color{blue}\bfseries, % keyword style
language = C++, % the language of code
otherkeywords={string},
numbers=left,
numbersep=5pt,
numberstyle=\tiny\color{mygray},
rulecolor=\color{black},
showspaces=false,
showstringspaces=false,
showtabs=false,
stepnumber=1,
stringstyle=\color{mymauve}, % string literal style
tabsize=2,
title=\lstname
}
\usepackage{tikz}
\begin{document}
%\maketitle
\begin{center}
%\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{cover.png}
\begin{tikzpicture}[remember picture, overlay, inner sep=0pt]
\node at (current page.center)
{\includegraphics[width=\paperwidth, height=\paperheight, keepaspectratio=false]{cover.png}};
\end{tikzpicture}
\newpage
\huge
\textbf{Learn LLVM 12}
\\[9pt]
\normalsize
A beginner's guide to learning LLVM compiler tools and core libraries with C++
\\[10pt]
\normalsize
作者: Kai Nacke
\\[8pt]
\normalsize
译者;陈晓伟
\end{center}
\hspace*{\fill} \\ %插入空行
\noindent\textbf{本书概述}\ \par
学习如何构建和使用编译器,包括前端、流水线优化和利用LLVM核心库的强大功能构建新的后端编译器。\par
LLVM是为了弥合编译器理论和实际开发之间的差异而出现的。它提供了模块化的代码库和先进的工具,帮助开发人员轻松地构建编译器。本书提供了对LLVM的介绍,帮助读者在各种情况下构建和使用编译器。\par
本书将从配置、构建和安装LLVM库、工具和外部项目开始。接着,向您介绍LLVM的设计,以及在每个编译器阶段(前端、优化器和后端)的实际工作方式。以实际编程语言为例,学习如何使用LLVM开发前端编译器,并生成LLVM IR,将其交给优化流水线,并从中生成机器码。后面的章节将展示如何扩展LLVM,以及LLVM中的指令选择是如何工作的。在了解如何为LLVM开发新的后端编译器之前,将重点讨论即时编译问题和LLVM提供的JIT编译的支持情况。\par
阅读本书后,您将获得使用LLVM编译器开发框架的实际经验,并得到一些具有帮助性的实际示例和源代码片段。\par
\textbf{关键特性}:\par
\begin{itemize}
\item 学习如何有效地使用LLVM
\item 理解LLVM编译器的高级设计,并将原则应用到自己的编译器中
\item 使用基于编译器的工具来提高C++项目的代码质量
\end{itemize}
\textbf{内容纲要}:\par
\begin{itemize}
\item 配置、编译和安装LLVM框架
\item 理解LLVM源码的结构
\item 了解在项目中可以使用LLVM做什么
\item 探索编译器是如何构造的,并实现一个小型编译器
\item 为通用源语言构造生成LLVM IR
\item 建立优化流水线,并根据自己的需要进行调整
\item 使用转换通道和Clang工具对LLVM进行扩展
\item 添加新的机器指令和完整的后端编译器
\end{itemize}
\hspace*{\fill} \\ %插入空行
\noindent\textbf{作者简介}\ \par
\textbf{Kai Nacke}是一名专业IT架构师,目前居住在加拿大多伦多。毕业于德国多特蒙德技术大学的计算机科学专业。他关于通用哈希函数的毕业论文,被评为最佳论文。\par
他在IT行业工作超过20年,在业务和企业应用程序的开发和架构方面有丰富的经验。他在研发一个基于LLVM/Clang的编译器。\par
几年来,他一直是LDC(基于LLVM的D语言编译器)的维护者。在Packt出版过《D Web Development》一书,他也曾在自由和开源软件开发者欧洲会议(FOSDEM)的LLVM开发者室做过演讲。\par
\hspace*{\fill} \\ %插入空行
\noindent\textbf{审评者介绍}\ \par
\textbf{Suyog Sarda}是一名专业的软件工程师和开源爱好者,专注于编译器开发和编译器工具,是LLVM开源社区的积极贡献者。他毕业于了印度浦那工程学院,具有计算机技术学士学位。Suyog还参与了ARM和X86架构的代码性能改进,一直是Tizen项目编译团队的一员,对编译器开发的兴趣在于代码优化和向量化。之前,他写过一本关于LLVM的书,名为《LLVM Cookbook》,由Packt出版。除了编译器,Suyog还对Linux内核开发感兴趣。他在迪拜Birla Institute of Technology的2012年IEEE Proceedings of the International Conference on Cloud Computing, Technologies, Applications, and Management上发表了一篇题为《VM pin and Page Coloring Secure Co-resident Virtualization in Multicore Systems》的技术论文。
\hspace*{\fill} \\ %插入空行
\noindent\textbf{本书相关}\ \par
\begin{itemize}
\item github翻译地址:\url{https://github.com/xiaoweiChen/Learn-LLVM-12}
\item 本书代码:\url{https://github.com/PacktPublishing/Learn-LLVM-12}
\end{itemize}
\newpage
\begin{center}
\vspace*{\fill}
写书是一项具有挑战性的任务。尤其是正计划移居加拿大时,突然一场流行病袭击了世界,改变了一切。\par
\hspace*{\fill} \par
Packt的团队在写作上给予指导,也对我缓慢的写作速度表示理解,并一直激励我坚持下去。我非常非常感谢他们。\par
\hspace*{\fill} \par
没有家人的支持,就不可能有这本书。谢谢对我的信心!\par
\vspace*{\fill}
\end{center}
\newpage
\pagestyle{empty}
\subfile{content/Preface.tex}
\tableofcontents
\newpage
\setsecnumdepth{section}
\color{white}
\section*{\zihao{1} 1 构建LLVM}
\pagecolor{mygray}
\addcontentsline{toc}{section}{1 构建LLVM}
\subfile{content/1/Part-1.tex}
\color{black}
\pagecolor{white}
\subsection*{\zihao{2} 第1章\hspace{0.5cm}安装LLVM}
\addcontentsline{toc}{subsection}{第1章\hspace{0.5cm}安装LLVM}
\subfile{content/1/chapter1/0.tex}
\subsubsection*{\zihao{3} 相关准备}
\addcontentsline{toc}{subsubsection}{相关准备}
\subfile{content/1/chapter1/1.tex}
\subsubsection*{\zihao{3} 使用CMake构建}
\addcontentsline{toc}{subsubsection}{使用CMake构建}
\subfile{content/1/chapter1/2.tex}
\subsubsection*{\zihao{3} 定制化构建}
\addcontentsline{toc}{subsubsection}{定制化构建}
\subfile{content/1/chapter1/3.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/1/chapter1/4.tex}
\subsection*{\zihao{2} 第2章\hspace{0.5cm}浏览LLVM}
\addcontentsline{toc}{subsection}{第2章\hspace{0.5cm}浏览LLVM}
\subfile{content/1/chapter2/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/1/chapter2/1.tex}
\subsubsection*{\zihao{3} LLVM代码的内容}
\addcontentsline{toc}{subsubsection}{LLVM代码的内容}
\subfile{content/1/chapter2/2.tex}
\subsubsection*{\zihao{3} LLVM的项目结构}
\addcontentsline{toc}{subsubsection}{LLVM的项目结构}
\subfile{content/1/chapter2/3.tex}
\subsubsection*{\zihao{3} 使用LLVM创建自己的项目}
\addcontentsline{toc}{subsubsection}{使用LLVM创建自己的项目}
\subfile{content/1/chapter2/4.tex}
\subsubsection*{\zihao{3} 针对不同的CPU架构}
\addcontentsline{toc}{subsubsection}{针对不同的CPU架构}
\subfile{content/1/chapter2/5.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/1/chapter2/6.tex}
\subsection*{\zihao{2} 第3章\hspace{0.5cm}编译器结构}
\addcontentsline{toc}{subsection}{第3章\hspace{0.5cm}编译器结构}
\subfile{content/1/chapter3/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/1/chapter3/1.tex}
\subsubsection*{\zihao{3} 编译器的构建块}
\addcontentsline{toc}{subsubsection}{编译器的构建块}
\subfile{content/1/chapter3/2.tex}
\subsubsection*{\zihao{3} 算术表达式语言}
\addcontentsline{toc}{subsubsection}{算术表达式语言}
\subfile{content/1/chapter3/3.tex}
\subsubsection*{\zihao{3} 语法分析}
\addcontentsline{toc}{subsubsection}{语法分析}
\subfile{content/1/chapter3/4.tex}
\subsubsection*{\zihao{3} 语义分析}
\addcontentsline{toc}{subsubsection}{语义分析}
\subfile{content/1/chapter3/5.tex}
\subsubsection*{\zihao{3} 使用LLVM后端编译器生成代码}
\addcontentsline{toc}{subsubsection}{使用LLVM后端编译器生成代码}
\subfile{content/1/chapter3/6.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/1/chapter3/7.tex}
\color{white}
\section*{\zihao{1} 2 从源码到机器码}
\pagecolor{mygray}
\addcontentsline{toc}{section}{2 从源码到机器码}
\subfile{content/2/Part-2.tex}
\color{black}
\pagecolor{white}
\subsection*{\zihao{2}第4章\hspace{0.5cm}将源文件转换为抽象语法树}
\addcontentsline{toc}{subsection}{第4章\hspace{0.5cm}将源文件转换为抽象语法树}
\subfile{content/2/chapter4/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/2/chapter4/1.tex}
\subsubsection*{\zihao{3} 定义一种编程语言}
\addcontentsline{toc}{subsubsection}{定义一种编程语言}
\subfile{content/2/chapter4/2.tex}
\subsubsection*{\zihao{3} 创建项目结构}
\addcontentsline{toc}{subsubsection}{创建项目结构}
\subfile{content/2/chapter4/3.tex}
\subsubsection*{\zihao{3} 管理源文件和用户消息}
\addcontentsline{toc}{subsubsection}{管理源文件和用户消息}
\subfile{content/2/chapter4/4.tex}
\subsubsection*{\zihao{3} 构建词法分析器}
\addcontentsline{toc}{subsubsection}{构建词法分析器}
\subfile{content/2/chapter4/5.tex}
\subsubsection*{\zihao{3} 构建递归下降解析器}
\addcontentsline{toc}{subsubsection}{构建递归下降解析器}
\subfile{content/2/chapter4/6.tex}
\subsubsection*{\zihao{3} 用bison和flex生成解析器和词法分析器}
\addcontentsline{toc}{subsubsection}{用bison和flex生成解析器和词法分析器}
\subfile{content/2/chapter4/7.tex}
\subsubsection*{\zihao{3} 执行语义分析}
\addcontentsline{toc}{subsubsection}{执行语义分析}
\subfile{content/2/chapter4/8.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/2/chapter4/9.tex}
\subsection*{\zihao{2}第5章\hspace{0.5cm}生成IR——基础知识}
\addcontentsline{toc}{subsection}{第5章\hspace{0.5cm}生成IR——基础知识}
\subfile{content/2/chapter5/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/2/chapter5/1.tex}
\subsubsection*{\zihao{3} 使用AST生成IR}
\addcontentsline{toc}{subsubsection}{使用AST生成IR}
\subfile{content/2/chapter5/2.tex}
\subsubsection*{\zihao{3} 使用AST编码生成SSA形式的IR}
\addcontentsline{toc}{subsubsection}{使用AST编码生成SSA形式的IR}
\subfile{content/2/chapter5/3.tex}
\subsubsection*{\zihao{3} 设置模块和驱动程序}
\addcontentsline{toc}{subsubsection}{设置模块和驱动程序}
\subfile{content/2/chapter5/4.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/2/chapter5/5.tex}
\subsection*{\zihao{2}第6章\hspace{0.5cm}生成高级语言结构的IR}
\addcontentsline{toc}{subsection}{第6章\hspace{0.5cm}生成高级语言结构的IR}
\subfile{content/2/chapter6/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/2/chapter6/1.tex}
\subsubsection*{\zihao{3} 使用数组、结构体和指针}
\addcontentsline{toc}{subsubsection}{使用数组、结构体和指针}
\subfile{content/2/chapter6/2.tex}
\subsubsection*{\zihao{3} 正确的获取ABI(应用程序二进制接口)}
\addcontentsline{toc}{subsubsection}{正确的获取二进制程序的接口}
\subfile{content/2/chapter6/3.tex}
\subsubsection*{\zihao{3} 为类和虚函数创建IR代码}
\addcontentsline{toc}{subsubsection}{为类和虚函数创建IR代码}
\subfile{content/2/chapter6/4.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/2/chapter6/5.tex}
\subsection*{\zihao{2}第7章\hspace{0.5cm}IR的进阶使用方式}
\addcontentsline{toc}{subsection}{第7章\hspace{0.5cm}IR的进阶使用方式}
\subfile{content/2/chapter7/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/2/chapter7/1.tex}
\subsubsection*{\zihao{3} 抛出和捕获异常}
\addcontentsline{toc}{subsubsection}{抛出和捕获异常}
\subfile{content/2/chapter7/2.tex}
\subsubsection*{\zihao{3} 基于类型的别名生成元数据的分析}
\addcontentsline{toc}{subsubsection}{基于类型的别名生成元数据的分析}
\subfile{content/2/chapter7/3.tex}
\subsubsection*{\zihao{3} 添加调试元数据}
\addcontentsline{toc}{subsubsection}{添加调试元数据}
\subfile{content/2/chapter7/4.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/2/chapter7/5.tex}
\subsection*{\zihao{2}第8章\hspace{0.5cm}优化IR}
\addcontentsline{toc}{subsection}{第8章\hspace{0.5cm}优化IR}
\subfile{content/2/chapter8/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/2/chapter8/1.tex}
\subsubsection*{\zihao{3} 介绍LLVM Pass管理器}
\addcontentsline{toc}{subsubsection}{介绍LLVM Pass管理器}
\subfile{content/2/chapter8/2.tex}
\subsubsection*{\zihao{3} 使用新Pass管理器实现一个Pass}
\addcontentsline{toc}{subsubsection}{使用新Pass管理器实现一个Pass}
\subfile{content/2/chapter8/3.tex}
\subsubsection*{\zihao{3} 使用旧Pass管理器适配Pass}
\addcontentsline{toc}{subsubsection}{使用旧Pass管理器适配Pass}
\subfile{content/2/chapter8/4.tex}
\subsubsection*{\zihao{3} 向编译器添加优化流水线}
\addcontentsline{toc}{subsubsection}{向编译器添加优化流水线}
\subfile{content/2/chapter8/5.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/2/chapter8/6.tex}
\color{white}
\section*{\zihao{1} 3 LLVM进阶}
\pagecolor{mygray}
\addcontentsline{toc}{section}{3 LLVM进阶}
\subfile{content/3/Part-3.tex}
\color{black}
\pagecolor{white}
\subsection*{\zihao{2}第9章\hspace{0.5cm}指令选择}
\addcontentsline{toc}{subsection}{第9章\hspace{0.5cm}指令选择}
\subfile{content/3/chapter9/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/3/chapter9/1.tex}
\subsubsection*{\zihao{3} 理解LLVM目标后端结构}
\addcontentsline{toc}{subsubsection}{理解LLVM目标后端结构}
\subfile{content/3/chapter9/2.tex}
\subsubsection*{\zihao{3} 使用MIR对后端进行测试和调试}
\addcontentsline{toc}{subsubsection}{使用MIR对后端进行测试和调试}
\subfile{content/3/chapter9/3.tex}
\subsubsection*{\zihao{3} 如何选择指令}
\addcontentsline{toc}{subsubsection}{如何选择指令}
\subfile{content/3/chapter9/4.tex}
\subsubsection*{\zihao{3} 支持新的机器指令}
\addcontentsline{toc}{subsubsection}{支持新的机器指令}
\subfile{content/3/chapter9/5.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/3/chapter9/6.tex}
\subsection*{\zihao{2}第10章\hspace{0.5cm}JIT编译}
\addcontentsline{toc}{subsection}{第10章\hspace{0.5cm}JIT编译}
\subfile{content/3/chapter10/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/3/chapter10/1.tex}
\subsubsection*{\zihao{3} 概述LLVM的JIT实现和用例}
\addcontentsline{toc}{subsubsection}{概述LLVM的JIT实现和用例}
\subfile{content/3/chapter10/2.tex}
\subsubsection*{\zihao{3} 使用JIT编译直接执行}
\addcontentsline{toc}{subsubsection}{使用JIT编译直接执行}
\subfile{content/3/chapter10/3.tex}
\subsubsection*{\zihao{3} 利用JIT编译器进行代码计算}
\addcontentsline{toc}{subsubsection}{利用JIT编译器进行代码计算}
\subfile{content/3/chapter10/4.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/3/chapter10/5.tex}
\subsection*{\zihao{2}第11章\hspace{0.5cm}使用LLVM工具调试}
\addcontentsline{toc}{subsection}{第11章\hspace{0.5cm}使用LLVM工具调试}
\subfile{content/3/chapter11/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/3/chapter11/1.tex}
\subsubsection*{\zihao{3} 使用sanitizer安装应用程序}
\addcontentsline{toc}{subsubsection}{使用sanitizer安装应用程序}
\subfile{content/3/chapter11/2.tex}
\subsubsection*{\zihao{3} 用libFuzzer找Bug}
\addcontentsline{toc}{subsubsection}{用libFuzzer找Bug}
\subfile{content/3/chapter11/3.tex}
\subsubsection*{\zihao{3} 使用XRay进行性能分析}
\addcontentsline{toc}{subsubsection}{使用xRay进行性能分析}
\subfile{content/3/chapter11/4.tex}
\subsubsection*{\zihao{3} 使用Clang静态分析器检查源码}
\addcontentsline{toc}{subsubsection}{使用Clang静态分析器检查源码}
\subfile{content/3/chapter11/5.tex}
\subsubsection*{\zihao{3} 创建自己的基于Clang的工具}
\addcontentsline{toc}{subsubsection}{创建自己的基于Clang的工具}
\subfile{content/3/chapter11/6.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/3/chapter11/7.tex}
\subsection*{\zihao{2}第12章\hspace{0.5cm}自定义编译器后端}
\addcontentsline{toc}{subsection}{第12章\hspace{0.5cm}自定义编译器后端}
\subfile{content/3/chapter12/0.tex}
\subsubsection*{\zihao{3} 相关代码}
\addcontentsline{toc}{subsubsection}{相关代码}
\subfile{content/3/chapter12/1.tex}
\subsubsection*{\zihao{3} 为新的后端搭建舞台}
\addcontentsline{toc}{subsubsection}{为新的后端搭建舞台}
\subfile{content/3/chapter12/2.tex}
\subsubsection*{\zihao{3} 将新的体系结构添加到Triple类中}
\addcontentsline{toc}{subsubsection}{将新的体系结构添加到Triple类中}
\subfile{content/3/chapter12/3.tex}
\subsubsection*{\zihao{3} 在LLVM中扩展ELF文件格式定义}
\addcontentsline{toc}{subsubsection}{在LLVM中扩展ELF文件格式定义}
\subfile{content/3/chapter12/4.tex}
\subsubsection*{\zihao{3} 创建目标描述}
\addcontentsline{toc}{subsubsection}{创建目标描述}
\subfile{content/3/chapter12/5.tex}
\subsubsection*{\zihao{3} 实现DAG指令选择类}
\addcontentsline{toc}{subsubsection}{实现DAG指令选择类}
\subfile{content/3/chapter12/6.tex}
\subsubsection*{\zihao{3} 生成汇编指令}
\addcontentsline{toc}{subsubsection}{生成汇编指令}
\subfile{content/3/chapter12/7.tex}
\subsubsection*{\zihao{3} 计算机编码}
\addcontentsline{toc}{subsubsection}{计算机编码}
\subfile{content/3/chapter12/8.tex}
\subsubsection*{\zihao{3} 支持反汇编}
\addcontentsline{toc}{subsubsection}{支持反汇编}
\subfile{content/3/chapter12/9.tex}
\subsubsection*{\zihao{3} 自定义后端的汇总}
\addcontentsline{toc}{subsubsection}{自定义后端的汇总}
\subfile{content/3/chapter12/10.tex}
\subsubsection*{\zihao{3} 总结}
\addcontentsline{toc}{subsubsection}{总结}
\subfile{content/3/chapter12/11.tex}
\end{document}