Wydanie linkera Mold 1.1, opracowanego przez LLVM lld

Opublikowano wersję linkera Mold, którego można używać jako szybszego i przejrzystego zamiennika linkera GNU w systemach Linux. Projekt jest rozwijany przez autora linkera LLVM lld. Kluczową cechą Mold jest bardzo duża prędkość łączenia plików obiektowych, zauważalnie większa niż linkery GNU gold i LLVM lld (łączenie w Mold odbywa się z szybkością tylko o połowę mniejszą niż zwykłe kopiowanie plików za pomocą narzędzia cp). Kod napisany jest w języku C++ (C++20) i rozpowszechniany na licencji AGPLv3.

W nowej wersji:

  • Dodano obsługę optymalizacji na etapie łączenia (LTO, Link Time Optimization). Optymalizacje LTO różnią się uwzględnieniem stanu wszystkich plików biorących udział w procesie kompilacji, podczas gdy tradycyjne tryby optymalizacji optymalizują każdy plik osobno i nie uwzględniają warunków wywołania funkcji zdefiniowanych w innych plikach. Podczas gdy poprzednio, gdy znaleziono pliki kodu pośredniego (IR) GCC lub LLVM, wywoływano odpowiednie linkery ld.bfd lub ld.lld, teraz Mold przetwarza pliki IR niezależnie i korzysta z API Linker Plugin, używanego również w GNU ld i GNU złote łączniki. Po włączeniu LTO jest tylko nieznacznie szybsze niż inne konsolidatory, ponieważ większość czasu spędza się na optymalizacji kodu, a nie na łączeniu.
  • Dodano obsługę architektury RISC-V (RV64) na platformach hosta i platformy docelowej.
  • Dodano opcję „--emit-relocs”, aby umożliwić kopiowanie sekcji relokacji z plików wejściowych do plików wyjściowych w celu późniejszego zastosowania optymalizacji na etapie po linkowaniu.
  • Dodano opcję „--shuffle-sections”, aby losowo ustawić kolejność sekcji przed ustaleniem ich adresów w wirtualnej przestrzeni adresowej.
  • Dodano opcje „--print-dependents” i „--print-dependents=full” umożliwiające wyświetlenie w formacie CSV informacji o zależnościach pomiędzy plikami wejściowymi, które można wykorzystać na przykład do analizy powodów połączenia podczas łączenia określonych plików obiektowych lub podczas przeprowadzania minimalizacji zależności roboczych między plikami.
  • Dodano opcje „--warn-once” i „--warn-textrel”.
  • Usunięto zależność od libxxhash.

Źródło: opennet.ru

Dodaj komentarz