Сочетание флагов сборки привело к сбою в Firefox

Инженеры провели расследование сбоя в дистрибутивной сборке Firefox и выяснили, что причиной стала некорректная инициализация локали в коде на C++ из‑за особенностей связывания символов.

Несогласованное состояние

В затронутой конфигурации библиотека libstdc++ была статически включена в несколько модулей. В сочетании с параметром компоновщика -Bsymbolic-functions это привело к неоднородному связыванию функций и переменных: часть экспортируемого состояния становилась общей, тогда как функции обращались к собственным неэкспортируемым данным модулей.

В результате одна часть кода считала инициализацию локали завершённой, а другая пыталась использовать объект, который не был корректно подготовлен, что вызвало сбой.

Почему важна конфигурация

Изменение способа подключения libstdc++ в пакете позволило устранить проблему в этой сборке. Аналогичная сигнатура в другой дистрибутивной сборке помогла обнаружить родственную проблему компоновки.

Этот случай демонстрирует необходимость проверять совместное действие флагов компоновщика и способов включения библиотек. Это не означает, что статическая компоновка всегда неверна или что следует удалять параметры из сборки без воспроизведения и анализа конкретной причины.