編譯器
GCC 14.3
glibc 和 musl 的主要 toolchain。GCC 15 把 -mabi=ilp32 列為淘汰(GCC 16、17 仍保留,只會顯示警告),
所以我們維持使用 GCC 14:我們自己的 toolchain 是 14.3,Debian 套件用的是 Debian 的 14.2。我們所有的 toolchain
都包含一個 libgcc 修正,讓 C++ exception 和 backtrace 能正確穿過被 clang 的 pac-ret 簽章過的函式。
toolchain 腳本:test-ilp32。
clang 22
上游 LLVM 只部分支援 GNU ILP32:clang 前端一直沒有完成,後端傳遞指標的方式也跟 GCC 不相容。我們的 patch 讓 clang 能編譯
aarch64-linux-gnu_ilp32 和 aarch64-linux-musl_ilp32,與 GCC 編的程式互通,並省掉許多不必要的指標延伸。
clang 也能為 ILP32 做返回位址簽章(-mbranch-protection=pac-ret),GCC 做不到。
- 連結要用 GNU ld;lld 不支援 ILP32。
- runtime 用 GCC 的函式庫(libgcc、libstdc++)。
- 使用 ThinLTO 時,維持預設的 import 上限即可:
-import-instr-limit=30只省 1–2% 的記憶體,卻會慢 1–1.3%。
patch、編譯方式與量測:github.com/ilp32-a64/llvm-ilp32。