Wild 0.10

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

1000px.jpg

4 августа состоялся выпуск Wild 0.10 — свободного компоновщика, написанного на Rust и предназначенного прежде всего для быстрой сборки программ в Linux. Компоновщик выполняет заключительный этап сборки: объединяет объектные файлы и библиотеки в готовый исполняемый файл или разделяемую библиотеку. Wild может использоваться как замена GNU ld, LLD и Mold, хотя заявленная разработчиками конечная цель — инкрементальная компоновка — пока не реализована.

Одним из главных новшеств стала поддержка параметров --gdb-index и --no-gdb-index. При включении этой возможности Wild создаёт в выходном файле секцию .gdb_index с индексом отладочной информации. Благодаря этому GDB может быстрее находить необходимые символы в крупных программах, не формируя индекс отдельно после сборки. Реализация поддерживает девятую версию формата GDB Index; операции сканирования, объединения и записи индекса были распараллелены.

Значительно расширена работа со сценариями компоновщика. Добавлена поддержка:

  • секции /DISCARD/ для исключения ненужных входных секций;
  • пользовательских заголовков программ PHDRS;
  • функций SIZEOF_HEADERS, DEFINED и SEGMENT_START;
  • ключевого слова AT и функции LOADADDR;
  • условных выражений с тернарным оператором;
  • команд SORT, SORT_BY_NAME и SORT_BY_ALIGNMENT;
  • символа __bss_start;
  • шаблонов заполнения выходных секций;
  • команд OUTPUT_FORMAT и OUTPUT_ARCH;
  • нескольких относительных счётчиков текущего адреса.

Полная совместимость с GNU ld пока не достигнута. Например, часть возможностей команды MEMORY, секции OVERLAY и некоторые способы размещения секций остаются незавершёнными. Разработчики отдельно ведут таблицу возможностей, необходимых для компоновки ядра Linux.

Улучшена производительность при размещении результатов сборки на Btrfs и VFAT. Wild теперь автоматически использует режим --no-mmap-output-file и не отображает выходной файл в память через mmap. В проведённом разработчиком испытании компоновки Zed на Btrfs время сократилось примерно с 2,6–2,8 до 1,5–1,8 секунды. При этом автор изменения предупреждает, что даже после оптимизации Btrfs в данном сценарии остаётся значительно медленнее tmpfs; для Ext4 и XFS использование mmap, напротив, оказалось выгоднее.

Продолжается перенос Wild на другие форматы и платформы. Экспериментальная версия для WebAssembly уже способна компоновать ряд программ, а порт для Mach-O — простейшие исполняемые файлы. Начата работа над 32-разрядными целевыми платформами, что в дальнейшем должно упростить применение Wild в разработке встраиваемых систем. Также добавлена начальная обработка объектных файлов PowerPC64 ELFv2 и продолжено развитие поддержки Mach-O, включая универсальные объектные файлы и прямую компоновку с динамическими библиотеками. Эти порты пока не следует считать готовыми для повседневного использования.

Библиотечный вариант компоновщика libwild теперь может получать входные файлы и сохранять результат непосредственно в памяти. Это позволяет другим программам встраивать Wild без обязательного создания промежуточных файлов на диске. Кроме того, библиотека больше не переопределяет глобальный пул потоков Rayon, а поддержку сжатия Zstandard можно отключить во время сборки.

В релиз вошло множество исправлений для x86–64, AArch64, RISC-V и LoongArch64. Устранены ошибки обработки TLS, PLT, LTO, сжатой отладочной информации, больших выравниваний и перемещений в PIE- и разделяемых объектах. Исправлены возможные аварийные завершения при разборе сценариев компоновщика и ошибки формирования секций .tbss, .strtab и .eh_frame.

Wild поддерживает Linux на архитектурах x86–64, AArch64 и RISC-V; поддержка LoongArch64 и PowerPC64LE пока обозначена как начальная. Установить компоновщик можно из готовых архивов, через cargo-binstall, Homebrew, Nix или командой cargo install --locked wild-linker. Исходный код распространяется на выбор пользователя под лицензиями Apache 2.0 или MIT.

>>> Источник

©  Linux.org.ru



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