2

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

ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры | ProHoster