LLVM lld์—์„œ ๊ฐœ๋ฐœํ•œ Mold 1.1 ๋ง์ปค ์ถœ์‹œ

Linux ์‹œ์Šคํ…œ์—์„œ GNU ๋ง์ปค๋ฅผ ๋” ๋น ๋ฅด๊ณ  ํˆฌ๋ช…ํ•˜๊ฒŒ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Mold ๋ง์ปค ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” LLVM lld ๋ง์ปค ์ž‘์„ฑ์ž๊ฐ€ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. Mold์˜ ์ฃผ์š” ํŠน์ง•์€ ๊ฐœ์ฒด ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋กœ, GNU gold ๋ฐ LLVM lld ๋ง์ปค๋ณด๋‹ค ๋ˆˆ์— ๋„๊ฒŒ ์•ž์„œ ์žˆ์Šต๋‹ˆ๋‹ค(Mold์˜ ์—ฐ๊ฒฐ์€ cp ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ์†๋„์˜ ์ ˆ๋ฐ˜์— ๋ถˆ๊ณผํ•œ ์†๋„๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค). ์ฝ”๋“œ๋Š” C++(C++20)๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ AGPLv3 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์—์„œ:

  • ์—ฐ๊ฒฐ ๋‹จ๊ณ„(LTO, Link Time Optimization)์—์„œ ์ตœ์ ํ™” ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. LTO ์ตœ์ ํ™”๋Š” ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค๋Š” ์ ์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ๊ธฐ์กด ์ตœ์ ํ™” ๋ชจ๋“œ๋Š” ๊ฐ ํŒŒ์ผ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ตœ์ ํ™”ํ•˜๊ณ  ๋‹ค๋ฅธ ํŒŒ์ผ์— ์ •์˜๋œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” GCC ๋˜๋Š” LLVM ์ค‘๊ฐ„ ์ฝ”๋“œ(IR) ํŒŒ์ผ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ํ•ด๋‹น ld.bfd ๋˜๋Š” ld.lld ๋ง์ปค๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์ง€๋งŒ ์ด์ œ Mold๋Š” IR ํŒŒ์ผ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  GNU ld ๋ฐ GNU์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ง์ปค ํ”Œ๋Ÿฌ๊ทธ์ธ API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธˆ ๋ง์ปค. ํ™œ์„ฑํ™”๋˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์ด ์—ฐ๊ฒฐ๋ณด๋‹ค๋Š” ์ฝ”๋“œ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์†Œ๋น„๋˜๊ธฐ ๋•Œ๋ฌธ์— LTO๋Š” ๋‹ค๋ฅธ ๋ง์ปค๋ณด๋‹ค ์•ฝ๊ฐ„๋งŒ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ํ˜ธ์ŠคํŠธ ๋ฐ ๋Œ€์ƒ ํ”Œ๋žซํผ์— RISC-V(RV64) ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ํ›„ ๋‹จ๊ณ„์—์„œ ํ›„์† ์ตœ์ ํ™” ์ ์šฉ์„ ์œ„ํ•ด ์ž…๋ ฅ ํŒŒ์ผ์—์„œ ์ถœ๋ ฅ ํŒŒ์ผ๋กœ ์žฌ๋ฐฐ์น˜ ์„น์…˜์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก "--emit-relocs" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์ฃผ์†Œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ์„น์…˜์˜ ์ˆœ์„œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •ํ•˜๋Š” "--shuffle-sections" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ ํŒŒ์ผ ๊ฐ„์˜ ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ CSV ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด "--print-dependent" ๋ฐ "--print-dependents=full" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ๊ฐœ์ฒด ํŒŒ์ผ์„ ๋งํฌํ•  ๋•Œ ์—ฐ๊ฒฐ ์ด์œ ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ํŒŒ์ผ ๊ฐ„์˜ ์ข…์†์„ฑ ์ถ•์†Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ.
  • "--warn-once" ๋ฐ "--warn-textrel" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • libxxhash์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€