136 (2025-04-09) Исправлена ошибка в addon-toolchain, приводившая к компоновке с системной libc, если в качестве директории для поиска библиотек (с помощью -L) была передана директория, содержащая компоненты libc.
Этот патч не меняет поведение в случае, если компонента libc передана явно (в строке компиляции указан полный путь до библиотеки). В таком случае будет произведена компоновка с этой библиотекой, что может привести к ошибке компоновки.
133 (2025-03-24) Исправлена выдача диагностики о выходе за границы массива (
-Warray-bounds
) при использовании-Safe2
: вместо предупреждения теперь диагностируется ошибка. Ошибка была вызвана патчем #add-wextra-array-bounds.122 (2024-11-21) Исправлен некорректный запрет
gets
в случае, если до#include stdio.h
словоgets
определяется как макрос (например:#define gets my_gets
).Ошибка проявлялась следующим образом:
- Запрет срабатывал на
my_gets
вместоgets
. - Cнятие определения макроса (
#undef gets
) после#include <stdio.h>
приводило к обходу запретаgets
при его использовании ниже.
Теперь такой макрос отключается (
#undef gets
) внутри собственных fortify headers.- Запрет срабатывал на
119 (2024-11-21) Исправлена ошибка собственных fortify headers, встретившаяся в libtar. Ошибка заключалась в некорректной обработке функций
[v]snprintf
с-std=c89
. Эти функции были добавлены cо стандарта C99, что не было должным образом учтено в заголовочных файлах. Это приводило к их неявному объявлению и, как следствие, к потенциальному неопределенному поведению.118 (2024-11-12) Исправлено поведение ThreadSanitizer при выводе summary: санитайзер ранее не распознавал стековые фреймы, порождённые вызванными из libtsan функциями, как внутренние, вследствие чего некорректно выводилось место ошибки.
117 (2024-11-07) Исправлен ICE
-Wclobbered
, встретившийся в Boost, вызванный некорректной инструментацией UndefinedSanitizer, вследствие которой вызовsetjmp
находился не на первом месте в базовом блоке.116 (2024-11-06) Исправлен ICE
-Wclobbered
, встретившийся в LXC. Причиной является неожиданная оптимизация, в ходе которой атрибутreturns_twice
был утерян после инлайнинга функции.114 (2024-10-29) В конфигурацию сборки добавлен флаг
--enable-checking=release
, отключающий внутренние проверки компилятора, предназначенные для разработчиков.113 (2024-09-27) Обновлены binutils до 2.41 и glibc до 2.40.
109 (2024-09-20) Добавлена новая опция
--print-safe-options=<level>
, которая распечатывает набор опций безопасного компилятора, эквивалентный опции-Safe<level>
. (*)Эта опция помогает оценить сложность перехода на использование полноценного безопасного компилятора класса
level
. Также она позволяет минимизировать комбинацию опций при отладке проблем.(*): Получаемый набор опций имеет следующие отличия от
-Safe<level>
.-
Не используется механизм, запрещающий отключение отдельных опций.
Благодаря этому можно оценить общее число проблем, выявляемых безопасным компилятором заданного класса на кодовой базе. При использовании самих
-Safe
-опций остановка трансляции или выполнения не позволяет увидеть все проблемные места сразу. -
Допускается понижение классов предупреждений (например, error до warning) для отдельного файла или функции через прагмы
pragma GCC diagnostic
. -
В него не входят флаги, передаваемые компоновщику.
В этой версии распечатка не включает флаги, передаваемые компоновщику. Поэтому для эмуляции поведения
-Safe1
нужно передать дополнительные опции либо выполнить фазы компиляции и линковки отдельными командами:gcc -c -O2 $(gcc --print-safe-options=1) foo.c bar.c && gcc -O2 -Safe1 foo.o bar.o
-
105 (2024-06-04) Исправлена ошибка в работе опции
--dump-sbom
в C++. В этом сценарии в выходном JSON содержимое поляdependencies
было пустым вне зависимости от наличия подключаемых заголовочных файлов.104 (2024-05-31) Исправлено ложное срабатывание
-fsanitize=function
(входит в-Safe1
), встретившееся на QEMU.103 (2024-04-16) Исправлена работа опции
--dump-sbom
при использовании режима препроцессирования без компиляции. В этом сценарии выходной JSON не содержал поляdependencies
.102 (2024-03-14) Предупреждения, контролируемые опцией
-Warray-bounds
в прошлых версиях безопасного компилятора, разбиты на две группы. Часть предупреждений вынесена под опцию-Wextra-array-bounds
.Первая группа теперь включает только срабатывания
-Warray-bounds
компилятора GCC соответствующей версии. Поведение, контролируемое опцией-Warray-bounds
безопасного компилятора, приведено в соответствие с одноимённой опцией GCC.Во вторую группу вынесены дополнительные срабатывания, реализованные ранее в безопасном компиляторе. Для управления предупреждениями второй группы добавлена опция
-Wextra-array-bounds
.Предупреждения, контролируемые новой опцией, по-прежнему включены в набор предупреждений
-Safe3
и более высоких классов защищённости. Однако теперь они не приводят к остановке трансляции, если опция-Werror=extra-array-bounds
не указана явно.UPD: данное изменение содержало ошибку, исправленную в #fix-safe2-warray-bounds.
101 (2024-03-07) В скрипт
comp_db_parser
добавлена опция--format {all, infiles}
, благодаря которой можно настроить выходные данные: распечатать информацию обо всех исходных файлах, вошедших в программу (all
), или только о файлах, непосредственно переданных как аргументы командной строки компилятора (infiles
).98 (2023-12-13) Добавлена возможность генерации детального SBoM (Software Bill of Materials) с помощью опции
--dump-sbom
. SBoM содержит информацию о компонентах компиляции, зависимостях, конфигурациях и результирующих выходных файлах.