注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)網(wǎng)絡(luò)與數(shù)據(jù)通信網(wǎng)絡(luò)服務(wù)LLVM編譯器實(shí)戰(zhàn)教程

LLVM編譯器實(shí)戰(zhàn)教程

LLVM編譯器實(shí)戰(zhàn)教程

定 價(jià):¥79.00

作 者: (巴西)布魯諾·卡多索·洛佩斯,拉斐爾·奧勒
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買這本書(shū)可以去


ISBN: 9787111631972 出版時(shí)間: 2019-09-01 包裝:
開(kāi)本: 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  LLVM是一個(gè)正在發(fā)展中的前沿編譯器技術(shù)框架,它易于擴(kuò)展并設(shè)計(jì)成多個(gè)庫(kù),可以為編譯器入門者提供流暢的體驗(yàn),并能使編譯器開(kāi)發(fā)所涉及的學(xué)習(xí)過(guò)程變得非常順暢?!禠LVM編譯器實(shí)戰(zhàn)教程》首先介紹如何配置、構(gòu)建和安裝LLVM庫(kù)、工具和外部項(xiàng)目,隨后介紹LLVM設(shè)計(jì)以及它在每個(gè)LLVM編譯器階段的實(shí)際工作方式,這些階段包括:前端、IR、后端、JIT引擎、交叉編譯功能和插件接口。《LLVM編譯器實(shí)戰(zhàn)教程》還提供了多個(gè)實(shí)際操作的范例和源代碼片段,可以幫助讀者順利地掌握LLVM編譯器開(kāi)發(fā)環(huán)境的入門知識(shí)。

作者簡(jiǎn)介

  布魯諾·卡多索·洛佩斯(Bruno Cardoso Lopes)在巴西坎皮納斯大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位。自2007年以來(lái),他一直是LLVM的貢獻(xiàn)者,從頭開(kāi)始實(shí)現(xiàn)MIPS后端,并且已經(jīng)維護(hù)了幾年。另外,他還編寫(xiě)了x86 AVX支持方案,并改進(jìn)了ARM匯編器。他的研究興趣包括代碼壓縮技術(shù)和對(duì)ISA進(jìn)行位寬壓縮。之前他還開(kāi)發(fā)了Linux和FreeBSD操作系統(tǒng)的驅(qū)動(dòng)程序。拉斐爾·奧勒(Rafael Auler)是巴西坎皮納斯大學(xué)的博士生,并擁有該大學(xué)計(jì)算機(jī)科學(xué)碩士學(xué)位和計(jì)算機(jī)工程學(xué)士學(xué)位。在作為碩士生期間,他編寫(xiě)了一個(gè)可以根據(jù)體系結(jié)構(gòu)描述文件自動(dòng)生成LLVM后端的概念驗(yàn)證工具。目前,他的博士研究課題包括動(dòng)態(tài)二進(jìn)制翻譯、即時(shí)編譯器和計(jì)算機(jī)體系結(jié)構(gòu)。 Rafael還是微軟研究院2013年研究生研究獎(jiǎng)學(xué)金獲得者。

圖書(shū)目錄

出版者的話

\n


\n

譯者序

\n


\n

前言

\n


\n

關(guān)于作者

\n


\n

關(guān)于審稿人

\n


\n

第1章 構(gòu)建和安裝LLVM  1

\n


\n

1.1 了解LLVM版本  1

\n


\n

1.2 獲取預(yù)構(gòu)建包  2

\n


\n

1.2.1 獲取官方預(yù)構(gòu)建二進(jìn)制文件  2

\n


\n

1.2.2 使用軟件包管理器  3

\n


\n

1.3 從源代碼構(gòu)建  4

\n


\n

1.3.1 系統(tǒng)要求  4

\n


\n

1.3.2 獲取源代碼  4

\n


\n

1.3.3 構(gòu)建和安裝LLVM  5

\n


\n

1.3.4 Windows和Microsoft Visual Studio  10

\n


\n

1.3.5 Mac OS X和Xcode  12

\n


\n

1.4 總結(jié)  14

\n


\n

第2章 外部項(xiàng)目  15

\n


\n

2.1 Clang外部項(xiàng)目介紹  15

\n


\n

2.1.1 構(gòu)建和安裝Clang外部工具  16

\n


\n

2.1.2 理解Compiler-RT  17

\n


\n

2.1.3 實(shí)驗(yàn)Compiler-RT  17

\n


\n

2.2 使用DragonEgg插件  18

\n


\n

2.2.1 構(gòu)建DragonEgg  19

\n


\n

2.2.2 使用DragonEgg和LLVM工具了解編譯流程  19

\n


\n

2.2.3 理解LLVM測(cè)試套件  20

\n


\n

2.2.4 使用LLDB  21

\n


\n

2.2.5 libc++標(biāo)準(zhǔn)庫(kù)介紹  23

\n


\n

2.3 總結(jié)  25

\n


\n

第3章 工具和設(shè)計(jì)  26

\n


\n

3.1 LLVM的基本設(shè)計(jì)原理及其歷史  26

\n


\n

3.2 理解目前的LLVM  27

\n


\n

3.3 與編譯器驅(qū)動(dòng)程序交互  29

\n


\n

3.4 使用獨(dú)立工具  30

\n


\n

3.5 深入LLVM內(nèi)部設(shè)計(jì)  33

\n


\n

3.5.1 了解LLVM的基本庫(kù)  33

\n


\n

3.5.2 介紹LLVM的C++慣例  34

\n


\n

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

\n


\n

3.6 編寫(xiě)你的第一個(gè)LLVM項(xiàng)目  38

\n


\n

3.6.1 編寫(xiě)Makefile  38

\n


\n

3.6.2 編寫(xiě)代碼  40

\n


\n

3.7 關(guān)于LLVM源代碼的一般建議  41

\n


\n

3.7.1 將代碼理解為文檔  42

\n


\n

3.7.2 請(qǐng)求社區(qū)的幫助  42

\n


\n

3.7.3 應(yīng)對(duì)更新:使用SVN日志作為文檔  42

\n


\n

3.7.4 結(jié)束語(yǔ)  44

\n


\n

3.8 總結(jié)  44

\n


\n

第4章 前端  45

\n


\n

4.1 Clang簡(jiǎn)介  45

\n


\n

4.1.1 前端操作  46

\n


\n

4.1.2 庫(kù)  47

\n


\n

4.1.3 理解Clang診斷  49

\n


\n

4.2 Clang前端階段介紹  52

\n


\n

4.2.1 詞法分析  52

\n


\n

4.2.2 語(yǔ)法分析  58

\n


\n

4.2.3 語(yǔ)義分析  63

\n


\n

4.2.4 生成LLVM IR代碼  65

\n


\n

4.3 完整的例子  65

\n


\n

4.4 總結(jié)  68

\n


\n

第5章 LLVM中間表示  69

\n


\n

5.1 概述  69

\n


\n

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

\n


\n

5.3 LLVM IR語(yǔ)法介紹  71

\n


\n

5.4 編寫(xiě)自定義的LLVM IR生成器  76

\n


\n

5.4.1 構(gòu)建和運(yùn)行IR生成器  79

\n


\n

5.4.2 使用C++后端編寫(xiě)代碼來(lái)生成IR構(gòu)造  80

\n


\n

5.5 在IR層執(zhí)行優(yōu)化  80

\n


\n

5.5.1 編譯時(shí)優(yōu)化和鏈接時(shí)優(yōu)化  80

\n


\n

5.5.2 發(fā)現(xiàn)最佳編譯器流程  82

\n


\n

5.5.3 流程間的依賴關(guān)系  83

\n


\n

5.5.4 了解流程API  85

\n


\n

5.5.5 自定義流程  85

\n


\n

5.6 總結(jié)  89

\n


\n

第6章 后端  90

\n


\n

6.1 概述  90

\n


\n

6.2 后端代碼結(jié)構(gòu)介紹  92

\n


\n

6.3 后端庫(kù)介紹  93

\n


\n

6.4 如何使用TableGen實(shí)現(xiàn)LLVM后端  94

\n


\n

6.4.1 TableGen語(yǔ)言  95

\n


\n

6.4.2 代碼生成器.td文件介紹  96

\n


\n

6.5 指令選擇階段介紹  100

\n


\n

6.5.1 SelectionDAG類  100

\n


\n

6.5.2 降級(jí)  102

\n


\n

6.5.3 DAG合并以及合法化  103

\n


\n

6.5.4 DAG到DAG指令選擇  104

\n


\n

6.5.5 指令選擇過(guò)程可視化  107

\n


\n

6.5.6 快速指令選擇  107

\n


\n

6.6 調(diào)度器  107

\n


\n

6.6.1 指令執(zhí)行進(jìn)程表  108

\n


\n

6.6.2 競(jìng)爭(zhēng)檢測(cè)  109

\n


\n

6.6.3 調(diào)度單元  109

\n


\n

6.7 機(jī)器指令  109

\n


\n

6.8 寄存器分配  110

\n


\n

6.8.1 寄存器合并器  111

\n


\n

6.8.2 虛擬寄存器重寫(xiě)  114

\n


\n

6.8.3 編譯目標(biāo)的信息  115

\n


\n

6.9 前序代碼和結(jié)束代碼  116

\n


\n

6.10  機(jī)器代碼框架介紹  116

\n


\n

6.10.1  MC指令  116

\n


\n

6.10.2  代碼輸出  117

\n


\n

6.11  自定義機(jī)器流程  119

\n


\n

6.12 總結(jié)  121

\n


\n

第7章 即時(shí)編譯器  122

\n


\n

7.1 LLVM JIT引擎的基礎(chǔ)知識(shí)介紹  122

\n


\n

7.1.1 介紹執(zhí)行引擎  123

\n


\n

7.1.2 內(nèi)存管理  124

\n


\n

7.2 llvm::JIT框架介紹  124

\n


\n

7.2.1 將二進(jìn)制大對(duì)象寫(xiě)入內(nèi)存  125

\n


\n

7.2.2 使用JITMemoryManager  125

\n


\n

7.2.3 目標(biāo)代碼輸出器  125

\n


\n

7.2.4 目標(biāo)信息  127

\n


\n

7.2.5 學(xué)習(xí)如何使用JIT類  127

\n


\n

7.3 llvm::MCJIT框架介紹  131

\n


\n

7.3.1 MCJIT引擎  131

\n


\n

7.3.2 MCJIT中模塊編譯過(guò)程  132

\n


\n

7.3.3 使用MCJIT引擎  135

\n


\n

7.4 使用LLVM JIT編譯工具  137

\n


\n

7.4.1 使用lli工具  137

\n


\n

7.4.2 使用llvm-rtdyld工具  138

\n


\n

7.5 其他資源  139

\n


\n

7.6 總結(jié)  139

\n


\n

第8章 跨平臺(tái)編譯  140

\n


\n

8.1 GCC和LLVM對(duì)比  140

\n


\n

8.2 目標(biāo)三元組介紹  141

\n


\n

8.3 準(zhǔn)備自己的工具鏈  142

\n


\n

8.3.1 標(biāo)準(zhǔn)C/C++庫(kù)  143

\n


\n

8.3.2 運(yùn)行時(shí)庫(kù)  143

\n


\n

8.3.3 匯編器和鏈接器  144

\n


\n

8.3.4 Clang前端  144

\n


\n

8.4 用Clang命令行參數(shù)進(jìn)行交叉編譯  145

\n


\n

8.4.1 針對(duì)目標(biāo)的驅(qū)動(dòng)程序選項(xiàng)  145

\n


\n

8.4.2 依賴包  145

\n


\n

8.4.3 交叉編譯  146

\n


\n

8.4.4 更改系統(tǒng)根目錄  148

\n


\n

8.5 生成Clang交叉編譯器  149

\n


\n

8.5.1 配置選項(xiàng)  149

\n


\n

8.5.2 構(gòu)建和安裝基于Clang的交叉編譯器  149

\n


\n

8.5.3 其他構(gòu)建方法  150

\n


\n

8.6 測(cè)試  151

\n


\n

8.6.1 開(kāi)發(fā)板  151

\n


\n

8.6.2 模擬器  151

\n


\n

8.7 其他資源  152

\n


\n

8.8 總結(jié)  152

\n


\n

第9章 Clang靜態(tài)分析器  153

\n


\n

9.1 靜態(tài)分析器的作用  153

\n


\n

9.1.1 傳統(tǒng)警告信息和Clang靜態(tài)分析器比較  153

\n


\n

9.1.2 符號(hào)執(zhí)行引擎的高效性  156

\n


\n

9.2 測(cè)試靜態(tài)分析器  158

\n


\n

9.2.1 使用驅(qū)動(dòng)程序與使用編譯器  158

\n


\n

9.2.2 了解可用的檢查器  158

\n


\n

9.2.3 在Xcode IDE中使用靜態(tài)分析器  160

\n


\n

9.2.4 生成HTML格式的圖形

\n


\n

9.2.5 處理大型項(xiàng)目  161

\n


\n

9.3 使用自定義的檢查器擴(kuò)展靜態(tài)分析器  164

\n


\n

9.3.1 熟悉項(xiàng)目架構(gòu)  164

\n


\n

9.3.2 自定義檢查器 

\n

......

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)