官术网_书友最值得收藏!

1.3 LLVM構建與調試

本書涉及的后端架構、Pass和算法都是以LLVM 15為基礎的,具體代碼可以從github.com/llvm-project處直接下載,筆者維護了鏡像https://github.com/inside-compiler/llvm-project,讀者也可以直接通過該鏡像獲得源碼。

LLVM構建比較簡單,讀者可以參考官方項目中的構建說明進行操作,構建完成后就可以使用GDB或者LLDB進行調試,這里僅做一個簡單的介紹。下面以筆者使用的macOS環境為例介紹構建和調試工作。

1)環境準備:在macOS上構建LLVM需要安裝開發套件CMake、git等。

2)下載代碼:通過git clone,從https://github.com/inside-compiler/llvm-project鏡像下載代碼。該項目分支會默認切換到LLVM 15,讀者無須再次切換。

3)構建代碼:按照構建說明進行構建。本書主要以BPF后端為例進行說明,為了加快構建速度,可以通過命令行參數LLVM_TARGETS_TO_BUILD僅構建BPF后端。構建LLVM工程使用的命令如代碼清單1-1所示。

代碼清單1-1 構建LLVM工程使用的命令

cd llvm-project //進入當前代碼倉

mkdir build   //創建build目錄

cd build     //進入build目錄,構建過程中的中間文件和結果都放在該目錄中

cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD=BPF

-DLLVM_ENABLE_PROJECTS="clang" ../llvm  //生成makefile文件

make -j 32  //使用32線程進行并行構建

4)驗證:構建完成后,相應的可執行文件位于build/bin目錄下。以llc命令為例,執行llc --version可以得到如代碼清單1-2所示的結果。

代碼清單1-2 驗證結果

LLVM (http://llvm.org/):

    LLVM version 15.0.1

    DEBUG build with assertions.

    Default target: arm64-apple-darwin22.5.0

    Host CPU: cyclone


    Registered Targets:

      bpf  - BPF (host endian)

      bpfeb - BPF (big endian)

      bpfel - BPF (little endian)

5)調試:開發者可以使用lldb調試llc,設置斷點并運行測試。例如,為了驗證尾代碼合并的功能,通過b TailDuplicateBase::runOnMachineFunction命令為函數設置斷點,同時設置lldb運行參數settings set -- target.run-args -debug -tail-dup-size=10 test.ll[4],然后執行run命令即可。關于lldb更多使用方法可以參考lldb使用文檔。lldb調試命令示例如代碼清單1-3所示:

代碼清單1-3 LLDB調試命令示例

(lldb) target create "../llvm-project/build/bin/llc"

Current executable set to

    '/Users/ryanpeng/Project/llvm-project/build/bin/llc' (arm64).

(lldb) b TailDuplicateBase::runOnMachineFunction

Breakpoint 1: where=llc`(anonymous namespace)::TailDuplicateBase::runOnMachin

    eFunction(llvm::MachineFunction&) + 28 at TailDuplication.cpp:84:20, address=

    0x00000001011c9114

(lldb) settings set -- target.run-args -debug -tail-dup-size=10 test.ll

(lldb) run

主站蜘蛛池模板: 鄂州市| 琼结县| 松阳县| 两当县| 日土县| 丘北县| 红安县| 靖宇县| 化德县| 江川县| 美姑县| 延吉市| 睢宁县| 定西市| 博爱县| 亚东县| 金乡县| 舟曲县| 龙门县| 靖宇县| 韶关市| 彰化市| 大港区| 云和县| 凤翔县| 彰化县| 泊头市| 柏乡县| 瑞安市| 辰溪县| 琼海市| 永平县| 呼图壁县| 普陀区| 中方县| 句容市| 元氏县| 轮台县| 二手房| 台北县| 青海省|