Compiler
GCC 14.3
Die Haupt-Toolchain für glibc und musl. GCC 15 hat -mabi=ilp32 als veraltet markiert (in GCC 16
und 17 mit Warnung noch vorhanden), daher bleiben wir bei GCC 14 (14.3 für unsere Toolchains, Debians 14.2 für
die Debian-Pakete). Alle unsere Toolchains enthalten eine libgcc-Korrektur, damit das Unwinding durch Funktionen
funktioniert, die mit clangs pac-ret signiert sind (C++-Ausnahmen, Backtraces).
Toolchain-Skripte: test-ilp32.
clang 22
Upstream-LLVM unterstützt GNU ILP32 nur teilweise: Das clang-Frontend wurde nie fertiggestellt, und das Backend
übergibt Zeiger auf eine Weise, die nicht mit GCC kompatibel ist. Mit unseren Patches übersetzt clang
aarch64-linux-gnu_ilp32 und aarch64-linux-musl_ilp32, kompatibel mit GCC-gebautem Code,
und viele unnötige Zeigererweiterungen fallen weg. clang kann für ILP32 außerdem Rücksprungadressen signieren
(-mbranch-protection=pac-ret), was GCC nicht kann.
- Mit GNU ld linken; lld unterstützt ILP32 nicht.
- Die Laufzeitbibliotheken von GCC verwenden (libgcc, libstdc++).
- Bei ThinLTO das voreingestellte Import-Limit beibehalten:
-import-instr-limit=30spart nur 1–2 % Speicher und kostet 1–1,3 % Geschwindigkeit.
Patches, Build und Messungen: github.com/ilp32-a64/llvm-ilp32.