mold 2.42.0

2 часов назад 2

1000px.jpg

После четырёх месяцев разработки состоялся выпуск 2.42.0 высокопроизводительного кроссплатформенного линкера mold.

Проект написан на языке C++ (стандарт C++20) и распространяется по лицензии MIT.

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

  • произведено множество оптимизаций всего линкера — эта версия должна работать заметно быстрее, чем предыдущие версии, особенно при компоновке крупных программ на машинах с большим количеством ядер;
  • добавлена поддержка параметров --pack-dyn-relocs=android и --pack-dyn-relocs=android+relr. Эти параметры кодируют динамические релокации в формате упакованных релокаций Android (APS2), что значительно уменьшает размер таблицы динамических релокаций бинарных файлов Android;
  • --compress-debug-sections теперь принимает параметр уровня сжатия, например zstd:9 или zlib:6. Простые значения zstd и zlib по-прежнему соответствуют zstd:3 и zlib:1 соответственно — это были прежние, жёстко заданные значения по умолчанию;
  • добавлена поддержка параметров -w и --no-warnings. Они подавляют вывод предупреждений и отменяют действие опции --fatal-warnings, при этом о реальных ошибках по-прежнему выдаются сообщения. Это соответствует поведению lld;
  • добавлена поддержка опции -Ttext-segment, которая задаёт адрес первого байта текстового сегмента, для обеспечения совместимости с GNU ld;
  • добавлена поддержка формата развёртки стека SFrame версии 3 — компактной альтернативы формату .eh_frame, используемого профилировщиками и отладчиками для асинхронной развёртки стека. Начиная с версии binutils 2.46, ассемблер GNU генерирует SFrame версии 3 при указании флага --gsframe, поэтому объектные файлы, содержащие секции .sframe, становятся всё более распространёнными. Секции .sframe нельзя рассматривать как непрозрачные байты; mold анализирует входные секции .sframe, отбрасывает записи для функций, удалённых с помощью флагов --gc-sections или --icf, и воссоздаёт единую объединённую секцию, отсортированную по адресам функций, вместе с сегментом PT_GNU_SFRAME, чтобы среда выполнения могла её найти. Также поддерживается переразмещаемый вывод (-r);
  • теперь mold по умолчанию удаляет временные локальные символы, такие как .L.str.42, так же, как это делает lld. Компиляторы генерируют большое количество таких символов для безымянных элементов программы, но они являются внутренними для компилятора; ничто не ссылается на них через таблицу символов, а отладочная информация обращается к их данным по смещению в секции. Их удаление позволяет уменьшить размер больших отладочных сборок на несколько процентов и исключить внутренние метки компилятора из символизированных адресов. Новый параметр --discard-none восстанавливает прежнее поведение. Параметры -r и --emit-relocs по-прежнему сохраняют все локальные символы;
  • для сборки mold теперь требуется библиотека mimalloc версии 3. По умолчанию mold компилируется и статически линкуется со входящей в исходные тексты mimalloc версии 3.4.5. Для использования системной библиотеки mimalloc можно использовать параметр CMake -DMOLD_USE_SYSTEM_MIMALLOC=ON;
  • исправлено большое количество обнаруженных ошибок и улучшена совместимость.

>>> Подробности на GitHub

©  Linux.org.ru



Прочитайте статью целиком