Релиз набора компиляторов GCC 12

После года разработки опубликован релиз свободного набора компиляторов GCC 12.1, первый значительный выпуск в новой ветке GCC 12.x. В соответствии с новой схемой нумерации выпусков, версия 12.0 использовалась в процессе разработки, а незадолго до выхода GCC 12.1 уже ответвилась ветка GCC 13.0, на базе которой будет сформирован следующий значительный релиз GCC 13.1. 23 мая проект будет отмечать 35 лет с момента формирования первого выпуска GCC.

Основные изменения:

  • Добавлена поддержка отладочного формата CTF (Compact Type Format), обеспечивающего компактное хранение сведений о Си-типах, связях между функциями и отладочных символах. При встраивании в ELF-объекты формат позволяет использовать таблицы символов EFL для избежания дублирования данных.

  • Объявлена устаревшей поддержка формата хранения отладочной информации «STABS», созданного в 1980-е годы.

  • Продолжена работа по расширению поддержки будущих стандартов C2X и C++23 для языков C и C++.

  • В стандартной библиотеке C++ улучшена поддержка экспериментальных разделов стандартов C++20 и C++23.

  • Во фронтэнде для языка фортран предоставлена полная поддержка спецификации TS 29113, описывающей возможности по обеспечению переносимости между кодом на языках Fortran и C.

  • Добавлена поддержка расширения __builtin_shufflevector (vec1, vec2, index1, index2, …), ранее добавленного в Clang и предлагающего единый вызов для выполнения общих векторных операций перестановки и перетасовки.

  • При использовании уровня оптимизации »-O2» по умолчанию включено применение векторизации (включены режимы -ftree-vectorize и -fvect-cost-model=very-cheap). Модель «very-cheap» допускает векторизацию только если векторный код может полностью заменить векторизируемый скалярный код.

  • Добавлен режим »-ftrivial-auto-var-init» включающий явную инициализацию переменных в стеке для отслеживания проблем и блокирования уязвимостей, связанных с использованием неинициализированных переменных.

  • Для языков C и C++ добавлена встроенная функция __builtin_dynamic_object_size для определения размера объекта, совместимая с аналогичной функцией из Clang.

  • В бэкенд генерации кода для архитектуры x86 добавлена поддержка инструкций AVX512-FP16 для типа _Float16.

  • Для архитектуры x86 добавлена защита от уязвимостей в процессорах, вызванных спекулятивным выполнением инструкций после операций безусловного прямого перехода. Проблема возникает из-за упреждающей обработки инструкций, следующих в памяти сразу за командой перехода (SLS, Straight Line Speculation). Для включения защиты предложена опция »-mharden-sls».

  • В экспериментальный статический анализатор добавлено определение использования неинициализированных переменных.

  • В бэкенд для генерации байткода BPF добавлена поддержка механизма CO-RE (Compile Once — Run Everywhere), позволяющего собирать код eBPF-программ для ядра Linux только один раз и использовать специальный универсальный загрузчик, адаптирующий загружаемую программу к текущему ядру и типам BTF (BPF Type Format). CO-RE решает проблему с переносимостью скомпилированных eBPF-программ, которые ранее могли использоваться только в той версии ядра, для которой были собраны, так как позиция элементов в структурах данных меняется от версии к версии.

  • В бэкенде для архитектуры RISC-V добавлена поддержка новых расширений архитектуры набора команд zba, zbb, zbc и zbs, а также ISA-расширений для векторных и скалярных криптографических операций. По умолчанию обеспечена поддержка спецификации RISC-V ISA 20191213. Добавлен флаг -mtune=thead-c906, включающий оптимизации для ядер T-HEAD c906.

  • Добавлен новый режим проверки »-fsanitize=shadow-call-stack» (ShadowCallStack), который пока доступен только для архитектуры AArch64 и работает при сборке кода с опцией »-ffixed-r18». Режим обеспечивает защиту от перезаписи адреса возврата из функции в случае переполнения буфера в стеке. Суть защиты в сохранении после передачи управления функции адреса возврата в отдельном «теневом» стеке и извлечении данного адреса перед выходом из функции.



Источник: http://www.opennet.ru/opennews/art.shtml? num=57145

© OpenNet