После года разработки Выпущен пакет сборки GCC 12.1, первый значительный выпуск в новой ветке GCC 12.x.
По новой схеме нумерации версий при разработке использовалась версия 12.0, а незадолго до выпуска GCC 12.1 уже была разветвлена ветка GCC 13.0, из которой будет сформирована следующая мажорная версия GCC 13.1.
GCC 12.1 Основные новые функции
В представленной новой версии подчеркивается, чтодобавлена поддержка формата отладки CTF, который обеспечивает компактное хранение информации о типах C, отношениях между функциями и символах отладки. При внедрении в объекты ELF формат позволяет использовать таблицы символов EFL, чтобы избежать дублирования данных.
В дополнение к этому отмечается, что продолжается работа по расширению поддержки будущих стандартов C2X и C++23 для C и C++. и что также совместимость с экспериментальные разделы стандартов C++20 и C++23 были улучшены в стандартной библиотеке С++.
Для архитектуры x86, добавлена дополнительная защита от уязвимостей процессора, вызванных спекулятивным выполнением инструкций после безусловных операций перехода вперед. Проблема возникает из-за упреждающей обработки инструкций, непосредственно следующих за инструкцией перехода в памяти (SLS, Straight Line Speculation). Для включения защиты предлагается параметр «-mharden-sls».
Также подчеркивается, что добавлено определение для использования неинициализированных переменных к экспериментальному статическому анализатору. Добавлена начальная поддержка разбора ассемблерного кода во встроенных вставках. Улучшено отслеживание памяти. Переписан код для обработки выражений изменения.
Были добавлены 30 новых вызовов libgccjit, общая библиотека для встраивания генератора кода в другие процессы и использования его для JIT-компиляции байт-кода в машинный код.
С другой стороны, подчеркивается, что поддержка механизма CO-RE (Compile Once — Run Everywhere) в серверную часть для генерации байт-кода BPF, который позволяет компилировать код программ eBPF для ядра Linux только один раз и использовать специальный универсальный загрузчик, который адаптирует загружаемую программу под текущее ядро и типы BTF (формат типа BPF). CO-RE решает проблему с переносимостью скомпилированных программ eBPF, которые раньше можно было использовать только в той версии ядра, для которой они были собраны, поскольку положение элементов в структурах данных варьируется от версии к версии.
был добавлен в Базовая поддержка RISC-V для новых расширений архитектуры наборов инструкций zba, zbb, zbc и zbs, а также расширения ISA для векторных и скалярных криптографических операций. Поддержка спецификации RISC-V ISA 20191213 предоставляется по умолчанию. Добавлен флаг -mtune=thead-c906 для включения оптимизации для ядер T-HEAD c906.
Добавлено поддержка типа __int128_t/integer(kind=16) в серверную часть генерации кода для графических процессоров AMD на основе микроархитектуры GCN. Можно использовать до 40 рабочих групп на вычислительную единицу (CU) и до 16 фронтов инструкций (wavefront, набор потоков, выполняемых SIMD Engine параллельно) на группу. Раньше разрешалось только одно ребро инструкции на CU.
Индикаторы «-march», «-mptx» и «-march-map» были добавлены в серверную часть NVPTX., предназначенный для генерации кода с использованием архитектуры набора инструкций NVIDIA PTX (Parallel Thread Execution). Реализована поддержка PTX ISA sm_53, sm_70, sm_75 и sm_80. Архитектура по умолчанию — sm_30.
В дополнение к этому подчеркивается, что исправлена проблема, из-за которой компилятор выполнял неквалифицированный поиск выражения зависимого оператора во время определения шаблона, а не во время создания экземпляра. Это решение соответствует существующему поведению для выражений зависимого вызова.
Стоит отметить, что 23 мая проекту исполнится 35 лет со дня образования первого релиза GCC. Окончательно если вам интересно узнать об этом больше, вы можете проверить подробности По следующей ссылке.