Programmieren: 35 Jahre GCC – Version 12.1 schneidet alte STABS-Zöpfe ab
![](https://heise.cloudimg.io/width/700/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/3/5/3/6/7/3/4/gnu-77e07d3e54fbbaa5.jpeg)
Zum 35. Geburtstag räumt das neue GCC-Release auf: Ein älteres Debugging-Format landet beim Alteisen und die Interoperabilität mit Fortran ist erneut ausgebaut.
35 Jahre ist es her, seit die GNU Compiler Collection (GCC) in Version 1.0 erschienen ist, damals noch unter der Bezeichnung GNU C Compiler. Eine Tradition hält sich seither robust: Seit 1987 beschert das Frühjahr der Community alljährlich eine neue große GCC-Ausgabe, und Version 12.1 ist als erstes stabiles Release der Serie 12.x nun pünktlich erschienen.
Neues Debugging-Format CTF löst STABS ab
Das Release verwirft das STABS-Debugging-Format als veraltet (deprecated), mit dem nächsten Release wird STABS komplett entfallen und als Ersatz führt GCC 12.1 mit dem Compact Type Format (CTF) nun ein neues Debugging-Format ein. Informationen dazu sind in einem GitHub-Repository von Oracle greifbar [1], das binutils und gpb zur Linux-Toolchain enthält. Die GCC-Entwickler haben die Kompatibilität mit den C- und C++-Frontends weiter ausgebaut, da beides sich im Laufe des letzten Jahres ebenfalls weiterentwickelt hat. Hierbei war insbesondere die Unterstützung für Funktionen der kommenden C-2x- und C++23-Standards zentral.
Zudem hatte das Entwicklungsteam für GCC 12.1 im Blick, dass die C++-Standardbibliothek die Unterstützung für die experimentellen Teile von C++20 und C++23 überarbeitet hat – auch diese Neuerungen finden im Release laut der Ankündigung via Mailingliste Berücksichtigung.
GCC 12.1 unterstützt Sanitizer ShadowCallStack
Das neue Release unterstützt den ShadowCallStack Sanitizer, der sich mit der Kommandozeilenoption -fsanitize=shadow-call-stack
aktivieren lässt. Der Sanitizer funktioniert zurzeit nur auf Zielen der AArch64-Architektur und benötigt eine Umgebung, in der der gesamte Code mit -ffixed-r18
kompiliert ist. Der Sanitizer ist primär auf den Linux-Kernel ausgelegt, der laut Release Notes auch sein ursprünglicher Erstnutzer ist.
Insgesamt bringt das Release zwar keine großen Neuerungen und setzt eher kleine Glanzlichter, es berücksichtigt aber, dass das Frontend der imperativen, prozeduralen und seit 2003 auch objektorientierten Programmiersprache Fortran nun gemäß technischer Spezifikation (TS) die Interoperabilität mit C vollständig unterstützt. Fortran ist für numerische Berechnungen optimiert und kommt insbesondere in Technik und Forschung zum Einsatz. Version 12.1 der GNU Compilersammlung soll Clangs __builtin_shufflevector
-Erweiterung und die gemeinsame Nutzung von generischem Vektorcode erleichtern.
Beginnend mit GCC 12.x ist eine optimierte Vektorisierung standardmäßig aktiv. Laut Release Notes entspricht dabei die Optimierungsebene -o2
nun der bisherigen Ebene -O2 -ftree-vectorize -fvect-cost-model=very-cheap
. Zudem sollen zusätzliche Beschränkungen für die Erweiterung der Codegröße greifen, was sich laut Herausgebern wohl insgesamt günstig auf die Compiler-Performance auswirkt.
Lesen Sie auch
C++17: GCC, Clang und MSVC im Vergleich
Weiterführende Hinweise
Weitere Neuerungen betreffen unter anderem sprachspezifische Änderungen für C, C++, Fortran, aber auch Ada, eine Sprache insbesondere für sicherheitskritische Anwendungen unter anderem in der Luft- und Raumfahrt. Die gesamten Änderungen lassen sich im Detail in den Change Notes bei GNU nachlesen [2], und eine Releasemeldung hat über die GCC-Mailingliste [3] als Kurzfassung die Runde gemacht. Interessierte können die neue GCC-Version bei Sourceware direkt herunterladen [4]. Anfang Mai 2022 war im gleichen Releasezyklus bereits der GNU Debugger 12.1 mit erweiterter Anbindung für LoongArch und OpenRISC [5] erschienen.
(sih [6])
URL dieses Artikels:
https://www.heise.de/-7079988
Links in diesem Artikel:
[1] https://github.com/oracle/binutils-gdb/wiki
[2] https://gcc.gnu.org/gcc-12/changes.html
[3] https://gcc.gnu.org/pipermail/gcc/2022-May/238653.html
[4] https://sourceware.org/pub/gcc/releases/gcc-12.1.0/
[5] https://www.heise.de/news/GNU-Debugger-12-1-erweitert-Anbindung-fuer-LoongArch-und-OpenRISC-7072521.html
[6] mailto:sih@ix.de
Copyright © 2022 Heise Medien