Copyright (慣C) 2018 宅色夫
AMaCC 是由台灣國立成功大學師生開發的 self-compiling 的 C 語言編譯器,可產生 Arm 架構的執行檔 (ELF 格式,運作於 GNU/Linux)、也支援 just-in-time (JIT) 編譯和執行,原始程式碼還不到 1500 行,在本次講座中,我們揭開 AMaCC 背後的原理和實作議題。
預期會接觸到 IR (Intermediate representation), dynamic linking, relocation, symbol table, parsing tree, language frontend, Arm 指令編碼和 ABI 等等。
在 COSCUP 2018 的演講 用1500 行建構可自我編譯的 C 編譯器
$ file amacc
amacc: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=25cce9ff5ec975579eed9f890511f1c2bd64610d, with debug_info, not stripped
依據 IBM 的簡報指出: [ source ]
自動駕駛車的軟體規模預計會百倍於飛行控制系統,而開發階段所必須投入發展的軟體驗證環境和方法對開發都至關重大。韓國的 Hyundai Mobis 計畫與 KAIST 合作開發 MAIST,著眼於後續自駕車的軟體性能及成本的影響非常龐大。
IEEE 1012: 安全相關應用軟體開發
IEC 61508-3: 以每小時危險失效率 (PFH) 或失效危險機率 (PFD) 的形式訂立許多可靠度要求
C 語言程式解析後,會轉為 opcode,可透過 interpreter 執行,或者:
Interpreter, Compiler, JIT from scratch
AMaCC 的 -s
命令列選項可輸出 IR:
針對 Arm 架構的 JIT 執行:
搭配閱讀 How to JIT - an introduction
JIT compiler 的效益: How to write a very simple JIT compiler