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