Опубликован выпуск компоновщика Mold, который может применяться в качестве более быстрой прозрачной замены GNU linker на Linux-системах. Проект развивает автор компоновщика LLVM lld. Ключевой особенностью Mold является очень высокая скорость связывания объектных файлов, заметно опережающая компоновщики GNU gold и LLVM lld (компоновка в Mold выполняется со скоростью, всего в два раза медленнее простого копирования файлов утилитой cp). Код написан на языке С++ (C++20) и распространяется под лицензией AGPLv3.
В новой версии:
- Добавлена поддержка оптимизации на этапе связывания (LTO, Link Time Optimization). LTO-оптимизации отличаются учётом состояния всех файлов, участвующих в процессе сборки в то время, как традиционные режимы оптимизации оптимизируют каждый файл по отдельности и не учитывают условия вызова функций, определённых в других файлах. Если раньше при обнаружении файлов с промежуточным кодом (IR) GCC или LLVM вызывались соответствующие компоновщики ld.bfd или ld.lld, то теперь Mold обрабатывает IR-файлы самостоятельно и использует Linker Plugin API, также применяемый в компоновщиках GNU ld и GNU gold. Скорость при включении LTO лишь незначительно опережает другие компоновщики, так как основное время тратится на выполнение оптимизации кода, а не компоновку.
- Добавлена поддержка архитектуры RISC-V (RV64) на стороне хоста и целевых платформ.
- Добавлена опция “–emit-relocs” для включения режима копирования секций перемещений адресов (relocation) из входных файлов в итоговые для последующего применения оптимизаций на этапе после связывания.
- Добавлена опция “–shuffle-sections” для рандомизации порядка следования секций до фиксации их адресов в виртуальном адресном пространстве.
- Добавлены опции “–print-dependencies” и “–print-dependencies=full” для вывода в формате CSV информации о зависимостях между входными файлами, что, например, можно использовать для анализа причин подключения при компоновке определённых объектных файлов или при проведении работы по минимизации зависимостей между файлами.
- Добавлены опци “–warn-once” и “–warn-textrel”.
- Исключена зависимость от libxxhash.
Release.
Ссылка here.